{ configs, pkgs, ... }: { programs.nixvim = { plugins.lsp={ enable=true; servers={ bashls.enable=true; clangd.enable=true; lua-ls.enable=true; nil_ls.enable=true; nushell.enable=true; pyright.enable=true; ruff-lsp.enable=true; rust-analyzer={ enable=true; installCargo=true; installRustc=true; }; texlab.enable=true; typst-lsp.enable=true; taplo.enable=true; yamlls.enable=true; marksman.enable=true; jsonls.enable=true; hls.enable=true; }; }; plugins.cmp.settings.sources=[ {name="nvim_lsp";} ]; plugins.which-key.registrations = { "l" = "+lsp"; }; keymaps = [ { action = "vim.lsp.buf.declaration"; key = "lc"; lua = true; mode = "n"; options = { silent = true; desc = "declaration"; }; } { action = "vim.lsp.buf.definition"; key = "ld"; lua = true; mode = "n"; options = { silent = true; desc = "definition"; }; } { action = "vim.lsp.buf.hover"; key = "lh"; lua = true; mode = "n"; options = { silent = true; desc = "hover"; }; } { action = "vim.lsp.buf.implementation"; key = "li"; lua = true; mode = "n"; options = { silent = true; desc = "implementation"; }; } { action = "vim.lsp.buf.signature_help"; key = "ls"; lua = true; mode = "n"; options = { silent = true; desc = "signature_help"; }; } { action = "vim.lsp.buf.add_workspace_folder"; key = "lwa"; lua = true; mode = "n"; options = { silent = true; desc = "add folder"; }; } { action = "vim.lsp.buf.remove_workspace_folder"; key = "lwr"; lua = true; mode = "n"; options = { silent = true; desc = "remove folder"; }; } { action = "vim.lsp.buf.list_workspace_folders"; key = "lw"; lua = true; mode = "n"; options = { silent = true; desc = "workspace"; }; } { action = "vim.lsp.buf.rename"; key = "lr"; lua = true; mode = "n"; options = { silent = true; desc = "rename"; }; } { action = "vim.lsp.buf.code_action"; key = "la"; lua = true; mode = "n"; options = { silent = true; desc = "code action"; }; } { action = "vim.lsp.buf.references"; key = "le"; lua = true; mode = "n"; options = { silent = true; desc = "list references"; }; } { action = "function() vim.lsp.buf.format{async=true} end"; key = "lm"; lua = true; mode = "n"; options = { silent = true; desc = "format buffer"; }; } { action = "vim.diagnostic.open_float"; key = "lo"; lua = true; mode = "n"; options = { silent = true; desc = "open float"; }; } { action = "vim.diagnostic.goto_next"; key = "]d"; lua = true; mode = "n"; options = { silent = true; desc = "next diagnostic"; }; } { action = "vim.diagnostic.goto_prev"; key = "[d"; lua = true; mode = "n"; options = { silent = true; desc = "prev diagnostic"; }; } ]; }; imports = [ ./outline.nix ./rust-tools.nix ]; }