lsp.nix (2649B)
1 { 2 lib, 3 pkgs, 4 config, 5 ... 6 }: 7 { 8 options.programs.neovim.languageServers = lib.mkOption { 9 type = with lib.types; attrsOf anything; 10 }; 11 12 config.programs.neovim = { 13 languageServers = { 14 nixd = { 15 cmd = [ (lib.getExe pkgs.nixd) ]; 16 filetypes = [ "nix" ]; 17 root_markers = [ 18 "flake.nix" 19 ".git" 20 ]; 21 settings.nixd.formatting.command = [ (lib.getExe pkgs.nixfmt) ]; 22 }; 23 24 gopls = { 25 cmd = [ (lib.getExe pkgs.gopls) ]; 26 filetypes = [ 27 "go" 28 "gomod" 29 ]; 30 root_markers = [ 31 "go.work" 32 "go.mod" 33 ".git" 34 ]; 35 }; 36 37 typescript-language-server = { 38 cmd = [ 39 (lib.getExe pkgs.typescript-language-server) 40 "--stdio" 41 ]; 42 filetypes = [ 43 "javascript" 44 "typescript" 45 ]; 46 root_markers = [ 47 [ 48 "jsconfig.json" 49 "tsconfig.json" 50 ] 51 "package.json" 52 ".git" 53 ]; 54 init_options.hostInfo = "neovim"; 55 }; 56 57 basedpyright = { 58 cmd = [ 59 (lib.getExe' pkgs.basedpyright "basedpyright-langserver") 60 "--stdio" 61 ]; 62 filetypes = [ "python" ]; 63 root_markers = [ 64 "pyrightconfig.json" 65 "pyproject.toml" 66 "setup.py" 67 ".git" 68 ]; 69 settings.basedpyright = { 70 analysis.typeCheckingMode = "basic"; 71 }; 72 }; 73 74 lua-language-server = { 75 cmd = [ (lib.getExe pkgs.lua-language-server) ]; 76 filetypes = [ "lua" ]; 77 settings.Lua."diagnostics.globals" = [ "vim" ]; 78 }; 79 }; 80 81 customPlugins.lsp = { 82 "plugin/lsp.lua" = # lua 83 '' 84 vim.opt.signcolumn = "yes" 85 vim.opt.completeopt = { "fuzzy", "menu", "menuone", "noinsert", "popup" } 86 87 vim.diagnostic.config({ virtual_text = true }) 88 89 vim.lsp.config('*', { 90 root_markers = { '.git' }, 91 on_attach = function(client, bufnr) 92 vim.lsp.completion.enable(true, client.id, bufnr, {}) 93 end, 94 }) 95 96 vim.keymap.set({ 'n', 'v' }, 'gqb', vim.lsp.buf.format) 97 vim.keymap.set({ 'n', 'v' }, '<C-W>a', vim.diagnostic.setloclist) 98 99 vim.lsp.enable(${ 100 lib.generators.toLua { } (builtins.attrNames config.programs.neovim.languageServers) 101 }) 102 ''; 103 } 104 // (lib.mapAttrs' (name: config: { 105 name = "lsp/${name}.lua"; 106 value = "return ${lib.generators.toLua { } config}"; 107 }) config.programs.neovim.languageServers); 108 }; 109 }