diff --git a/modules/lsp/default.nix b/modules/lsp/default.nix index 2e52fcb7..ae60e7fb 100644 --- a/modules/lsp/default.nix +++ b/modules/lsp/default.nix @@ -66,31 +66,32 @@ in config = let - enabledServers = lib.filterAttrs (_: v: v.enable) cfg.servers; + enabledServers = lib.pipe cfg.servers [ + builtins.attrValues + (builtins.filter (server: server.enable)) + ]; in { - extraPackages = lib.pipe enabledServers [ - builtins.attrValues - (builtins.catAttrs "package") - ]; + extraPackages = builtins.catAttrs "package" enabledServers; lsp.luaConfig.content = let mkServerConfig = - name: props: + server: let - luaName = toLuaObject name; + luaName = toLuaObject server.name; + luaCfg = toLuaObject server.config; in '' - vim.lsp.config(${luaName}, ${toLuaObject props.config}) + vim.lsp.config(${luaName}, ${luaCfg}) '' - + lib.optionalString props.activate '' + + lib.optionalString server.activate '' vim.lsp.enable(${luaName}) ''; in lib.mkMerge ( lib.optional cfg.inlayHints.enable "vim.lsp.inlay_hint.enable(true)" - ++ lib.mapAttrsToList mkServerConfig enabledServers + ++ builtins.map mkServerConfig enabledServers ); extraConfigLua = lib.mkIf (cfg.luaConfig.content != "") '' diff --git a/modules/lsp/server.nix b/modules/lsp/server.nix index c551b405..25e8b761 100644 --- a/modules/lsp/server.nix +++ b/modules/lsp/server.nix @@ -1,4 +1,4 @@ -{ lib, ... }: +{ lib, name, ... }: let inherit (lib) types; in @@ -6,6 +6,15 @@ in options = { enable = lib.mkEnableOption "the language server"; + name = lib.mkOption { + type = types.maybeRaw types.str; + description = '' + The name of the language server, supplied to functions like `vim.lsp.enable()`. + ''; + default = name; + defaultText = lib.literalMD "the attribute name"; + }; + activate = lib.mkOption { type = types.bool; description = ''