diff --git a/plugins/lsp/default.nix b/plugins/lsp/default.nix index 754148f210..a0d098d991 100644 --- a/plugins/lsp/default.nix +++ b/plugins/lsp/default.nix @@ -8,9 +8,97 @@ with lib; let cfg = config.plugins.lsp; in { - imports = [ - ./language-servers - ]; + imports = + [ + ./language-servers + ] + # TODO: introduced 2024-02-14, remove on 2024-03-14 + ++ ( + map + ( + serverName: + mkRemovedOptionModule + ["plugins" "lsp" "servers" serverName "installLanguageServer"] + "If you want to not install the language server package, set `plugins.lsp.servers.${serverName}.package` to `false`." + ) + [ + "astro" + "bashls" + "beancount" + "biome" + "ccls" + "clangd" + "clojure-lsp" + "cmake" + "csharp-ls" + "cssls" + "dagger" + "dartls" + "denols" + "dhall-lsp-server" + "digestif" + "dockerls" + "efm" + "elixirls" + "elmls" + "emmet_ls" + "eslint" + "fsautocomplete" + "futhark-lsp" + "gdscript" + "gleam" + "gopls" + "graphql" + "helm-ls" + "hls" + "html" + "htmx" + "intelephense" + "java-language-server" + "jsonls" + "julials" + "kotlin-language-server" + "leanls" + "lemminx" + "ltex" + "lua-ls" + "marksman" + "metals" + "nil_ls" + "nixd" + "nushell" + "ols" + "omnisharp" + "perlpls" + "pest_ls" + "phpactor" + "prismals" + "prolog-ls" + "purescriptls" + "pylsp" + "pylyzer" + "pyright" + "rnix-lsp" + "ruff-lsp" + "rust-analyzer" + "solargraph" + "sourcekit" + "svelte" + "tailwindcss" + "taplo" + "templ" + "terraformls" + "texlab" + "tsserver" + "typst-lsp" + "vala-ls" + "vls" + "volar" + "vuels" + "yamlls" + "zls" + ] + ); options = { plugins.lsp = { diff --git a/plugins/lsp/helpers.nix b/plugins/lsp/helpers.nix index 82ceb45a26..d04dd0129c 100644 --- a/plugins/lsp/helpers.nix +++ b/plugins/lsp/helpers.nix @@ -19,80 +19,68 @@ }: with lib; let cfg = config.plugins.lsp.servers.${name}; + in { + options = { + plugins.lsp.servers.${name} = { + enable = mkEnableOption description; - packageOption = - if package != null - then { package = mkOption { default = package; - type = types.package; + type = types.nullOr types.package; + description = "Which package to use for ${name}."; }; - } - else {}; - in { - options = { - plugins.lsp.servers.${name} = - { - enable = mkEnableOption description; - installLanguageServer = mkOption { - type = types.bool; - default = true; - description = "Whether nixvim should take care of installing the language server."; - }; - - cmd = mkOption { - type = with types; nullOr (listOf str); - default = - if cfg.installLanguageServer - then cmd cfg - else null; - }; + cmd = mkOption { + type = with types; nullOr (listOf str); + default = + if (cfg.package or null) != null + then cmd cfg + else null; + }; - filetypes = helpers.mkNullOrOption (types.listOf types.str) '' - Set of filetypes for which to attempt to resolve {root_dir}. - May be empty, or server may specify a default value. - ''; + filetypes = helpers.mkNullOrOption (types.listOf types.str) '' + Set of filetypes for which to attempt to resolve {root_dir}. + May be empty, or server may specify a default value. + ''; - autostart = helpers.defaultNullOpts.mkBool true '' - Controls if the `FileType` autocommand that launches a language server is created. - If `false`, allows for deferring language servers until manually launched with - `:LspStart` (|lspconfig-commands|). - ''; + autostart = helpers.defaultNullOpts.mkBool true '' + Controls if the `FileType` autocommand that launches a language server is created. + If `false`, allows for deferring language servers until manually launched with + `:LspStart` (|lspconfig-commands|). + ''; - rootDir = helpers.defaultNullOpts.mkLuaFn "nil" '' - A function (or function handle) which returns the root of the project used to - determine if lspconfig should launch a new language server, or attach a previously - launched server when you open a new buffer matching the filetype of the server. - ''; + rootDir = helpers.defaultNullOpts.mkLuaFn "nil" '' + A function (or function handle) which returns the root of the project used to + determine if lspconfig should launch a new language server, or attach a previously + launched server when you open a new buffer matching the filetype of the server. + ''; - onAttach = - helpers.mkCompositeOption "Server specific on_attach behavior." - { - override = mkOption { - type = types.bool; - default = false; - description = "Override the global `plugins.lsp.onAttach` function."; - }; + onAttach = + helpers.mkCompositeOption "Server specific on_attach behavior." + { + override = mkOption { + type = types.bool; + default = false; + description = "Override the global `plugins.lsp.onAttach` function."; + }; - function = mkOption { - type = types.lines; - description = '' - Body of the on_attach function. - The argument `client` and `bufnr` is provided. - ''; - }; + function = mkOption { + type = types.lines; + description = '' + Body of the on_attach function. + The argument `client` and `bufnr` is provided. + ''; }; + }; - settings = settingsOptions; + settings = settingsOptions; - extraOptions = mkOption { - default = {}; - type = types.attrs; - description = "Extra options for the ${name} language server."; - }; - } - // packageOption; + extraOptions = mkOption { + default = {}; + type = types.attrs; + description = "Extra options for the ${name} language server."; + }; + }; }; config = @@ -100,7 +88,7 @@ { extraPackages = optional - (cfg.installLanguageServer && (package != null)) + (cfg.package != null) cfg.package; plugins.lsp.enabledServers = [ diff --git a/tests/test-sources/plugins/lsp/_lsp.nix b/tests/test-sources/plugins/lsp/_lsp.nix index bf6c4c2ec9..88d231969c 100644 --- a/tests/test-sources/plugins/lsp/_lsp.nix +++ b/tests/test-sources/plugins/lsp/_lsp.nix @@ -40,7 +40,7 @@ # Do not install the language server using nixvim gopls = { enable = true; - installLanguageServer = false; + package = null; }; nil_ls.enable = true; rust-analyzer = {