diff --git a/lib/types/custom.nix b/lib/types/custom.nix index f6905b02..9974070e 100644 --- a/lib/types/custom.nix +++ b/lib/types/custom.nix @@ -1,9 +1,9 @@ {lib}: let - inherit (builtins) toJSON; + inherit (builtins) toJSON attrNames; inherit (lib.options) mergeEqualOption; inherit (lib.lists) singleton; inherit (lib.strings) isString stringLength match; - inherit (lib.types) listOf mkOptionType coercedTo; + inherit (lib.types) listOf mkOptionType coercedTo enum; inherit (lib.trivial) warn; in { mergelessListOf = elemType: @@ -39,4 +39,28 @@ in { '' (singleton x)) (listOf t); + + # Create an enum type for `values`, which additionally accepts deprecated + # values listed in the `renames` attrset as `old = new` pairs. + # + # Example: + # + # vim.languages.typescript.lsp.servers = mkOption { + # type = renamedEnum + # "vim.languages.typescript.lsp.servers" + # ["typescript-language-server" "some-other-server"] + # { ts_ls = "typescript-language-server"; }; + # } + # + # With this option definition, when users enter `ts_ls`, they + # get a warning "`ts_ls` is deprecated, use `typescript-language-server` + # instead", and typescript-language-server is automatically used. + enumWithRename = option: values: renames: + coercedTo (enum (attrNames renames)) ( + old: + warn + "${option}: `${old}` is deprecated, use `${renames.${old}}` instead" + renames.${old} + ) + (enum values); } diff --git a/lib/types/default.nix b/lib/types/default.nix index f6c43483..9b5469db 100644 --- a/lib/types/default.nix +++ b/lib/types/default.nix @@ -12,5 +12,5 @@ in { inherit (typesPlugin) pluginsOpt extraPluginType mkPluginSetupOption luaInline pluginType borderType; inherit (typesLanguage) diagnostics mkGrammarOption; inherit (typesLsp) mkLspPresetEnableOption; - inherit (customTypes) char hexColor mergelessListOf deprecatedSingleOrListOf; + inherit (customTypes) char hexColor mergelessListOf deprecatedSingleOrListOf enumWithRename; } diff --git a/modules/plugins/languages/astro.nix b/modules/plugins/languages/astro.nix index 729e1f69..08dfe17b 100644 --- a/modules/plugins/languages/astro.nix +++ b/modules/plugins/languages/astro.nix @@ -11,7 +11,7 @@ inherit (lib.meta) getExe; inherit (lib.types) enum coercedTo listOf; inherit (lib.nvim.attrsets) mapListToAttrs; - inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf; + inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf enumWithRename; inherit (lib) genAttrs; cfg = config.vim.languages.astro; @@ -85,7 +85,12 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.astro.lsp.servers" + servers + { + astro = "astro-language-server"; + }); default = defaultServers; description = "Astro LSP server to use"; }; diff --git a/modules/plugins/languages/bash.nix b/modules/plugins/languages/bash.nix index 35e9bda8..be1eaca9 100644 --- a/modules/plugins/languages/bash.nix +++ b/modules/plugins/languages/bash.nix @@ -10,7 +10,7 @@ inherit (lib.modules) mkIf mkMerge; inherit (lib.types) enum bool listOf; inherit (lib) genAttrs; - inherit (lib.nvim.types) diagnostics mkGrammarOption deprecatedSingleOrListOf; + inherit (lib.nvim.types) diagnostics mkGrammarOption deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.bash; @@ -53,7 +53,12 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.bash.lsp.servers" + servers + { + bash-ls = "bash-language-server"; + }); default = defaultServers; description = "Bash LSP server to use"; }; diff --git a/modules/plugins/languages/css.nix b/modules/plugins/languages/css.nix index fc34ea37..045dd6d5 100644 --- a/modules/plugins/languages/css.nix +++ b/modules/plugins/languages/css.nix @@ -10,7 +10,7 @@ inherit (lib.meta) getExe; inherit (lib.modules) mkIf mkMerge; inherit (lib.types) enum listOf; - inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf; + inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.css; @@ -56,7 +56,12 @@ in { }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.css.lsp.servers" + servers + { + cssls = "vscode-css-language-server"; + }); default = defaultServer; description = "CSS LSP server to use"; }; diff --git a/modules/plugins/languages/elixir.nix b/modules/plugins/languages/elixir.nix index 645d4866..4efb5320 100644 --- a/modules/plugins/languages/elixir.nix +++ b/modules/plugins/languages/elixir.nix @@ -9,7 +9,7 @@ inherit (lib.modules) mkIf mkMerge; inherit (lib) genAttrs; inherit (lib.types) enum listOf; - inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf; + inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.dag) entryAnywhere; inherit (lib.nvim.attrsets) mapListToAttrs; @@ -48,7 +48,12 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.elixir.lsp.servers" + servers + { + elixirls = "elixir-ls"; + }); default = defaultServers; description = "Elixir LSP server to use"; }; diff --git a/modules/plugins/languages/hcl.nix b/modules/plugins/languages/hcl.nix index 60ad6f5f..32f4945d 100644 --- a/modules/plugins/languages/hcl.nix +++ b/modules/plugins/languages/hcl.nix @@ -10,7 +10,7 @@ inherit (lib.meta) getExe; inherit (lib.modules) mkIf mkMerge; inherit (lib.types) enum listOf; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.types) mkGrammarOption enumWithRename; inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.hcl; @@ -51,7 +51,13 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.hcl.lsp.servers" + servers + { + terraformls-hcl = "terraform-ls"; + tofuls-hcl = "tofu-ls"; + }); default = defaultServers; description = "HCL LSP server to use"; }; diff --git a/modules/plugins/languages/java.nix b/modules/plugins/languages/java.nix index 4f7d0c02..1fad79a3 100644 --- a/modules/plugins/languages/java.nix +++ b/modules/plugins/languages/java.nix @@ -7,8 +7,8 @@ inherit (lib.options) literalExpression mkEnableOption mkOption; inherit (lib.modules) mkIf mkMerge; inherit (lib) genAttrs; - inherit (lib.types) listOf enum; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.types) listOf; + inherit (lib.nvim.types) mkGrammarOption enumWithRename; cfg = config.vim.languages.java; @@ -36,7 +36,12 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.java.lsp.servers" + servers + { + jdtls = "jdt-language-server"; + }); default = defaultServers; description = "Java LSP server to use"; }; diff --git a/modules/plugins/languages/json.nix b/modules/plugins/languages/json.nix index 5189059c..2c6096f9 100644 --- a/modules/plugins/languages/json.nix +++ b/modules/plugins/languages/json.nix @@ -10,7 +10,7 @@ inherit (lib.modules) mkIf mkMerge; inherit (lib.types) enum listOf; inherit (lib) genAttrs; - inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf; + inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.json; @@ -51,7 +51,12 @@ in { }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.json.lsp.servers" + servers + { + jsonls = "vscode-json-language-server"; + }); default = defaultServers; description = "JSON LSP server to use"; }; diff --git a/modules/plugins/languages/julia.nix b/modules/plugins/languages/julia.nix index d77fc168..51737d2f 100644 --- a/modules/plugins/languages/julia.nix +++ b/modules/plugins/languages/julia.nix @@ -5,10 +5,10 @@ ... }: let inherit (lib.options) literalExpression mkEnableOption mkOption; - inherit (lib.types) enum listOf; + inherit (lib.types) listOf; inherit (lib.modules) mkIf mkMerge; inherit (lib) genAttrs; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.types) mkGrammarOption enumWithRename; cfg = config.vim.languages.julia; @@ -37,7 +37,12 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.julia.lsp.servers" + servers + { + julials = "julia-languageserver"; + }); default = defaultServers; description = '' Julia LSP Server to Use diff --git a/modules/plugins/languages/r.nix b/modules/plugins/languages/r.nix index 240c3334..44addba4 100644 --- a/modules/plugins/languages/r.nix +++ b/modules/plugins/languages/r.nix @@ -9,7 +9,7 @@ inherit (lib.modules) mkIf mkMerge; inherit (lib.types) enum listOf; inherit (lib) genAttrs; - inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf; + inherit (lib.nvim.types) mkGrammarOption deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.r; @@ -67,7 +67,12 @@ in { }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.r.lsp.servers" + servers + { + r_language_server = "r-languageserver"; + }); default = defaultServers; description = "R LSP server to use"; }; diff --git a/modules/plugins/languages/ruby.nix b/modules/plugins/languages/ruby.nix index 392a4bb4..dc6ff702 100644 --- a/modules/plugins/languages/ruby.nix +++ b/modules/plugins/languages/ruby.nix @@ -9,7 +9,7 @@ inherit (lib) genAttrs; inherit (lib.meta) getExe; inherit (lib.modules) mkIf mkMerge; - inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf; + inherit (lib.nvim.types) mkGrammarOption diagnostics deprecatedSingleOrListOf enumWithRename; inherit (lib.types) enum listOf; inherit (lib.nvim.attrsets) mapListToAttrs; @@ -56,7 +56,12 @@ in { }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.ruby.lsp.servers" + servers + { + ruby_lsp = "ruby-lsp"; + }); default = defaultServers; description = "Ruby LSP server to use"; }; diff --git a/modules/plugins/languages/terraform.nix b/modules/plugins/languages/terraform.nix index a3a22048..6269540f 100644 --- a/modules/plugins/languages/terraform.nix +++ b/modules/plugins/languages/terraform.nix @@ -10,7 +10,7 @@ inherit (lib) genAttrs; inherit (lib.meta) getExe; inherit (lib.types) enum listOf; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.nvim.types) mkGrammarOption enumWithRename; inherit (lib.nvim.attrsets) mapListToAttrs; cfg = config.vim.languages.terraform; @@ -53,7 +53,13 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.terraform.lsp.servers" + servers + { + terraformls-tf = "terraform-ls"; + tofuls-tf = "tofu-ls"; + }); default = defaultServers; description = "Terraform LSP server to use"; }; diff --git a/modules/plugins/languages/ts.nix b/modules/plugins/languages/ts.nix index 7a91d78e..4c38cba1 100644 --- a/modules/plugins/languages/ts.nix +++ b/modules/plugins/languages/ts.nix @@ -12,7 +12,7 @@ inherit (lib.types) enum bool listOf; inherit (lib.nvim.attrsets) mapListToAttrs; inherit (lib.nvim.lua) toLuaObject; - inherit (lib.nvim.types) mkGrammarOption diagnostics mkPluginSetupOption deprecatedSingleOrListOf; + inherit (lib.nvim.types) mkGrammarOption diagnostics mkPluginSetupOption deprecatedSingleOrListOf enumWithRename; inherit (lib.nvim.dag) entryAnywhere; cfg = config.vim.languages.ts; @@ -99,7 +99,14 @@ in { }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.ts.lsp.servers" + servers + { + ts_ls = "typescript-language-server"; + denols = "deno"; + tsgo = "typescript-go"; + }); default = defaultServers; description = "Typescript/Javascript LSP server to use"; }; diff --git a/modules/plugins/languages/vala.nix b/modules/plugins/languages/vala.nix index 4e3eca3d..5defc722 100644 --- a/modules/plugins/languages/vala.nix +++ b/modules/plugins/languages/vala.nix @@ -7,8 +7,8 @@ inherit (lib.options) mkEnableOption mkOption literalExpression; inherit (lib.modules) mkIf mkMerge; inherit (lib) genAttrs; - inherit (lib.types) enum listOf; - inherit (lib.nvim.types) mkGrammarOption; + inherit (lib.types) listOf; + inherit (lib.nvim.types) mkGrammarOption enumWithRename; cfg = config.vim.languages.vala; @@ -36,7 +36,12 @@ in { defaultText = literalExpression "config.vim.lsp.enable"; }; servers = mkOption { - type = listOf (enum servers); + type = listOf (enumWithRename + "vim.languages.vala.lsp.servers" + servers + { + vala_ls = "vala-language-server"; + }); default = defaultServers; description = "Vala LSP server to use"; }; diff --git a/modules/plugins/lsp/presets/terraform-ls.nix b/modules/plugins/lsp/presets/terraform-ls.nix index d2814cf7..fce5d2fe 100644 --- a/modules/plugins/lsp/presets/terraform-ls.nix +++ b/modules/plugins/lsp/presets/terraform-ls.nix @@ -11,7 +11,7 @@ cfg = config.vim.lsp.presets.terraform-ls; in { options.vim.lsp.presets.terraform-ls = { - enable = mkLspPresetEnableOption "terrraform-ls" "Terraform" []; + enable = mkLspPresetEnableOption "terraform-ls" "Terraform" []; }; config = mkIf cfg.enable {