mirror of
https://github.com/iofq/nvim.nix.git
synced 2026-01-23 08:55:16 -06:00
new lazy rice
This commit is contained in:
parent
1eb2b1bc3c
commit
ece2c1c694
33 changed files with 1132 additions and 780 deletions
30
README.md
30
README.md
|
|
@ -1,19 +1,39 @@
|
||||||
## nvim.nix - personal Neovim config that runs on nixOS but doesn't sacrifice portability
|
## nvim.nix - personal Neovim config. First-class nix support, but doesn't sacrifice portability
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
Try it out!
|
||||||
```bash
|
```bash
|
||||||
nix run "github:iofq/nvim.nix" #neovim
|
nix run "github:iofq/nvim.nix" #nvim-min
|
||||||
|
```
|
||||||
|
|
||||||
|
Or use in a flake:
|
||||||
|
```nix
|
||||||
|
nvim = {
|
||||||
|
url = "github:iofq/nvim.nix";
|
||||||
|
};
|
||||||
|
...
|
||||||
|
pkgs = import nixpkgs {
|
||||||
|
overlays = [inputs.nvim.overlays.default]
|
||||||
|
}
|
||||||
|
... in configuration.nix
|
||||||
|
environment.systemPackages = with pkgs; [nvim];
|
||||||
```
|
```
|
||||||
|
|
||||||
Or, grab an AppImage from the Releases page.
|
Or, grab an AppImage from the Releases page.
|
||||||
|
|
||||||
## What the hell?
|
## What the hell?
|
||||||
|
|
||||||
This is a flake to build a Neovim package that includes my custom Lua config and dependencies. It then is bundled via CI into an AppImage.
|
This is a flake to build a Neovim package that includes my custom Lua config and dependencies. It then is bundled via Github Actions CI into an AppImage.
|
||||||
|
|
||||||
## Why the hell though?
|
## Why the hell though?
|
||||||
|
|
||||||
I use these AppImages because I develop in a number of airgapped environments that make traditional dotfile management a nightmare. Downloading a single AppImage and copying it around is a more suckless way of managing this.
|
I use these AppImages because I develop in a number of airgapped environments that make traditional dotfile management a nightmare. Downloading a single AppImage and copying it around is a more suckless way of managing this, especially because the non `-min` AppImage on the releases page includes runtime tooling like linters, LSPs, debuggers, etc, that can't be installed using `meson.nvim` without internet. A single ~200mb AppImage contains my entire IDE!
|
||||||
|
|
||||||
|
The config uses `lazy.nvim` for loading lua modules, meaning we still get its awesome dependency ordering and lazy loading, and the entire config in the `nvim/` dir can actually be slapped into `~/.config/nvim` and work out of the box in a non-nix setting, using Lazy to download plugins.
|
||||||
|
|
||||||
|
For best performance, extract the AppImage using `./nvim.AppImage --appimage-extract`, then run the resulting AppRun binary inside the folder. This prevents you from having to extract the whole AppImage on startup each time which HEAVILY speeds up launch times, at the cost of more disk space usage.
|
||||||
|
|
||||||
## kickstart-nix-nvim
|
## kickstart-nix-nvim
|
||||||
This repo is based off https://github.com/nix-community/kickstart-nix.nvim
|
This repo is based off https://github.com/nix-community/kickstart-nix.nvim, with some changes to enable `lazy.nvim` instead of neovim's native plugin loading.
|
||||||
|
|
||||||
|
The trick for enabling both nix and non-nix usage: in `mkNeovim.nix`, we prepend a `lazy_opts` variable to `init.lua` with some nix-specific Lazy configuration (we make Lazy treat each neovim plugin installed via nix as a local "dev" plugin, and show it where to find the lua files in the nix path via `packpath`). Later in the init file, we check for the existence of this variable. If it already is set, we know we're running from a nix config and can setup Lazy accordingly. If not, we can bootstrap Lazy for non-nix usage.
|
||||||
|
|
|
||||||
36
flake.lock
generated
36
flake.lock
generated
|
|
@ -99,12 +99,30 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nvim-early-retirement": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1723897376,
|
||||||
|
"narHash": "sha256-+W3AG99nzgr36t9Sg192hb/MH8s0uGAPD0cLBnil+og=",
|
||||||
|
"owner": "chrisgrieser",
|
||||||
|
"repo": "nvim-early-retirement",
|
||||||
|
"rev": "2c36a5671b9d8f0d9e11b77c5a55de802bc45e34",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "chrisgrieser",
|
||||||
|
"repo": "nvim-early-retirement",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
"gen-luarc": "gen-luarc",
|
"gen-luarc": "gen-luarc",
|
||||||
"nixpkgs": "nixpkgs_2",
|
"nixpkgs": "nixpkgs_2",
|
||||||
"snipe-nvim": "snipe-nvim"
|
"nvim-early-retirement": "nvim-early-retirement",
|
||||||
|
"snipe-nvim": "snipe-nvim",
|
||||||
|
"workspace-diagnostics-nvim": "workspace-diagnostics-nvim"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"snipe-nvim": {
|
"snipe-nvim": {
|
||||||
|
|
@ -137,6 +155,22 @@
|
||||||
"repo": "default",
|
"repo": "default",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"workspace-diagnostics-nvim": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1723294887,
|
||||||
|
"narHash": "sha256-lBj4KUPmmhtpffYky/HpaTwY++d/Q9socp/Ys+4VeX0=",
|
||||||
|
"owner": "artemave",
|
||||||
|
"repo": "workspace-diagnostics.nvim",
|
||||||
|
"rev": "573ff93c47898967efdfbc6587a1a39e3c2d365e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "artemave",
|
||||||
|
"repo": "workspace-diagnostics.nvim",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,14 @@
|
||||||
url = "github:leath-dub/snipe.nvim";
|
url = "github:leath-dub/snipe.nvim";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
nvim-early-retirement = {
|
||||||
|
url = "github:chrisgrieser/nvim-early-retirement";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
workspace-diagnostics-nvim = {
|
||||||
|
url = "github:artemave/workspace-diagnostics.nvim";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = inputs @ {
|
outputs = inputs @ {
|
||||||
|
|
|
||||||
|
|
@ -91,60 +91,38 @@ with lib;
|
||||||
src = nvimRtpSrc;
|
src = nvimRtpSrc;
|
||||||
|
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
mkdir -p $out/nvim
|
|
||||||
mkdir -p $out/lua
|
mkdir -p $out/lua
|
||||||
rm init.lua
|
|
||||||
'';
|
'';
|
||||||
|
|
||||||
installPhase = ''
|
installPhase = ''
|
||||||
cp -r after $out/after
|
|
||||||
rm -r after
|
|
||||||
cp -r lua $out/lua
|
cp -r lua $out/lua
|
||||||
rm -r lua
|
rm -r lua
|
||||||
cp -r * $out/nvim
|
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
# The final init.lua content that we pass to the Neovim wrapper.
|
# The final init.lua content that we pass to the Neovim wrapper.
|
||||||
# It wraps the user init.lua, prepends the lua lib directory to the RTP
|
# It wraps the user init.lua, prepends the lua lib directory to the RTP
|
||||||
# and prepends the nvim and after directory to the RTP
|
# and prepends the nvim and after directory to the RTP
|
||||||
# It also adds logic for bootstrapping dev plugins (for plugin developers)
|
initLua = ''
|
||||||
initLua =
|
|
||||||
''
|
|
||||||
vim.loader.enable()
|
|
||||||
-- prepend lua directory
|
|
||||||
vim.opt.rtp:prepend('${nvimRtp}/lua')
|
vim.opt.rtp:prepend('${nvimRtp}/lua')
|
||||||
''
|
lazy_opts = {
|
||||||
# Wrap init.lua
|
performance = {
|
||||||
+ (builtins.readFile ../nvim/init.lua)
|
reset_packpath = false,
|
||||||
# Bootstrap/load dev plugins
|
rtp = { reset = false, },
|
||||||
+ optionalString (devPlugins != []) (
|
},
|
||||||
''
|
dev = {
|
||||||
local dev_pack_path = vim.fn.stdpath('data') .. '/site/pack/dev'
|
path = "${pkgs.neovimUtils.packDir neovimConfig.packpathDirs}/pack/myNeovimPackages/start",
|
||||||
local dev_plugins_dir = dev_pack_path .. '/opt'
|
patterns = {""},
|
||||||
local dev_plugin_path
|
},
|
||||||
''
|
install = { missing = false, },
|
||||||
+ strings.concatMapStringsSep
|
spec = {{ import = "plugins" }},
|
||||||
"\n"
|
disabled_plugins = {
|
||||||
(plugin: ''
|
"netrwPlugin",
|
||||||
dev_plugin_path = dev_plugins_dir .. '/${plugin.name}'
|
"tutor",
|
||||||
if vim.fn.empty(vim.fn.glob(dev_plugin_path)) > 0 then
|
"zipPlugin",
|
||||||
vim.notify('Bootstrapping dev plugin ${plugin.name} ...', vim.log.levels.INFO)
|
},
|
||||||
vim.cmd('!${pkgs.git}/bin/git clone ${plugin.url} ' .. dev_plugin_path)
|
}
|
||||||
end
|
'' + (builtins.readFile ../nvim/init.lua);
|
||||||
vim.cmd('packadd! ${plugin.name}')
|
|
||||||
'')
|
|
||||||
devPlugins
|
|
||||||
)
|
|
||||||
# Prepend nvim and after directories to the runtimepath
|
|
||||||
# NOTE: This is done after init.lua,
|
|
||||||
# because of a bug in Neovim that can cause filetype plugins
|
|
||||||
# to be sourced prematurely, see https://github.com/neovim/neovim/issues/19008
|
|
||||||
# We prepend to ensure that user ftplugins are sourced before builtin ftplugins.
|
|
||||||
+ ''
|
|
||||||
vim.opt.rtp:prepend('${nvimRtp}/nvim')
|
|
||||||
vim.opt.rtp:prepend('${nvimRtp}/after')
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Add arguments to the Neovim wrapper script
|
# Add arguments to the Neovim wrapper script
|
||||||
extraMakeWrapperArgs = builtins.concatStringsSep " " (
|
extraMakeWrapperArgs = builtins.concatStringsSep " " (
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ with final.pkgs.lib; let
|
||||||
version = src.lastModifiedDate;
|
version = src.lastModifiedDate;
|
||||||
};
|
};
|
||||||
snipe-nvim = mkNvimPlugin inputs.snipe-nvim "snipe-nvim";
|
snipe-nvim = mkNvimPlugin inputs.snipe-nvim "snipe-nvim";
|
||||||
|
nvim-early-retirement = mkNvimPlugin inputs.nvim-early-retirement "nvim-early-retirement";
|
||||||
|
workspace-diagnostics-nvim = mkNvimPlugin inputs.workspace-diagnostics-nvim "workspace-diagnostics-nvim";
|
||||||
|
|
||||||
mkNeovim = pkgs.callPackage ./mkNeovim.nix { inherit pkgs-wrapNeovim; };
|
mkNeovim = pkgs.callPackage ./mkNeovim.nix { inherit pkgs-wrapNeovim; };
|
||||||
|
|
||||||
|
|
@ -26,7 +28,7 @@ with final.pkgs.lib; let
|
||||||
eyeliner-nvim
|
eyeliner-nvim
|
||||||
friendly-snippets
|
friendly-snippets
|
||||||
gitsigns-nvim
|
gitsigns-nvim
|
||||||
lualine-nvim
|
lazy-nvim
|
||||||
luasnip
|
luasnip
|
||||||
markview-nvim
|
markview-nvim
|
||||||
mini-nvim
|
mini-nvim
|
||||||
|
|
@ -35,8 +37,13 @@ with final.pkgs.lib; let
|
||||||
none-ls-nvim
|
none-ls-nvim
|
||||||
nightfox-nvim
|
nightfox-nvim
|
||||||
nvim-cmp
|
nvim-cmp
|
||||||
|
nvim-dap
|
||||||
|
nvim-dap-go
|
||||||
|
nvim-dap-ui
|
||||||
|
nvim-early-retirement
|
||||||
nvim-lspconfig
|
nvim-lspconfig
|
||||||
nvim-neoclip-lua
|
nvim-neoclip-lua
|
||||||
|
nvim-nio
|
||||||
nvim-treesitter-context
|
nvim-treesitter-context
|
||||||
nvim-treesitter-textobjects
|
nvim-treesitter-textobjects
|
||||||
(nvim-treesitter.withPlugins(p: with p; [
|
(nvim-treesitter.withPlugins(p: with p; [
|
||||||
|
|
@ -68,6 +75,7 @@ with final.pkgs.lib; let
|
||||||
]))
|
]))
|
||||||
nvim-web-devicons
|
nvim-web-devicons
|
||||||
oil-nvim
|
oil-nvim
|
||||||
|
outline-nvim
|
||||||
scope-nvim
|
scope-nvim
|
||||||
snipe-nvim
|
snipe-nvim
|
||||||
telescope-fzf-native-nvim
|
telescope-fzf-native-nvim
|
||||||
|
|
@ -75,29 +83,38 @@ with final.pkgs.lib; let
|
||||||
toggleterm-nvim
|
toggleterm-nvim
|
||||||
trouble-nvim
|
trouble-nvim
|
||||||
undotree
|
undotree
|
||||||
which-key-nvim
|
workspace-diagnostics-nvim
|
||||||
];
|
];
|
||||||
|
|
||||||
extraPackages = with pkgs; [
|
basePackages = with pkgs; [
|
||||||
ripgrep
|
ripgrep
|
||||||
yamllint
|
];
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
# linters
|
||||||
puppet-lint
|
puppet-lint
|
||||||
|
yamllint
|
||||||
|
|
||||||
|
# LSPs
|
||||||
gopls
|
gopls
|
||||||
python312Packages.jedi-language-server
|
lua-language-server
|
||||||
nil
|
nil
|
||||||
phpactor
|
phpactor
|
||||||
|
python312Packages.jedi-language-server
|
||||||
|
|
||||||
|
# debuggers
|
||||||
|
delve
|
||||||
];
|
];
|
||||||
in {
|
in {
|
||||||
nvim-pkg = mkNeovim {
|
nvim-pkg = mkNeovim {
|
||||||
plugins = all-plugins;
|
plugins = all-plugins;
|
||||||
appName = "nvim";
|
appName = "nvim";
|
||||||
inherit extraPackages;
|
extraPackages = basePackages ++ extraPackages;
|
||||||
};
|
};
|
||||||
|
|
||||||
nvim-min-pkg = mkNeovim {
|
nvim-min-pkg = mkNeovim {
|
||||||
plugins = all-plugins;
|
plugins = all-plugins;
|
||||||
appName = "nvim";
|
appName = "nvim";
|
||||||
extraPackages = [];
|
extraPackages = basePackages;
|
||||||
};
|
};
|
||||||
|
|
||||||
nvim-luarc-json = final.mk-luarc-json {
|
nvim-luarc-json = final.mk-luarc-json {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
## `after` directory
|
|
||||||
|
|
||||||
Scripts put in
|
|
||||||
|
|
||||||
- `after/plugin` will be sourced *after* init.lua
|
|
||||||
or any other scripts are sourced during startup.
|
|
||||||
- `after/ftplugin` will be sourced when opening a
|
|
||||||
filetype, *after* any other `ftplugin` scripts are sourced.
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
vim.cmd('colorscheme terafox')
|
|
||||||
vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = 'green', bold = true })
|
|
||||||
vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = 'red', bold = true })
|
|
||||||
vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = 'green', bold = true })
|
|
||||||
vim.api.nvim_set_hl(0, 'EyelinerPrimary', { underline = true })
|
|
||||||
vim.api.nvim_set_hl(0, 'EyelinerSecondary', { underline = true })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>aa', '<cmd>AerialToggle!<CR>', { desc = 'Toggle Aerial' })
|
|
||||||
vim.keymap.set('n', '<leader>nb', vim.cmd.DiffviewOpen, { noremap = true, desc = '[g]it [d]iffview open' })
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>de',
|
|
||||||
'<cmd>Trouble diagnostics toggle focus=true filter.buf=0<CR>',
|
|
||||||
{ noremap = true, desc = 'Trouble diagnostics' }
|
|
||||||
)
|
|
||||||
|
|
||||||
local ts = require('telescope')
|
|
||||||
ts.load_extension('aerial')
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>fs',
|
|
||||||
ts.extensions.aerial.aerial,
|
|
||||||
{ noremap = true, silent = true, desc = 'Fuzzy find treesitter objects' }
|
|
||||||
)
|
|
||||||
ts.load_extension('scope')
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>fb',
|
|
||||||
'<cmd>Telescope scope buffers<cr>',
|
|
||||||
{ noremap = true, silent = true, desc = 'Pick buffers (scope.nvim)' }
|
|
||||||
)
|
|
||||||
100
nvim/init.lua
100
nvim/init.lua
|
|
@ -1,75 +1,27 @@
|
||||||
-- vim settings ++ mini.nvim.basics
|
vim.g.mapleader = ' '
|
||||||
----------------------------------------
|
-- If lazy_opts is set, we're running in wrapped neovim via nix
|
||||||
vim.opt.backspace = 'indent,eol,start'
|
if not lazy_opts then
|
||||||
vim.opt.clipboard = 'unnamedplus'
|
-- Bootstrapping lazy.nvim
|
||||||
vim.opt.completeopt = 'menuone'
|
local lazypath = vim.fn.stdpath('data') .. '/lazy/lazy.nvim'
|
||||||
vim.opt.expandtab = true -- insert tabs as spaces
|
if not vim.loop.fs_stat(lazypath) then
|
||||||
vim.opt.inccommand = 'split' -- incremental live completion
|
vim.fn.system {
|
||||||
vim.opt.laststatus = 1
|
'git',
|
||||||
vim.opt.list = true
|
'clone',
|
||||||
vim.opt.nrformats:append('alpha') -- let Ctrl-a do letters as well
|
'--filter=blob:none',
|
||||||
vim.opt.path:append('**') -- enable fuzzy :find ing
|
'https://github.com/folke/lazy.nvim.git',
|
||||||
vim.opt.relativenumber = true
|
'--branch=stable', -- latest stable release
|
||||||
vim.opt.shadafile = 'NONE' -- disable shada
|
lazypath,
|
||||||
vim.opt.shiftwidth = 0 -- >> shifts by tabstop
|
}
|
||||||
vim.opt.showmatch = true -- highlight matching brackets
|
end
|
||||||
vim.opt.showmode = true
|
vim.opt.rtp:prepend(lazypath)
|
||||||
vim.opt.softtabstop = -1 -- backspace removes tabstop
|
lazy_opts = {
|
||||||
vim.opt.swapfile = false
|
spec = { { import = 'plugins' } },
|
||||||
vim.opt.tabstop = 2 -- 2 space tabs are based
|
disabled_plugins = {
|
||||||
vim.opt.updatetime = 250 -- decrease update time
|
'netrwPlugin',
|
||||||
vim.opt.virtualedit = 'onemore'
|
'tutor',
|
||||||
vim.g.fzf_layout = { window = { width = 0.9, height = 0.6 } }
|
'zipPlugin',
|
||||||
|
},
|
||||||
-- no highlight floats
|
}
|
||||||
vim.cmd([[ hi NormalFloat ctermbg=none ]])
|
|
||||||
|
|
||||||
-- Switch tab length on the fly
|
|
||||||
vim.keymap.set('n', '\\t', function()
|
|
||||||
vim.o.tabstop = vim.o.tabstop == 2 and 4 or 2
|
|
||||||
end, { silent = true, desc = 'toggle tabstop' })
|
|
||||||
|
|
||||||
-- autocmd
|
|
||||||
----------------------------------------
|
|
||||||
local undopath = '~/.local/share/nvim/undo'
|
|
||||||
vim.api.nvim_create_autocmd('VimEnter', {
|
|
||||||
command = 'silent !mkdir -p ' .. undopath,
|
|
||||||
group = vim.api.nvim_create_augroup('Init', {}),
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Configure Neovim diagnostic messages
|
|
||||||
local function prefix_diagnostic(prefix, diagnostic)
|
|
||||||
return string.format(prefix .. ' %s', diagnostic.message)
|
|
||||||
end
|
end
|
||||||
vim.diagnostic.config {
|
require('lazy').setup(lazy_opts)
|
||||||
virtual_text = {
|
require('config')
|
||||||
prefix = '',
|
|
||||||
format = function(diagnostic)
|
|
||||||
local severity = diagnostic.severity
|
|
||||||
if severity == vim.diagnostic.severity.ERROR then
|
|
||||||
return prefix_diagnostic('', diagnostic)
|
|
||||||
end
|
|
||||||
if severity == vim.diagnostic.severity.WARN then
|
|
||||||
return prefix_diagnostic('⚠', diagnostic)
|
|
||||||
end
|
|
||||||
if severity == vim.diagnostic.severity.INFO then
|
|
||||||
return prefix_diagnostic('ⓘ', diagnostic)
|
|
||||||
end
|
|
||||||
if severity == vim.diagnostic.severity.HINT then
|
|
||||||
return prefix_diagnostic('', diagnostic)
|
|
||||||
end
|
|
||||||
return prefix_diagnostic('■', diagnostic)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
update_in_insert = false,
|
|
||||||
underline = true,
|
|
||||||
severity_sort = true,
|
|
||||||
float = {
|
|
||||||
focusable = false,
|
|
||||||
style = 'minimal',
|
|
||||||
border = 'rounded',
|
|
||||||
source = 'if_many',
|
|
||||||
header = '',
|
|
||||||
prefix = '',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
|
||||||
92
nvim/lua/config/init.lua
Normal file
92
nvim/lua/config/init.lua
Normal file
|
|
@ -0,0 +1,92 @@
|
||||||
|
vim.opt.backspace = 'indent,eol,start'
|
||||||
|
vim.opt.clipboard = 'unnamedplus'
|
||||||
|
vim.opt.completeopt = 'menuone'
|
||||||
|
vim.opt.expandtab = true -- insert tabs as spaces
|
||||||
|
vim.opt.inccommand = 'split' -- incremental live completion
|
||||||
|
vim.opt.laststatus = 1
|
||||||
|
vim.opt.list = true
|
||||||
|
vim.opt.nrformats:append('alpha') -- let Ctrl-a do letters as well
|
||||||
|
vim.opt.path:append('**') -- enable fuzzy :find ing
|
||||||
|
vim.opt.relativenumber = true
|
||||||
|
vim.opt.shadafile = 'NONE' -- disable shada
|
||||||
|
vim.opt.shiftwidth = 0 -- >> shifts by tabstop
|
||||||
|
vim.opt.showmatch = true -- highlight matching brackets
|
||||||
|
vim.opt.showmode = true
|
||||||
|
vim.opt.signcolumn = 'no'
|
||||||
|
vim.opt.spell = false
|
||||||
|
vim.opt.softtabstop = -1 -- backspace removes tabstop
|
||||||
|
vim.opt.swapfile = false
|
||||||
|
vim.opt.tabstop = 2 -- 2 space tabs are based
|
||||||
|
vim.opt.updatetime = 250 -- decrease update time
|
||||||
|
vim.opt.virtualedit = 'onemore'
|
||||||
|
vim.opt.wrap = true
|
||||||
|
vim.g.fzf_layout = { window = { width = 0.9, height = 0.6 } }
|
||||||
|
|
||||||
|
-- Switch tab length on the fly
|
||||||
|
vim.keymap.set('n', '\\t', function()
|
||||||
|
vim.o.tabstop = vim.o.tabstop == 2 and 4 or 2
|
||||||
|
end, { silent = true, desc = 'toggle tabstop' })
|
||||||
|
|
||||||
|
-- autocmd
|
||||||
|
----------------------------------------
|
||||||
|
local undopath = '~/.local/share/nvim/undo'
|
||||||
|
vim.api.nvim_create_autocmd('VimEnter', {
|
||||||
|
command = 'silent !mkdir -p ' .. undopath,
|
||||||
|
group = vim.api.nvim_create_augroup('Init', {}),
|
||||||
|
})
|
||||||
|
-- open :g in buffers
|
||||||
|
vim.api.nvim_create_autocmd('BufWinEnter', {
|
||||||
|
pattern = '*',
|
||||||
|
callback = function(event)
|
||||||
|
if vim.bo[event.buf].filetype == 'help' then
|
||||||
|
vim.cmd.only()
|
||||||
|
vim.keymap.set('n', 'q', vim.cmd.bdelete, { noremap = true, silent = true })
|
||||||
|
vim.bo.buflisted = true
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Configure Neovim diagnostic messages
|
||||||
|
local function prefix_diagnostic(prefix, diagnostic)
|
||||||
|
return string.format(prefix .. ' %s', diagnostic.message)
|
||||||
|
end
|
||||||
|
vim.diagnostic.config {
|
||||||
|
virtual_text = {
|
||||||
|
prefix = '',
|
||||||
|
format = function(diagnostic)
|
||||||
|
local severity = diagnostic.severity
|
||||||
|
if severity == vim.diagnostic.severity.ERROR then
|
||||||
|
return prefix_diagnostic('', diagnostic)
|
||||||
|
end
|
||||||
|
if severity == vim.diagnostic.severity.WARN then
|
||||||
|
return prefix_diagnostic('⚠', diagnostic)
|
||||||
|
end
|
||||||
|
if severity == vim.diagnostic.severity.INFO then
|
||||||
|
return prefix_diagnostic('ⓘ', diagnostic)
|
||||||
|
end
|
||||||
|
if severity == vim.diagnostic.severity.HINT then
|
||||||
|
return prefix_diagnostic('', diagnostic)
|
||||||
|
end
|
||||||
|
return prefix_diagnostic('■', diagnostic)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
update_in_insert = false,
|
||||||
|
underline = true,
|
||||||
|
severity_sort = true,
|
||||||
|
float = {
|
||||||
|
focusable = false,
|
||||||
|
style = 'minimal',
|
||||||
|
border = 'rounded',
|
||||||
|
source = 'if_many',
|
||||||
|
header = '',
|
||||||
|
prefix = '',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
-- random keymaps
|
||||||
|
vim.keymap.set('n', 'gq', vim.cmd.bdelete, { silent = true })
|
||||||
|
vim.keymap.set('n', 'gr', 'gT', { noremap = true, silent = true })
|
||||||
|
vim.keymap.set('n', 'n', 'nzz', { noremap = true, silent = true })
|
||||||
|
vim.keymap.set('n', 'N', 'Nzz', { noremap = true, silent = true })
|
||||||
|
vim.keymap.set({ 'v', 'i' }, 'wq', '<esc>l', { noremap = true, silent = true })
|
||||||
|
vim.keymap.set('n', '<leader>x', '"rd', { remap = true, silent = true })
|
||||||
98
nvim/lua/plugins/completion.lua
Normal file
98
nvim/lua/plugins/completion.lua
Normal file
|
|
@ -0,0 +1,98 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'hrsh7th/nvim-cmp',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'hrsh7th/cmp-buffer',
|
||||||
|
'hrsh7th/cmp-cmdline',
|
||||||
|
'hrsh7th/cmp-path',
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
'ray-x/cmp-treesitter',
|
||||||
|
'L3MON4D3/LuaSnip',
|
||||||
|
'saadparwaiz1/cmp_luasnip',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
local cmp = require('cmp')
|
||||||
|
cmp.setup {
|
||||||
|
snippet = {
|
||||||
|
expand = function(args)
|
||||||
|
require('luasnip').lsp_expand(args.body)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
experimental = {
|
||||||
|
native_menu = false,
|
||||||
|
ghost_text = true,
|
||||||
|
},
|
||||||
|
mapping = cmp.mapping.preset.insert {
|
||||||
|
['<C-j>'] = cmp.mapping.scroll_docs(-4),
|
||||||
|
['<C-k>'] = cmp.mapping.scroll_docs(4),
|
||||||
|
['<C-Space>'] = cmp.mapping.complete(),
|
||||||
|
['<esc>'] = cmp.mapping.abort(),
|
||||||
|
['<CR>'] = cmp.mapping.confirm { select = true }, -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
||||||
|
},
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = 'nvim_lsp' },
|
||||||
|
{ name = 'luasnip' },
|
||||||
|
}, {
|
||||||
|
{ name = 'buffer' },
|
||||||
|
}),
|
||||||
|
}
|
||||||
|
|
||||||
|
cmp.setup.cmdline({ '/', '?' }, {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = {
|
||||||
|
{ name = 'buffer' },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
cmp.setup.cmdline(':', {
|
||||||
|
mapping = cmp.mapping.preset.cmdline(),
|
||||||
|
sources = cmp.config.sources({
|
||||||
|
{ name = 'path' },
|
||||||
|
}, {
|
||||||
|
{ name = 'cmdline' },
|
||||||
|
}),
|
||||||
|
matching = { disallow_symbol_nonprefix_matching = false },
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'L3MON4D3/LuaSnip',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = { 'rafamadriz/friendly-snippets' },
|
||||||
|
config = function()
|
||||||
|
local ls = require('luasnip')
|
||||||
|
ls.config.set_config {
|
||||||
|
history = true,
|
||||||
|
updateevents = 'TextChanged, TextChangedI',
|
||||||
|
}
|
||||||
|
require('luasnip.loaders.from_vscode').lazy_load()
|
||||||
|
|
||||||
|
vim.keymap.set({ 'i', 's' }, '<C-K>', function()
|
||||||
|
if ls.expand_or_jumpable() then
|
||||||
|
ls.expand_or_jump()
|
||||||
|
end
|
||||||
|
end, { silent = true })
|
||||||
|
|
||||||
|
vim.keymap.set({ 'i', 's' }, '<C-J>', function()
|
||||||
|
if ls.jumpable(-1) then
|
||||||
|
ls.jump(-1)
|
||||||
|
end
|
||||||
|
end, { silent = true })
|
||||||
|
|
||||||
|
vim.keymap.set({ 'i', 's' }, '<C-L>', function()
|
||||||
|
if ls.choice_active() then
|
||||||
|
ls.change_choice(1)
|
||||||
|
end
|
||||||
|
end, { silent = true })
|
||||||
|
|
||||||
|
--------------------
|
||||||
|
-- Snippets --
|
||||||
|
--------------------
|
||||||
|
local fmta = require('luasnip.extras.fmt').fmta
|
||||||
|
ls.add_snippets('go', {
|
||||||
|
ls.snippet('ie', fmta('if err != nil {\n\treturn <err>\n}', { err = ls.insert_node(1, 'err') })),
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
61
nvim/lua/plugins/debug.lua
Normal file
61
nvim/lua/plugins/debug.lua
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'rcarriga/nvim-dap-ui',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-neotest/nvim-nio',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'mfussenegger/nvim-dap',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'leoluz/nvim-dap-go',
|
||||||
|
'rcarriga/nvim-dap-ui',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
local d = require('dap')
|
||||||
|
local w = require('dap.ui.widgets')
|
||||||
|
local ui = require('dapui')
|
||||||
|
require('dap-go').setup()
|
||||||
|
ui.setup()
|
||||||
|
|
||||||
|
local scopes = nil
|
||||||
|
vim.keymap.set('n', '<leader>za', function()
|
||||||
|
ui.toggle()
|
||||||
|
end, { desc = 'toggle dapui' })
|
||||||
|
vim.keymap.set('n', '<leader>zz', function()
|
||||||
|
scopes = w.sidebar(w.scopes, {}, 'split')
|
||||||
|
d.continue()
|
||||||
|
end, { desc = 'start debugger' })
|
||||||
|
vim.keymap.set('n', '<leader>zn', function()
|
||||||
|
d.step_over()
|
||||||
|
end, { desc = 'step over' })
|
||||||
|
vim.keymap.set('n', '<leader>zi', function()
|
||||||
|
d.step_into()
|
||||||
|
end, { desc = 'step into' })
|
||||||
|
vim.keymap.set('n', '<leader>zo', function()
|
||||||
|
d.step_out()
|
||||||
|
end, { desc = 'step out' })
|
||||||
|
vim.keymap.set('n', '<leader>zx', function()
|
||||||
|
d.toggle_breakpoint()
|
||||||
|
end, { desc = 'toggle_breakpoint' })
|
||||||
|
vim.keymap.set('n', '<leader>zr', function()
|
||||||
|
d.run_last()
|
||||||
|
end, { desc = 'run prev' })
|
||||||
|
vim.keymap.set({ 'n', 'v' }, '<leader>zh', function()
|
||||||
|
ui.eval()
|
||||||
|
end, { desc = 'hover' })
|
||||||
|
vim.keymap.set({ 'n', 'v' }, '<leader>zp', function()
|
||||||
|
require('dap.ui.widgets').preview()
|
||||||
|
end, { desc = 'preview' })
|
||||||
|
vim.keymap.set('n', '<leader>zf', function()
|
||||||
|
local widgets = require('dap.ui.widgets')
|
||||||
|
widgets.centered_float(widgets.frames)
|
||||||
|
end, { desc = 'view frames' })
|
||||||
|
vim.keymap.set('n', '<leader>zs', function()
|
||||||
|
scopes.toggle()
|
||||||
|
end, { desc = 'toggle scope view' })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
197
nvim/lua/plugins/lsp.lua
Normal file
197
nvim/lua/plugins/lsp.lua
Normal file
|
|
@ -0,0 +1,197 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'folke/trouble.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'artemave/workspace-diagnostics.nvim',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
require('trouble').setup()
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>de',
|
||||||
|
'<cmd>Trouble diagnostics toggle focus=true<CR>',
|
||||||
|
{ noremap = true, desc = 'Trouble diagnostics' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>dE',
|
||||||
|
'<cmd>Trouble diagnostics toggle focus=true filter.buf=0<CR>',
|
||||||
|
{ noremap = true, desc = 'Trouble diagnostics (currrent buffer)' }
|
||||||
|
)
|
||||||
|
vim.keymap.set('n', '<leader>dw', function()
|
||||||
|
for _, client in ipairs(vim.lsp.get_clients { bufnr = 0 }) do
|
||||||
|
require('workspace-diagnostics').populate_workspace_diagnostics(client, 0)
|
||||||
|
end
|
||||||
|
end, { noremap = true, desc = 'Populate Trouble workspace diagnostics' })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'neovim/nvim-lspconfig',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'hrsh7th/cmp-nvim-lsp',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
local lspconfig = require('lspconfig')
|
||||||
|
lspconfig.util.default_config.capabilities = vim.tbl_deep_extend(
|
||||||
|
'force',
|
||||||
|
lspconfig.util.default_config.capabilities,
|
||||||
|
require('cmp_nvim_lsp').default_capabilities()
|
||||||
|
)
|
||||||
|
|
||||||
|
lspconfig.gopls.setup {
|
||||||
|
settings = {
|
||||||
|
gopls = {
|
||||||
|
gofumpt = true,
|
||||||
|
codelenses = {
|
||||||
|
gc_details = true,
|
||||||
|
test = true,
|
||||||
|
},
|
||||||
|
analyses = {
|
||||||
|
unusedvariable = true,
|
||||||
|
shadow = true,
|
||||||
|
},
|
||||||
|
hints = {
|
||||||
|
assignVariableTypes = true,
|
||||||
|
constantValues = true,
|
||||||
|
functionTypeParameters = true,
|
||||||
|
rangeVariableTypes = true,
|
||||||
|
},
|
||||||
|
usePlaceholders = true,
|
||||||
|
staticcheck = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
on_attach = function()
|
||||||
|
vim.api.nvim_command('au BufWritePre <buffer> lua vim.lsp.buf.format { async = false }')
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
lspconfig.jedi_language_server.setup {}
|
||||||
|
lspconfig.nil_ls.setup {}
|
||||||
|
lspconfig.phpactor.setup {}
|
||||||
|
lspconfig.lua_ls.setup {
|
||||||
|
on_init = function(client)
|
||||||
|
local path = client.workspace_folders[1].name
|
||||||
|
if vim.loop.fs_stat(path .. '/.luarc.json') or vim.loop.fs_stat(path .. '/.luarc.jsonc') then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
client.config.settings.Lua = vim.tbl_deep_extend('force', client.config.settings.Lua, {
|
||||||
|
runtime = {
|
||||||
|
version = 'LuaJIT',
|
||||||
|
},
|
||||||
|
workspace = {
|
||||||
|
checkThirdParty = false,
|
||||||
|
library = {
|
||||||
|
vim.env.VIMRUNTIME,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
settings = {
|
||||||
|
Lua = {},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Prev diagnostic' })
|
||||||
|
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Next diagnostic' })
|
||||||
|
|
||||||
|
vim.api.nvim_create_autocmd('LspAttach', {
|
||||||
|
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
||||||
|
callback = function(ev)
|
||||||
|
local bufnr = ev.buf
|
||||||
|
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
||||||
|
require('workspace-diagnostics').populate_workspace_diagnostics(client, bufnr)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'K',
|
||||||
|
vim.lsp.buf.hover,
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hover' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>rn',
|
||||||
|
vim.lsp.buf.rename,
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP Rename' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
{ 'n', 'v' },
|
||||||
|
'<leader>da',
|
||||||
|
vim.lsp.buf.code_action,
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP code action' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>dd',
|
||||||
|
'<cmd>Telescope lsp_definitions<cr>',
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP definitions' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>di',
|
||||||
|
'<cmd>Telescope lsp_implementations<cr>',
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP implementations' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>dr',
|
||||||
|
'<cmd>Telescope lsp_references<cr>',
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP references' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>dt',
|
||||||
|
'<cmd>Telescope lsp_type_definitions<cr>',
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP type defs' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>ds',
|
||||||
|
'<cmd>Telescope lsp_document_symbols<cr>',
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP symbols' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>dl',
|
||||||
|
vim.lsp.codelens.run,
|
||||||
|
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP codelens' }
|
||||||
|
)
|
||||||
|
vim.keymap.set('n', '<leader>dh', function()
|
||||||
|
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
||||||
|
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hints toggle' })
|
||||||
|
vim.keymap.set('n', '<space>df', function()
|
||||||
|
vim.lsp.buf.format { async = true }
|
||||||
|
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP format' })
|
||||||
|
-- Auto-refresh code lenses
|
||||||
|
if not client then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local group = vim.api.nvim_create_augroup(string.format('lsp-%s-%s', bufnr, client.id), {})
|
||||||
|
if client.server_capabilities.codeLensProvider then
|
||||||
|
vim.api.nvim_create_autocmd({ 'InsertLeave', 'BufWritePost', 'TextChanged' }, {
|
||||||
|
group = group,
|
||||||
|
callback = function()
|
||||||
|
vim.lsp.codelens.refresh { bufnr = bufnr }
|
||||||
|
end,
|
||||||
|
buffer = bufnr,
|
||||||
|
})
|
||||||
|
vim.lsp.codelens.refresh { bufnr = bufnr }
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
vim.api.nvim_exec_autocmds('FileType', {})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'nvimtools/none-ls.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
config = function()
|
||||||
|
local null = require('null-ls')
|
||||||
|
null.setup {
|
||||||
|
sources = {
|
||||||
|
null.builtins.diagnostics.puppet_lint,
|
||||||
|
null.builtins.diagnostics.yamllint,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
155
nvim/lua/plugins/mini.lua
Normal file
155
nvim/lua/plugins/mini.lua
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'echasnovski/mini.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
config = function()
|
||||||
|
require('mini.ai').setup()
|
||||||
|
require('mini.comment').setup()
|
||||||
|
require('mini.pairs').setup()
|
||||||
|
require('mini.statusline').setup {
|
||||||
|
content = {
|
||||||
|
active = function()
|
||||||
|
local mode, mode_hl = MiniStatusline.section_mode {}
|
||||||
|
local git = function()
|
||||||
|
local summary = vim.b.gitsigns_head
|
||||||
|
if summary == nil then
|
||||||
|
return ''
|
||||||
|
end
|
||||||
|
summary = '~' .. summary
|
||||||
|
|
||||||
|
return summary == '' and '' or summary
|
||||||
|
end
|
||||||
|
local diff = function()
|
||||||
|
local summary = vim.b.gitsigns_status
|
||||||
|
if summary == nil then
|
||||||
|
return ''
|
||||||
|
end
|
||||||
|
|
||||||
|
return summary
|
||||||
|
end
|
||||||
|
local diagnostics = MiniStatusline.section_diagnostics { trunc_width = 75 }
|
||||||
|
local filename = MiniStatusline.section_filename { trunc_width = 140 }
|
||||||
|
local search = MiniStatusline.section_searchcount { trunc_width = 75 }
|
||||||
|
|
||||||
|
return MiniStatusline.combine_groups {
|
||||||
|
{ hl = mode_hl, strings = { mode } },
|
||||||
|
'%<', -- Mark general truncate point
|
||||||
|
{ hl = 'MiniStatuslineFilename', strings = { filename } },
|
||||||
|
'%=', -- End left alignment
|
||||||
|
{ hl = 'MiniStatusDevinfo', strings = { git(), diff(), diagnostics } },
|
||||||
|
{ hl = mode_hl, strings = { search } },
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
inactive = function()
|
||||||
|
local filename = MiniStatusline.section_filename { trunc_width = 140 }
|
||||||
|
|
||||||
|
return MiniStatusline.combine_groups {
|
||||||
|
{ hl = 'MiniStatuslineFilename', strings = { filename } },
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
vim.opt.showmode = false
|
||||||
|
|
||||||
|
local miniclue = require('mini.clue')
|
||||||
|
miniclue.setup {
|
||||||
|
triggers = {
|
||||||
|
{ mode = 'n', keys = '<Leader>' },
|
||||||
|
{ mode = 'n', keys = 'g' },
|
||||||
|
{ mode = 'n', keys = "'" },
|
||||||
|
{ mode = 'n', keys = '`' },
|
||||||
|
{ mode = 'n', keys = '"' },
|
||||||
|
{ mode = 'n', keys = '<C-w>' },
|
||||||
|
{ mode = 'n', keys = 'z' },
|
||||||
|
},
|
||||||
|
|
||||||
|
clues = {
|
||||||
|
miniclue.gen_clues.g(),
|
||||||
|
miniclue.gen_clues.marks(),
|
||||||
|
miniclue.gen_clues.registers(),
|
||||||
|
miniclue.gen_clues.windows(),
|
||||||
|
miniclue.gen_clues.z(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
-- Add surrounding with sa
|
||||||
|
-- Delete surrounding with sd.
|
||||||
|
-- Replace surrounding with sr.
|
||||||
|
-- Find surrounding with sf or sF (move cursor right or left).
|
||||||
|
-- Highlight surrounding with sh<char>.
|
||||||
|
-- 'f' - function call (string of alphanumeric symbols or '_' or '.' followed by balanced '()'). In "input" finds function call, in "output" prompts user to enter function name.
|
||||||
|
-- 't' - tag. In "input" finds tag with same identifier, in "output" prompts user to enter tag name.
|
||||||
|
-- All symbols in brackets '()', '[]', '{}', '<>".
|
||||||
|
-- '?' - interactive. Prompts user to enter left and right parts.
|
||||||
|
require('mini.surround').setup()
|
||||||
|
|
||||||
|
require('mini.trailspace').setup()
|
||||||
|
vim.api.nvim_create_user_command('Trim', function()
|
||||||
|
require('mini.trailspace').trim()
|
||||||
|
end, {})
|
||||||
|
|
||||||
|
-- prefix \
|
||||||
|
-- `b` - |'background'|.
|
||||||
|
-- `c` - |'cursorline'|.
|
||||||
|
-- `C` - |'cursorcolumn'|.
|
||||||
|
-- `d` - diagnostic (via |vim.diagnostic.enable()| and |vim.diagnostic.disable()|).
|
||||||
|
-- `h` - |'hlsearch'| (or |v:hlsearch| to be precise).
|
||||||
|
-- `i` - |'ignorecase'|.
|
||||||
|
-- `l` - |'list'|.
|
||||||
|
-- `n` - |'number'|.
|
||||||
|
-- `r` - |'relativenumber'|.
|
||||||
|
-- `s` - |'spell'|.
|
||||||
|
-- `w` - |'wrap'|.
|
||||||
|
require('mini.basics').setup {
|
||||||
|
mappings = {
|
||||||
|
windows = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
local map = require('mini.map')
|
||||||
|
map.setup {
|
||||||
|
symbols = {
|
||||||
|
scroll_line = '┃',
|
||||||
|
scroll_view = '',
|
||||||
|
},
|
||||||
|
integrations = {
|
||||||
|
map.gen_integration.builtin_search(),
|
||||||
|
map.gen_integration.diagnostic(),
|
||||||
|
map.gen_integration.gitsigns(),
|
||||||
|
},
|
||||||
|
window = {
|
||||||
|
show_integration_count = false,
|
||||||
|
winblend = 0,
|
||||||
|
width = 5,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
vim.keymap.set('n', '<leader>nm', map.toggle, { noremap = true, desc = 'minimap open' })
|
||||||
|
|
||||||
|
-- gS
|
||||||
|
require('mini.splitjoin').setup {
|
||||||
|
detect = { separator = '[,;\n]' },
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Replace text with register 'gr',
|
||||||
|
-- Sort text 'gs',
|
||||||
|
require('mini.operators').setup()
|
||||||
|
require('mini.jump2d').setup { mappings = { start_jumping = '<leader>S' } }
|
||||||
|
|
||||||
|
local indent = require('mini.indentscope')
|
||||||
|
indent.setup {
|
||||||
|
draw = { delay = 0 },
|
||||||
|
}
|
||||||
|
indent.gen_animation.none()
|
||||||
|
|
||||||
|
require('mini.notify').setup {
|
||||||
|
window = {
|
||||||
|
winblend = 0,
|
||||||
|
config = {
|
||||||
|
anchor = 'SE',
|
||||||
|
border = 'double',
|
||||||
|
row = vim.o.lines,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
220
nvim/lua/plugins/misc.lua
Normal file
220
nvim/lua/plugins/misc.lua
Normal file
|
|
@ -0,0 +1,220 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'danymat/neogen',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>nd', '<cmd>Neogen<CR>', { noremap = true, silent = true, desc = 'Neogen - gen comments' } },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'akinsho/toggleterm.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
opts = {
|
||||||
|
open_mapping = [[<C-\>]],
|
||||||
|
direction = 'float',
|
||||||
|
close_on_exit = true,
|
||||||
|
autochdir = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'jinh0/eyeliner.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
config = function()
|
||||||
|
vim.api.nvim_set_hl(0, 'EyelinerPrimary', { underline = true })
|
||||||
|
vim.api.nvim_set_hl(0, 'EyelinerSecondary', { underline = true })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{ 'OXY2DEV/markview.nvim', event = 'VeryLazy' },
|
||||||
|
{ 'tiagovla/scope.nvim', event = 'VeryLazy' },
|
||||||
|
{
|
||||||
|
'chrisgrieser/nvim-early-retirement',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
opts = { minimumBufferNum = 6 },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'AckslD/nvim-neoclip.lua',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
default_register = '+',
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
require('neoclip').setup(opts)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>fp',
|
||||||
|
'<cmd>Telescope neoclip<CR>',
|
||||||
|
{ noremap = true, silent = true, desc = 'Pick clipboard history' }
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'leath-dub/snipe.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
opts = {
|
||||||
|
ui = {
|
||||||
|
position = 'center',
|
||||||
|
},
|
||||||
|
sort = 'last',
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
local snipe = require('snipe')
|
||||||
|
snipe.setup(opts)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>fb',
|
||||||
|
snipe.open_buffer_menu,
|
||||||
|
{ noremap = true, silent = true, desc = 'Pick buffers (snipe.nvim)' }
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'sindrets/diffview.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
opts = {
|
||||||
|
enhanced_diff_hl = true,
|
||||||
|
default_args = {
|
||||||
|
DiffviewOpen = { '--imply-local' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
vim.keymap.set('n', '<leader>nb', vim.cmd.DiffviewOpen, { noremap = true, desc = 'diffview open' })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'NeogitOrg/neogit',
|
||||||
|
opts = {
|
||||||
|
disable_builtin_notifications = true,
|
||||||
|
integrations = {
|
||||||
|
diffview = true,
|
||||||
|
telescope = true,
|
||||||
|
fzf_lua = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
'<leader>ng',
|
||||||
|
function()
|
||||||
|
require('neogit').open()
|
||||||
|
end,
|
||||||
|
{ noremap = true, silent = true, desc = 'Neogit' },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stevearc/oil.nvim',
|
||||||
|
opts = {
|
||||||
|
watch_for_changes = true,
|
||||||
|
columns = {
|
||||||
|
'permissions',
|
||||||
|
'size',
|
||||||
|
},
|
||||||
|
view_options = {
|
||||||
|
show_hidden = true,
|
||||||
|
},
|
||||||
|
keymaps = {
|
||||||
|
['wq'] = 'actions.close',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
keys = {
|
||||||
|
{
|
||||||
|
'<leader>nc',
|
||||||
|
function()
|
||||||
|
require('oil').toggle_float()
|
||||||
|
end,
|
||||||
|
{ noremap = true, silent = true },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'mbbill/undotree',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
keys = {
|
||||||
|
{ '<leader>nu', '<cmd>UndotreeToggle<cr>' },
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
vim.g.undotree_ShortIndicators = 1
|
||||||
|
vim.g.undotree_SetFocusWhenToggle = 1
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'EdenEast/nightfox.nvim',
|
||||||
|
lazy = false,
|
||||||
|
priority = 10000,
|
||||||
|
opts = {
|
||||||
|
options = {
|
||||||
|
transparent = true,
|
||||||
|
terminal_colors = false,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
config = function(_, opts)
|
||||||
|
require('nightfox').setup(opts)
|
||||||
|
vim.cmd('colorscheme terafox')
|
||||||
|
vim.api.nvim_set_hl(0, 'MiniNotifyNormal', { bg = 'none' })
|
||||||
|
vim.api.nvim_set_hl(0, 'MiniNotifyTitle', { bg = 'none' })
|
||||||
|
vim.api.nvim_set_hl(0, 'MiniNotifyBorder', { bg = 'none' })
|
||||||
|
vim.api.nvim_set_hl(0, 'MiniMapNormal', { bg = 'none' })
|
||||||
|
vim.api.nvim_set_hl(0, 'MiniClueNormal', { bg = 'none' })
|
||||||
|
vim.api.nvim_set_hl(0, 'StatusLine', { bg = 'none' })
|
||||||
|
vim.api.nvim_set_hl(0, 'StatusLineNC', { bg = 'none' })
|
||||||
|
vim.api.nvim_set_hl(0, 'GitSignsAdd', { fg = 'green', bold = true })
|
||||||
|
vim.api.nvim_set_hl(0, 'GitSignsDelete', { fg = 'red', bold = true })
|
||||||
|
vim.api.nvim_set_hl(0, 'GitSignsChange', { fg = 'green', bold = true })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'lewis6991/gitsigns.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
opts = {
|
||||||
|
signcolumn = false,
|
||||||
|
numhl = true,
|
||||||
|
on_attach = function()
|
||||||
|
local gs = package.loaded.gitsigns
|
||||||
|
vim.keymap.set('n', '<leader>gg', gs.preview_hunk, { desc = 'git preview hunk' })
|
||||||
|
vim.keymap.set('n', '<leader>gr', gs.reset_hunk, { desc = 'git reset hunk' })
|
||||||
|
vim.keymap.set('n', '<leader>gb', function()
|
||||||
|
gs.blame_line { full = true }
|
||||||
|
end, { desc = 'git blame_line' })
|
||||||
|
vim.keymap.set('v', '<leader>gr', function()
|
||||||
|
gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') }
|
||||||
|
end, { desc = 'git reset hunk' })
|
||||||
|
|
||||||
|
-- Navigation
|
||||||
|
vim.keymap.set('n', ']g', function()
|
||||||
|
if vim.wo.diff then
|
||||||
|
return ']c'
|
||||||
|
end
|
||||||
|
vim.schedule(function()
|
||||||
|
gs.next_hunk()
|
||||||
|
end)
|
||||||
|
return '<Ignore>'
|
||||||
|
end, { expr = true })
|
||||||
|
|
||||||
|
vim.keymap.set('n', '[g', function()
|
||||||
|
if vim.wo.diff then
|
||||||
|
return '[c'
|
||||||
|
end
|
||||||
|
vim.schedule(function()
|
||||||
|
gs.prev_hunk()
|
||||||
|
end)
|
||||||
|
return '<Ignore>'
|
||||||
|
end, { expr = true })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'hedyhli/outline.nvim',
|
||||||
|
cmd = { 'Outline', 'OutlineOpen' },
|
||||||
|
keys = {
|
||||||
|
{ '<leader>no', '<cmd>Outline<CR>', desc = 'Toggle outline' },
|
||||||
|
},
|
||||||
|
opts = {
|
||||||
|
outline_window = {
|
||||||
|
position = 'left',
|
||||||
|
width = 30,
|
||||||
|
auto_close = true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
95
nvim/lua/plugins/telescope.lua
Normal file
95
nvim/lua/plugins/telescope.lua
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'nvim-telescope/telescope-fzf-native.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
build = 'make',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'nvim-telescope/telescope.nvim',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-lua/plenary.nvim',
|
||||||
|
'nvim-telescope/telescope-fzf-native.nvim',
|
||||||
|
'nvim-tree/nvim-web-devicons',
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
'tiagovla/scope.nvim',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
local telescope = require('telescope')
|
||||||
|
local actions = require('telescope.actions')
|
||||||
|
telescope.setup {
|
||||||
|
defaults = {
|
||||||
|
layout_strategy = 'vertical',
|
||||||
|
layout_config = { width = 0.90 },
|
||||||
|
prompt_title = false,
|
||||||
|
results_title = false,
|
||||||
|
preview_title = false,
|
||||||
|
vimgrep_arguments = {
|
||||||
|
'rg',
|
||||||
|
'-L',
|
||||||
|
'--color=never',
|
||||||
|
'--no-heading',
|
||||||
|
'--hidden',
|
||||||
|
'--with-filename',
|
||||||
|
'--line-number',
|
||||||
|
'--column',
|
||||||
|
'--smart-case',
|
||||||
|
},
|
||||||
|
preview = { treesitter = true },
|
||||||
|
path_display = { 'truncate' },
|
||||||
|
mappings = {
|
||||||
|
i = {
|
||||||
|
['wq'] = actions.close,
|
||||||
|
['<Esc>'] = actions.close,
|
||||||
|
['<C-k>'] = actions.move_selection_previous,
|
||||||
|
['<C-j>'] = actions.move_selection_next,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
telescope.load_extension('fzf')
|
||||||
|
telescope.load_extension('scope')
|
||||||
|
|
||||||
|
local b = require('telescope.builtin')
|
||||||
|
-- Fall back to find_files if not in a git repo
|
||||||
|
local project_files = function()
|
||||||
|
local opts = {} -- define here if you want to define something
|
||||||
|
local ok = pcall(b.git_files, opts)
|
||||||
|
if not ok then
|
||||||
|
b.find_files(opts)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.keymap.set('n', '<leader>ff', project_files, { noremap = true, silent = true, desc = 'Fuzzy find git files' })
|
||||||
|
vim.keymap.set('n', '<leader>fg', b.find_files, { noremap = true, silent = true, desc = 'Fuzzy find files' })
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>fc',
|
||||||
|
b.command_history,
|
||||||
|
{ noremap = true, silent = true, desc = 'Fuzzy find command_history' }
|
||||||
|
)
|
||||||
|
vim.keymap.set('n', '<leader>fa', b.live_grep, { noremap = true, silent = true, desc = 'Fuzzy find grep' })
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>f8',
|
||||||
|
b.grep_string,
|
||||||
|
{ noremap = true, silent = true, desc = 'Fuzzy find grep current word' }
|
||||||
|
)
|
||||||
|
vim.keymap.set('n', '<leader>fq', b.quickfix, { noremap = true, silent = true, desc = 'Fuzzy find quickfix' })
|
||||||
|
vim.keymap.set('n', '<leader>f?', b.builtin, { noremap = true, silent = true, desc = 'See all pickers' })
|
||||||
|
vim.keymap.set('n', '<leader>f<BS>', b.resume, { noremap = true, silent = true, desc = 'Fuzzy find resume' })
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader>fs',
|
||||||
|
b.lsp_document_symbols,
|
||||||
|
{ noremap = true, silent = true, desc = 'Fuzzy find treesitter objects' }
|
||||||
|
)
|
||||||
|
vim.keymap.set(
|
||||||
|
'n',
|
||||||
|
'<leader><leader>',
|
||||||
|
'<cmd>Telescope scope buffers<cr>',
|
||||||
|
{ noremap = true, silent = true, desc = 'Pick buffers (scope.nvim)' }
|
||||||
|
)
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
77
nvim/lua/plugins/treesitter.lua
Normal file
77
nvim/lua/plugins/treesitter.lua
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
return {
|
||||||
|
{
|
||||||
|
'nvim-treesitter/nvim-treesitter',
|
||||||
|
event = 'VeryLazy',
|
||||||
|
dependencies = {
|
||||||
|
'nvim-treesitter/nvim-treesitter-context',
|
||||||
|
'nvim-treesitter/nvim-treesitter-textobjects',
|
||||||
|
},
|
||||||
|
config = function()
|
||||||
|
require('nvim-treesitter.configs').setup {
|
||||||
|
ensure_installed = {},
|
||||||
|
highlight = {
|
||||||
|
enable = true,
|
||||||
|
disable = function(_, buf)
|
||||||
|
local max_filesize = 100 * 1024 -- 100 KiB
|
||||||
|
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
|
||||||
|
if ok and stats and stats.size > max_filesize then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
end,
|
||||||
|
additional_vim_regex_highlighting = false,
|
||||||
|
},
|
||||||
|
indent = {
|
||||||
|
enable = true,
|
||||||
|
},
|
||||||
|
autopairs = {
|
||||||
|
enable = true,
|
||||||
|
},
|
||||||
|
textobjects = {
|
||||||
|
select = {
|
||||||
|
enable = true,
|
||||||
|
lookahead = true,
|
||||||
|
keymaps = {
|
||||||
|
['af'] = '@function.outer',
|
||||||
|
['if'] = '@function.inner',
|
||||||
|
['aa'] = '@statement.outer',
|
||||||
|
['ia'] = '@parameter.inner',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
move = {
|
||||||
|
enable = true,
|
||||||
|
goto_next_start = {
|
||||||
|
[']a'] = '@parameter.inner',
|
||||||
|
[']f'] = '@function.outer',
|
||||||
|
},
|
||||||
|
goto_previous_start = {
|
||||||
|
['[a'] = '@parameter.inner',
|
||||||
|
['[f'] = '@function.outer',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
swap = {
|
||||||
|
enable = true,
|
||||||
|
swap_next = {
|
||||||
|
['s]'] = '@parameter.inner',
|
||||||
|
},
|
||||||
|
swap_previous = {
|
||||||
|
['s['] = '@parameter.inner',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
incremental_selection = {
|
||||||
|
enable = true,
|
||||||
|
keymaps = {
|
||||||
|
init_selection = '<CR>',
|
||||||
|
node_incremental = '<TAB>',
|
||||||
|
node_decremental = '<S-TAB>',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
require('treesitter-context').setup {
|
||||||
|
max_lines = 2,
|
||||||
|
min_window_height = 50,
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
@ -1,16 +0,0 @@
|
||||||
if vim.g.did_load_aerial_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_aerial_plugin = true
|
|
||||||
|
|
||||||
require('aerial').setup {
|
|
||||||
autojump = true,
|
|
||||||
on_attach = function(bufnr)
|
|
||||||
vim.keymap.set('n', '[[', '<cmd>AerialPrev<CR>', { buffer = bufnr })
|
|
||||||
vim.keymap.set('n', ']]', '<cmd>AerialNext<CR>', { buffer = bufnr })
|
|
||||||
end,
|
|
||||||
close_autonatic_events = {
|
|
||||||
unfocus,
|
|
||||||
switch_buffer,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
||||||
if vim.g.did_load_colors_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_colors_plugin = true
|
|
||||||
|
|
||||||
require('nightfox').setup {
|
|
||||||
options = {
|
|
||||||
transparent = true, -- Disable setting background
|
|
||||||
terminal_colors = false, -- Set terminal colors (vim.g.terminal_color_*) used in `:terminal`
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,47 +0,0 @@
|
||||||
if vim.g.did_load_completion_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_completion_plugin = true
|
|
||||||
local cmp = require('cmp')
|
|
||||||
|
|
||||||
cmp.setup {
|
|
||||||
snippet = {
|
|
||||||
expand = function(args)
|
|
||||||
require('luasnip').lsp_expand(args.body)
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
experimental = {
|
|
||||||
native_menu = false,
|
|
||||||
ghost_text = true,
|
|
||||||
},
|
|
||||||
mapping = cmp.mapping.preset.insert {
|
|
||||||
['<C-j>'] = cmp.mapping.scroll_docs(-4),
|
|
||||||
['<C-k>'] = cmp.mapping.scroll_docs(4),
|
|
||||||
['<C-Space>'] = cmp.mapping.complete(),
|
|
||||||
['<esc>'] = cmp.mapping.abort(),
|
|
||||||
['<C-Space>'] = cmp.mapping.confirm { select = true }, -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
|
||||||
},
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = 'nvim_lsp' },
|
|
||||||
{ name = 'luasnip' },
|
|
||||||
}, {
|
|
||||||
{ name = 'buffer' },
|
|
||||||
}),
|
|
||||||
}
|
|
||||||
|
|
||||||
cmp.setup.cmdline({ '/', '?' }, {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = {
|
|
||||||
{ name = 'buffer' },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
cmp.setup.cmdline(':', {
|
|
||||||
mapping = cmp.mapping.preset.cmdline(),
|
|
||||||
sources = cmp.config.sources({
|
|
||||||
{ name = 'path' },
|
|
||||||
}, {
|
|
||||||
{ name = 'cmdline' },
|
|
||||||
}),
|
|
||||||
matching = { disallow_symbol_nonprefix_matching = false },
|
|
||||||
})
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
||||||
if vim.g.did_load_gitsigns_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_gitsigns_plugin = true
|
|
||||||
|
|
||||||
require('gitsigns').setup {
|
|
||||||
signcolumn = false,
|
|
||||||
numhl = true,
|
|
||||||
on_attach = function()
|
|
||||||
local gs = package.loaded.gitsigns
|
|
||||||
vim.keymap.set('n', '<leader>gg', gs.preview_hunk, { desc = 'git preview hunk' })
|
|
||||||
vim.keymap.set('n', '<leader>gb', function()
|
|
||||||
gs.blame_line { full = true }
|
|
||||||
end, { desc = 'git blame_line' })
|
|
||||||
vim.keymap.set('n', '<leader>gr', gs.reset_hunk, { desc = 'git reset hunk' })
|
|
||||||
vim.keymap.set('v', '<leader>gr', function()
|
|
||||||
gs.reset_hunk { vim.fn.line('.'), vim.fn.line('v') }
|
|
||||||
end, { desc = 'git reset hunk' })
|
|
||||||
-- Navigation
|
|
||||||
vim.keymap.set('n', ']g', function()
|
|
||||||
if vim.wo.diff then
|
|
||||||
return ']c'
|
|
||||||
end
|
|
||||||
vim.schedule(function()
|
|
||||||
gs.next_hunk()
|
|
||||||
end)
|
|
||||||
return '<Ignore>'
|
|
||||||
end, { expr = true })
|
|
||||||
|
|
||||||
vim.keymap.set('n', '[g', function()
|
|
||||||
if vim.wo.diff then
|
|
||||||
return '[c'
|
|
||||||
end
|
|
||||||
vim.schedule(function()
|
|
||||||
gs.prev_hunk()
|
|
||||||
end)
|
|
||||||
return '<Ignore>'
|
|
||||||
end, { expr = true })
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
vim.keymap.set('n', 'tt', vim.cmd.tabnext, { silent = true })
|
|
||||||
vim.keymap.set('n', 'tr', vim.cmd.tabprev, { silent = true })
|
|
||||||
vim.keymap.set('n', 'gt', vim.cmd.bnext, { silent = true })
|
|
||||||
vim.keymap.set('n', 'gr', vim.cmd.bprev, { noremap = true, silent = true })
|
|
||||||
vim.keymap.set('n', 'gq', vim.cmd.bdelete, { silent = true })
|
|
||||||
vim.keymap.set('n', 'n', 'nzz', { noremap = true, silent = true })
|
|
||||||
vim.keymap.set('n', 'N', 'Nzz', { noremap = true, silent = true })
|
|
||||||
vim.keymap.set('n', '<C-d>', '<C-d>zz')
|
|
||||||
vim.keymap.set('n', '<C-u>', '<C-u>zz')
|
|
||||||
vim.keymap.set('n', '<C-f>', '<C-f>zz')
|
|
||||||
vim.keymap.set('n', '<C-b>', '<C-b>zz')
|
|
||||||
vim.keymap.set({ 'v', 'i' }, 'wq', '<esc>l', { noremap = true, silent = true })
|
|
||||||
vim.keymap.set('n', '<leader>x', '"rd', { remap = true, silent = true })
|
|
||||||
|
|
@ -1,138 +0,0 @@
|
||||||
if vim.g.did_load_lsp_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_lsp_plugin = true
|
|
||||||
|
|
||||||
-- Setup language servers.
|
|
||||||
local lspconfig = require('lspconfig')
|
|
||||||
local capabilities = require('cmp_nvim_lsp').default_capabilities()
|
|
||||||
|
|
||||||
lspconfig.gopls.setup {
|
|
||||||
settings = {
|
|
||||||
gopls = {
|
|
||||||
gofumpt = true,
|
|
||||||
codelenses = {
|
|
||||||
gc_details = true,
|
|
||||||
test = true,
|
|
||||||
},
|
|
||||||
analyses = {
|
|
||||||
unusedvariable = true,
|
|
||||||
shadow = true,
|
|
||||||
},
|
|
||||||
hints = {
|
|
||||||
assignVariableTypes = true,
|
|
||||||
constantValues = true,
|
|
||||||
functionTypeParameters = true,
|
|
||||||
rangeVariableTypes = true,
|
|
||||||
},
|
|
||||||
usePlaceholders = true,
|
|
||||||
staticcheck = true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
capabilities = capabilities,
|
|
||||||
on_attach = function(_, bufnr)
|
|
||||||
capabilities = capabilities
|
|
||||||
vim.api.nvim_command('au BufWritePre <buffer> lua vim.lsp.buf.format { async = false }')
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
lspconfig.jedi_language_server.setup { capabilities = capabilities }
|
|
||||||
lspconfig.nil_ls.setup { capabilities = capabilities }
|
|
||||||
lspconfig.phpactor.setup { capabilities = capabilities }
|
|
||||||
|
|
||||||
vim.keymap.set('n', '[d', vim.diagnostic.goto_prev, { desc = 'Prev diagnostic' })
|
|
||||||
vim.keymap.set('n', ']d', vim.diagnostic.goto_next, { desc = 'Next diagnostic' })
|
|
||||||
|
|
||||||
vim.diagnostic.config {
|
|
||||||
virtual_text = true,
|
|
||||||
underline = true,
|
|
||||||
update_in_insert = false,
|
|
||||||
}
|
|
||||||
-- Use LspAttach autocommand to only map the following keys
|
|
||||||
-- after the language server attaches to the current buffer
|
|
||||||
vim.api.nvim_create_autocmd('LspAttach', {
|
|
||||||
group = vim.api.nvim_create_augroup('UserLspConfig', {}),
|
|
||||||
callback = function(ev)
|
|
||||||
local bufnr = ev.buf
|
|
||||||
local client = vim.lsp.get_client_by_id(ev.data.client_id)
|
|
||||||
-- Buffer local mappings.
|
|
||||||
-- See `:help vim.lsp.*` for documentation on any of the below functions
|
|
||||||
vim.keymap.set('n', 'K', vim.lsp.buf.hover, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hover' })
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>rn',
|
|
||||||
vim.lsp.buf.rename,
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP Rename' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
{ 'n', 'v' },
|
|
||||||
'<leader>da',
|
|
||||||
vim.lsp.buf.code_action,
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP code action' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>dd',
|
|
||||||
'<cmd>Telescope lsp_definitions<cr>',
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP definitions' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>di',
|
|
||||||
'<cmd>Telescope lsp_implementations<cr>',
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP implementations' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>dr',
|
|
||||||
'<cmd>Telescope lsp_references<cr>',
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP references' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>dt',
|
|
||||||
'<cmd>Telescope lsp_type_definitions<cr>',
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP type defs' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>ds',
|
|
||||||
'<cmd>Telescope lsp_document_symbols<cr>',
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP symbols' }
|
|
||||||
)
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>dl',
|
|
||||||
vim.lsp.codelens.run,
|
|
||||||
{ buffer = ev.buf, noremap = true, silent = true, desc = 'LSP codelens' }
|
|
||||||
)
|
|
||||||
vim.keymap.set('n', '<leader>dh', function()
|
|
||||||
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
|
|
||||||
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP hints toggle' })
|
|
||||||
vim.keymap.set('n', '<space>df', function()
|
|
||||||
vim.lsp.buf.format { async = true }
|
|
||||||
end, { buffer = ev.buf, noremap = true, silent = true, desc = 'LSP format' })
|
|
||||||
-- Auto-refresh code lenses
|
|
||||||
if not client then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
local group = vim.api.nvim_create_augroup(string.format('lsp-%s-%s', bufnr, client.id), {})
|
|
||||||
if client.server_capabilities.codeLensProvider then
|
|
||||||
vim.api.nvim_create_autocmd({ 'InsertLeave', 'BufWritePost', 'TextChanged' }, {
|
|
||||||
group = group,
|
|
||||||
callback = function()
|
|
||||||
vim.lsp.codelens.refresh { bufnr = bufnr }
|
|
||||||
end,
|
|
||||||
buffer = bufnr,
|
|
||||||
})
|
|
||||||
vim.lsp.codelens.refresh { bufnr = bufnr }
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
local none = require('null-ls')
|
|
||||||
none.setup {
|
|
||||||
sources = {
|
|
||||||
none.builtins.diagnostics.puppet_lint,
|
|
||||||
none.builtins.diagnostics.yamllint,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
if vim.g.did_load_lualine_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_lualine_plugin = true
|
|
||||||
|
|
||||||
vim.schedule(function()
|
|
||||||
require('lualine').setup {
|
|
||||||
globalstatus = true,
|
|
||||||
extensions = { 'oil', 'trouble', 'aerial', 'fzf', 'toggleterm', 'quickfix' },
|
|
||||||
sections = {
|
|
||||||
lualine_x = { 'filetype' },
|
|
||||||
},
|
|
||||||
tabline = {
|
|
||||||
lualine_a = { 'buffers' },
|
|
||||||
lualine_z = { 'tabs' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
end)
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
if vim.g.did_load_luasnip_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_luasnip_plugin = true
|
|
||||||
|
|
||||||
local ls = require('luasnip')
|
|
||||||
ls.config.set_config {
|
|
||||||
history = true,
|
|
||||||
updateevents = 'TextChanged, TextChangedI',
|
|
||||||
}
|
|
||||||
require('luasnip.loaders.from_vscode').lazy_load()
|
|
||||||
|
|
||||||
vim.keymap.set({ 'i', 's' }, '<C-K>', function()
|
|
||||||
if ls.expand_or_jumpable() then
|
|
||||||
ls.expand_or_jump()
|
|
||||||
end
|
|
||||||
end, { silent = true })
|
|
||||||
|
|
||||||
vim.keymap.set({ 'i', 's' }, '<C-J>', function()
|
|
||||||
if ls.jumpable(-1) then
|
|
||||||
ls.jump(-1)
|
|
||||||
end
|
|
||||||
end, { silent = true })
|
|
||||||
|
|
||||||
vim.keymap.set({ 'i', 's' }, '<C-L>', function()
|
|
||||||
if ls.choice_active() then
|
|
||||||
ls.change_choice(1)
|
|
||||||
end
|
|
||||||
end, { silent = true })
|
|
||||||
|
|
||||||
--------------------
|
|
||||||
-- Snippets --
|
|
||||||
--------------------
|
|
||||||
local fmta = require('luasnip.extras.fmt').fmta
|
|
||||||
ls.add_snippets('go', {
|
|
||||||
ls.snippet('ie', fmta('if err != nil {\n\treturn <err>\n}', { err = ls.insert_node(1, 'err') })),
|
|
||||||
})
|
|
||||||
|
|
@ -1,67 +0,0 @@
|
||||||
if vim.g.did_load_mini_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_mini_plugin = true
|
|
||||||
|
|
||||||
-- din( dina
|
|
||||||
require('mini.ai').setup()
|
|
||||||
-- gc gcc
|
|
||||||
require('mini.comment').setup()
|
|
||||||
|
|
||||||
-- Add surrounding with sa
|
|
||||||
-- Delete surrounding with sd.
|
|
||||||
-- Replace surrounding with sr.
|
|
||||||
-- Find surrounding with sf or sF (move cursor right or left).
|
|
||||||
-- Highlight surrounding with sh<char>.
|
|
||||||
-- 'f' - function call (string of alphanumeric symbols or '_' or '.' followed by balanced '()'). In "input" finds function call, in "output" prompts user to enter function name.
|
|
||||||
-- 't' - tag. In "input" finds tag with same identifier, in "output" prompts user to enter tag name.
|
|
||||||
-- All symbols in brackets '()', '[]', '{}', '<>".
|
|
||||||
-- '?' - interactive. Prompts user to enter left and right parts.
|
|
||||||
require('mini.surround').setup()
|
|
||||||
|
|
||||||
-- :Trim
|
|
||||||
require('mini.trailspace').setup()
|
|
||||||
vim.api.nvim_create_user_command('Trim', function()
|
|
||||||
require('mini.trailspace').trim()
|
|
||||||
end, {})
|
|
||||||
|
|
||||||
-- prefix \
|
|
||||||
-- `b` - |'background'|.
|
|
||||||
-- `c` - |'cursorline'|.
|
|
||||||
-- `C` - |'cursorcolumn'|.
|
|
||||||
-- `d` - diagnostic (via |vim.diagnostic.enable()| and |vim.diagnostic.disable()|).
|
|
||||||
-- `h` - |'hlsearch'| (or |v:hlsearch| to be precise).
|
|
||||||
-- `i` - |'ignorecase'|.
|
|
||||||
-- `l` - |'list'|.
|
|
||||||
-- `n` - |'number'|.
|
|
||||||
-- `r` - |'relativenumber'|.
|
|
||||||
-- `s` - |'spell'|.
|
|
||||||
-- `w` - |'wrap'|.
|
|
||||||
require('mini.basics').setup {
|
|
||||||
mappings = {
|
|
||||||
windows = true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
-- gS
|
|
||||||
require('mini.splitjoin').setup {
|
|
||||||
detect = {
|
|
||||||
separator = '[,;\n]',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
require('mini.pairs').setup()
|
|
||||||
vim.cmd([[ hi MiniCursorwordCurrent ctermfg=240 ]])
|
|
||||||
|
|
||||||
require('mini.jump2d').setup {
|
|
||||||
mappings = { start_jumping = '<leader>S' },
|
|
||||||
}
|
|
||||||
|
|
||||||
indent = require('mini.indentscope')
|
|
||||||
indent.setup {
|
|
||||||
options = { try_as_border = false },
|
|
||||||
draw = { delay = 0 },
|
|
||||||
}
|
|
||||||
indent.gen_animation.none()
|
|
||||||
|
|
||||||
require('mini.icons').setup()
|
|
||||||
|
|
@ -1,45 +0,0 @@
|
||||||
if vim.g.did_load_plugins_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_plugins_plugin = true
|
|
||||||
|
|
||||||
-- many plugins annoyingly require a call to a 'setup' function to be loaded,
|
|
||||||
-- even with default configs
|
|
||||||
|
|
||||||
require('neogen').setup {}
|
|
||||||
vim.keymap.set('n', '<leader>nd', '<cmd>Neogen<CR>', { noremap = true, silent = true, desc = 'Neogen - gen comments' })
|
|
||||||
|
|
||||||
require('toggleterm').setup {
|
|
||||||
open_mapping = [[<C-\>]],
|
|
||||||
direction = 'float',
|
|
||||||
close_on_exit = true,
|
|
||||||
autochdir = true,
|
|
||||||
}
|
|
||||||
|
|
||||||
require('which-key').setup {
|
|
||||||
preset = 'helix',
|
|
||||||
}
|
|
||||||
require('trouble').setup {}
|
|
||||||
require('eyeliner').setup {}
|
|
||||||
require('markview').setup()
|
|
||||||
require('scope').setup {}
|
|
||||||
require('neoclip').setup { default_register = '+' }
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>fp',
|
|
||||||
'<cmd>Telescope neoclip<CR>',
|
|
||||||
{ noremap = true, silent = true, desc = 'Pick clipboard history' }
|
|
||||||
)
|
|
||||||
local snipe = require('snipe')
|
|
||||||
snipe.setup {
|
|
||||||
ui = {
|
|
||||||
position = 'center',
|
|
||||||
},
|
|
||||||
sort = 'last',
|
|
||||||
}
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader><leader>',
|
|
||||||
snipe.open_buffer_menu,
|
|
||||||
{ noremap = true, silent = true, desc = 'Pick buffers (snipe.nvim)' }
|
|
||||||
)
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
if vim.g.did_load_neogit_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_neogit_plugin = true
|
|
||||||
require('diffview').setup {
|
|
||||||
enhanced_diff_hl = true,
|
|
||||||
default_args = {
|
|
||||||
DiffviewOpen = { '--imply-local' },
|
|
||||||
},
|
|
||||||
}
|
|
||||||
local neogit = require('neogit')
|
|
||||||
neogit.setup {
|
|
||||||
disable_builtin_notifications = true,
|
|
||||||
integrations = {
|
|
||||||
diffview = true,
|
|
||||||
telescope = true,
|
|
||||||
fzf_lua = true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
vim.keymap.set('n', '<leader>ng', neogit.open, { noremap = true, silent = true, desc = 'Neogit' })
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
||||||
if vim.g.did_load_oil_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_oil_plugin = true
|
|
||||||
|
|
||||||
local oil = require('oil')
|
|
||||||
oil.setup {
|
|
||||||
watch_for_changes = true,
|
|
||||||
columns = {
|
|
||||||
'permissions',
|
|
||||||
'size',
|
|
||||||
},
|
|
||||||
view_options = {
|
|
||||||
show_hidden = true,
|
|
||||||
},
|
|
||||||
keymaps = {
|
|
||||||
['wq'] = 'actions.close',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
vim.keymap.set('n', '<leader>c', oil.toggle_float, { noremap = true, silent = true })
|
|
||||||
vim.keymap.set('n', '<leader>u', '<cmd>UndotreeToggle<cr>')
|
|
||||||
vim.g.undotree_ShortIndicators = 1
|
|
||||||
vim.g.undotree_SetFocusWhenToggle = 1
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
if vim.g.did_load_telescope_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_telescope_plugin = true
|
|
||||||
|
|
||||||
local telescope = require('telescope.builtin')
|
|
||||||
|
|
||||||
-- Fall back to find_files if not in a git repo
|
|
||||||
local project_files = function()
|
|
||||||
local opts = {} -- define here if you want to define something
|
|
||||||
local ok = pcall(telescope.git_files, opts)
|
|
||||||
if not ok then
|
|
||||||
telescope.find_files(opts)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
vim.keymap.set('n', '<leader>ff', project_files, { noremap = true, silent = true, desc = 'Fuzzy find git files' })
|
|
||||||
vim.keymap.set('n', '<leader>fg', telescope.find_files, { noremap = true, silent = true, desc = 'Fuzzy find files' })
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>fc',
|
|
||||||
telescope.command_history,
|
|
||||||
{ noremap = true, silent = true, desc = 'Fuzzy find command_history' }
|
|
||||||
)
|
|
||||||
vim.keymap.set('n', '<leader>fa', telescope.live_grep, { noremap = true, silent = true, desc = 'Fuzzy find grep' })
|
|
||||||
vim.keymap.set(
|
|
||||||
'n',
|
|
||||||
'<leader>f8',
|
|
||||||
telescope.grep_string,
|
|
||||||
{ noremap = true, silent = true, desc = 'Fuzzy find grep current word' }
|
|
||||||
)
|
|
||||||
vim.keymap.set('n', '<leader>fq', telescope.quickfix, { noremap = true, silent = true, desc = 'Fuzzy find quickfix' })
|
|
||||||
vim.keymap.set('n', '<leader>f<BS>', telescope.resume, { noremap = true, silent = true, desc = 'Fuzzy find resume' })
|
|
||||||
|
|
||||||
local telescope = require('telescope')
|
|
||||||
telescope.setup {
|
|
||||||
defaults = {
|
|
||||||
layout_strategy = 'vertical',
|
|
||||||
layout_config = { width = 0.90 },
|
|
||||||
prompt_title = false,
|
|
||||||
results_title = false,
|
|
||||||
preview_title = false,
|
|
||||||
vimgrep_arguments = {
|
|
||||||
'rg',
|
|
||||||
'-L',
|
|
||||||
'--color=never',
|
|
||||||
'--no-heading',
|
|
||||||
'--hidden',
|
|
||||||
'--with-filename',
|
|
||||||
'--line-number',
|
|
||||||
'--column',
|
|
||||||
'--smart-case',
|
|
||||||
},
|
|
||||||
preview = {
|
|
||||||
treesitter = true,
|
|
||||||
},
|
|
||||||
path_display = {
|
|
||||||
'truncate',
|
|
||||||
},
|
|
||||||
mappings = {
|
|
||||||
i = {
|
|
||||||
['wq'] = require('telescope.actions').close,
|
|
||||||
['<Esc>'] = require('telescope.actions').close,
|
|
||||||
['<C-k>'] = require('telescope.actions').move_selection_previous,
|
|
||||||
['<C-j>'] = require('telescope.actions').move_selection_next,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
telescope.load_extension('fzf')
|
|
||||||
|
|
@ -1,65 +0,0 @@
|
||||||
if vim.g.did_load_treesitter_plugin then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
vim.g.did_load_treesitter_plugin = true
|
|
||||||
|
|
||||||
require('nvim-treesitter.configs').setup {
|
|
||||||
ensure_installed = {},
|
|
||||||
highlight = {
|
|
||||||
enable = true,
|
|
||||||
disable = function(_, buf)
|
|
||||||
local max_filesize = 100 * 1024 -- 100 KiB
|
|
||||||
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
|
|
||||||
if ok and stats and stats.size > max_filesize then
|
|
||||||
return true
|
|
||||||
end
|
|
||||||
end,
|
|
||||||
},
|
|
||||||
indent = {
|
|
||||||
enable = true,
|
|
||||||
},
|
|
||||||
textobjects = {
|
|
||||||
select = {
|
|
||||||
enable = true,
|
|
||||||
lookahead = true,
|
|
||||||
keymaps = {
|
|
||||||
['af'] = '@function.outer',
|
|
||||||
['if'] = '@function.inner',
|
|
||||||
['aa'] = '@statement.outer',
|
|
||||||
['ia'] = '@parameter.inner',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
move = {
|
|
||||||
enable = true,
|
|
||||||
set_jumps = true, -- whether to set jumps in the jumplist
|
|
||||||
goto_next_start = {
|
|
||||||
[']a'] = '@parameter.inner',
|
|
||||||
},
|
|
||||||
goto_previous_start = {
|
|
||||||
['[a'] = '@parameter.inner',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
swap = {
|
|
||||||
enable = true,
|
|
||||||
swap_next = {
|
|
||||||
['s]'] = '@parameter.inner',
|
|
||||||
},
|
|
||||||
swap_previous = {
|
|
||||||
['s['] = '@parameter.inner',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
incremental_selection = {
|
|
||||||
enable = true,
|
|
||||||
keymaps = {
|
|
||||||
init_selection = '<CR>',
|
|
||||||
node_incremental = '<TAB>',
|
|
||||||
node_decremental = '<S-TAB>',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
require('treesitter-context').setup {
|
|
||||||
max_lines = 2,
|
|
||||||
min_window_height = 50,
|
|
||||||
}
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
||||||
require('which-key').setup {
|
|
||||||
preset = 'helix',
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue