diff --git a/modules/home-manager/cli/neovim/default.nix b/modules/home-manager/cli/neovim/default.nix index c62c384..9d928b1 100644 --- a/modules/home-manager/cli/neovim/default.nix +++ b/modules/home-manager/cli/neovim/default.nix @@ -65,7 +65,7 @@ in python3Packages.python-lsp-server shellcheck - terraform-lsp + tofu-ls tflint vscode-langservers-extracted yaml-language-server @@ -120,7 +120,7 @@ in { plugin = gitsigns-nvim; type = "lua"; - config = (builtins.readFile ./files/plugins/luasnip.lua); + config = (builtins.readFile ./files/plugins/gitsign.lua); } { plugin = indent-blankline-nvim; diff --git a/modules/home-manager/cli/neovim/files/keybindings.lua b/modules/home-manager/cli/neovim/files/keybindings.lua index aeaabe3..b0d8b13 100644 --- a/modules/home-manager/cli/neovim/files/keybindings.lua +++ b/modules/home-manager/cli/neovim/files/keybindings.lua @@ -1,6 +1,15 @@ +local opts = { noremap = true, silent = true} + +vim.api.nvim_set_keymap('n', '/', ':nohlsearch', opts) +vim.api.nvim_set_keymap('n', 'l', ':set list!', {silent = true}) + -- clear search vim.keymap.set('n', 'l', ':nohlsearch', { desc = 'Clear search', remap = true, silent = true }) +-- Move tabs with \[ and \] +vim.api.nvim_set_keymap('n', ']', ':tabnext', opts) +vim.api.nvim_set_keymap('n', '[', ':tabprev', opts) + -- Switch between windows. vim.keymap.set('n', '', 'h', { desc = 'Move to the left window', remap = true }) vim.keymap.set('n', '', 'j', { desc = 'Move to the bottom window', remap = true }) @@ -19,31 +28,3 @@ vim.keymap.set('n', 'tn', ':tabnew', { desc = "Tab [n]ew", remap = t -- Show all caracters vim.keymap.set('n', 'l', ':set list!', { desc = "Show a[l]l caraters", remap = true, silent = true}) - --- neotree --- ------- -vim.keymap.set('n', 'nc', ':Neotree close', {desc='Neotree [c]lose'}) -vim.keymap.set('n', 'nf', ':Neotree focus filesystem', {desc='Neotree [f]ocus'}) -vim.keymap.set('n', 'nb', ':Neotree focus buffers', {desc='Neotree Nvim [b]uffers'}) -vim.keymap.set('n', 'ng', ':Neotree focus git_status', {desc='Neotree [g]it status'}) - --- fzf-lua --- ------ -vim.keymap.set('n', 'fb', function() require('fzf-lua').buffers() end, {desc='open [b]uffers'}) -vim.keymap.set('n', 'ff', function() require('fzf-lua').files() end, {desc='[r]esume last command'}) -vim.keymap.set('n', 'fr', function() require('fzf-lua').files() end, {desc='[f]iles'}) - --- git related keymaps -vim.keymap.set('n', 'fgb', function() require('fzf-lua').git_branches() end, {desc='Git [b]ranches'}) -vim.keymap.set('n', 'fgc', function() require('fzf-lua').git_commits() end, {desc='Git [c]ommits'}) -vim.keymap.set('n', 'fgC', function() require('fzf-lua').git_bcommits() end, {desc='Git current buffer [C]ommits'}) -vim.keymap.set('n', 'fgf', function() require('fzf-lua').git_files() end, {desc='Git [f]iles'}) -vim.keymap.set('n', 'fgs', function() require('fzf-lua').git_stash() end, {desc='Git [s]tash'}) -vim.keymap.set('n', 'fgS', function() require('fzf-lua').git_status() end, {desc='Git [S]tash'}) - --- grep related keymaps -vim.keymap.set('n', 'fGb', function() require('fzf-lua').grep_curbuf() end, {desc='grep in current [b]uffer'}) -vim.keymap.set('n', 'fGc', function() require('fzf-lua').grep_cword() end, {desc='grep word under the [c]ursor'}) -vim.keymap.set('n', 'fGg', function() require('fzf-lua').grep() end, {desc='[g]rep'}) -vim.keymap.set('n', 'fGl', function() require('fzf-lua').live_grep() end, {desc='[l]ive grep'}) -vim.keymap.set('n', 'fGr', function() require('fzf-lua').grep_last() end, {desc='[r]erun last grep'}) diff --git a/modules/home-manager/cli/neovim/files/lsp/terraformls.lua b/modules/home-manager/cli/neovim/files/lsp/tofuls.lua similarity index 73% rename from modules/home-manager/cli/neovim/files/lsp/terraformls.lua rename to modules/home-manager/cli/neovim/files/lsp/tofuls.lua index 4a875c3..8eba7d0 100644 --- a/modules/home-manager/cli/neovim/files/lsp/terraformls.lua +++ b/modules/home-manager/cli/neovim/files/lsp/tofuls.lua @@ -1,5 +1,5 @@ return { - cmd = { 'terraform-ls', 'serve' }, + cmd = { 'tofu-ls', 'serve' }, filetypes = { 'terraform', 'terraform-vars' }, root_markers = { '.terraform', '.git' }, } diff --git a/modules/home-manager/cli/neovim/files/options.lua b/modules/home-manager/cli/neovim/files/options.lua index b683e0a..37fcdcb 100644 --- a/modules/home-manager/cli/neovim/files/options.lua +++ b/modules/home-manager/cli/neovim/files/options.lua @@ -52,7 +52,7 @@ vim.opt.wildmode = 'lastused:full,list' -- enhance menu vim.opt.pumheight = 10 vim.opt.pumwidth = 50 vim.opt.pumblend = 10 - +vim.o.winborder = 'none' -- manage line break smartly vim.opt.wrap = true vim.opt.breakindent = true @@ -103,24 +103,13 @@ vim.opt.wildignore = { '*.sw?' } --- Key biding --- " ---------- -local opts = { noremap = true, silent = true} - -vim.api.nvim_set_keymap('n', '/', ':nohlsearch', opts) - --- Move tabs with \[ and \] -vim.api.nvim_set_keymap('n', ']', ':tabnext', opts) -vim.api.nvim_set_keymap('n', '[', ':tabprev', opts) -vim.api.nvim_set_keymap('n', 'l', ':set list!', {silent = true}) - -- disable lsplog -- This is not usefull on a daily basis and should positively impact performance vim.lsp.set_log_level("off") -- define a timeout for match parens -vim.g.matchparen_timeout = 2 -vim.g.matchparen_insert_timeout = 2 +vim.g.matchparen_timeout = 10 +vim.g.matchparen_insert_timeout = 10 -- activate virtual lines for diagnistics -- no more plugins needed @@ -134,3 +123,73 @@ vim.diagnostic.config({ -- }, signs = { text = { [x.ERROR] = "󰅙", [x.WARN] = "", [x.INFO] = "󰋼", [x.HINT] = "󰌵" } }, }) + +-- LSP +vim.api.nvim_create_autocmd("LspAttach", { + group = vim.api.nvim_create_augroup("UserLspConfig", {}), + callback = function(ev) + vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc" + + local opts = { buffer = ev.buf } + local client = vim.lsp.get_client_by_id(ev.data.client_id) + local bufnr = ev.buf + local function desc(description) + return { noremap = true, silent = true, buffer = bufnr, desc = description } + end + + vim.keymap.set("n", "gD", vim.lsp.buf.declaration, { buffer = ev.buf, desc = "Go to [D]eclaration" }) + vim.keymap.set("n", "gd", vim.lsp.buf.definition, { buffer = ev.buf, desc = "Go to [d]efinition" }) + vim.keymap.set("n", "gi", vim.lsp.buf.implementation, { buffer = ev.buf, desc = "Go to [i]mplementation" }) + vim.keymap.set("n", "gr", vim.lsp.buf.references, { buffer = ev.buf, desc = "Go to [r]eferences" }) + + vim.keymap.set( + "n", + "K", + function() + vim.lsp.buf.hover + { border = "rounded", max_width = 250 } + end, + opts) + + vim.keymap.set( + "n", + "", + function() + vim.lsp.buf.signature_help + { border = "rounded", max_width = 250 } + end, + {buffer = ev.buf, desc = "Signature help"} + ) + + vim.keymap.set("n", "wa", vim.lsp.buf.add_workspace_folder, opts) + vim.keymap.set("n", "wr", vim.lsp.buf.remove_workspace_folder, opts) + + vim.keymap.set( + "n", + "wl", + function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, + opts + ) + + vim.keymap.set("n", "D", vim.lsp.buf.type_definition, { buffer = ev.buf, desc = "Type [D]efinition" }) + vim.keymap.set("n", "rn", vim.lsp.buf.rename, { buffer = ev.buf, desc = "LSP [r]e[n]ame" }) + vim.keymap.set("n", "ca", vim.lsp.buf.code_action, { buffer = ev.buf, desc = "Show [c]ode [a]ction"}) + + vim.keymap.set( + "n", + "F", + function() + require("conform").format({ bufnr = bufnr }) + end, + { buffer = ev.buf, desc = "[F]ormat file" } + ) + + if client.server_capabilities.inlayHintProvider then + vim.keymap.set("n", "h", function() + vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) + end, desc("LSP toggle inlay [h]ints")) + end + end, +}) diff --git a/modules/home-manager/cli/neovim/files/plugins/luasnip.lua b/modules/home-manager/cli/neovim/files/plugins/gitsign.lua similarity index 100% rename from modules/home-manager/cli/neovim/files/plugins/luasnip.lua rename to modules/home-manager/cli/neovim/files/plugins/gitsign.lua diff --git a/modules/home-manager/cli/neovim/files/plugins/neotree.lua b/modules/home-manager/cli/neovim/files/plugins/neotree.lua index d1fd640..27d8aff 100644 --- a/modules/home-manager/cli/neovim/files/plugins/neotree.lua +++ b/modules/home-manager/cli/neovim/files/plugins/neotree.lua @@ -18,3 +18,8 @@ neotree.setup({ }, } }) + +vim.keymap.set('n', 'nc', ':Neotree close', {desc='Neotree [c]lose'}) +vim.keymap.set('n', 'nf', ':Neotree focus filesystem', {desc='Neotree [f]ocus'}) +vim.keymap.set('n', 'nb', ':Neotree focus buffers', {desc='Neotree Nvim [b]uffers'}) +vim.keymap.set('n', 'ng', ':Neotree focus git_status', {desc='Neotree [g]it status'})