Skip to content

Commit 29aa60b

Browse files
committed
modules/lsp: add per-server name option
This allows users to override the name used for a given `lsp.servers.*` entry. The default is still the attr-name. This may be useful to inject raw lua, or to configure the same server in different ways via different attrs.
1 parent 3722f88 commit 29aa60b

File tree

2 files changed

+21
-11
lines changed

2 files changed

+21
-11
lines changed

modules/lsp/default.nix

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,31 +66,32 @@ in
6666

6767
config =
6868
let
69-
enabledServers = lib.filterAttrs (_: v: v.enable) cfg.servers;
70-
in
71-
{
72-
extraPackages = lib.pipe enabledServers [
69+
enabledServers = lib.pipe cfg.servers [
7370
builtins.attrValues
74-
(builtins.catAttrs "package")
71+
(builtins.filter (server: server.enable))
7572
];
73+
in
74+
{
75+
extraPackages = builtins.catAttrs "package" enabledServers;
7676

7777
lsp.luaConfig.content =
7878
let
7979
mkServerConfig =
80-
name: props:
80+
server:
8181
let
82-
luaName = toLuaObject name;
82+
luaName = toLuaObject server.name;
83+
luaCfg = toLuaObject server.config;
8384
in
8485
''
85-
vim.lsp.config(${luaName}, ${toLuaObject props.config})
86+
vim.lsp.config(${luaName}, ${luaCfg})
8687
''
87-
+ lib.optionalString props.activate ''
88+
+ lib.optionalString server.activate ''
8889
vim.lsp.enable(${luaName})
8990
'';
9091
in
9192
lib.mkMerge (
9293
lib.optional cfg.inlayHints.enable "vim.lsp.inlay_hint.enable(true)"
93-
++ lib.mapAttrsToList mkServerConfig enabledServers
94+
++ builtins.map mkServerConfig enabledServers
9495
);
9596

9697
extraConfigLua = lib.mkIf (cfg.luaConfig.content != "") ''

modules/lsp/server.nix

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
1-
{ lib, ... }:
1+
{ lib, name, ... }:
22
let
33
inherit (lib) types;
44
in
55
{
66
options = {
77
enable = lib.mkEnableOption "the language server";
88

9+
name = lib.mkOption {
10+
type = types.maybeRaw types.str;
11+
description = ''
12+
The name of the language server, supplied to functions like `vim.lsp.enable()`.
13+
'';
14+
default = name;
15+
defaultText = lib.literalMD "the attribute name";
16+
};
17+
918
activate = lib.mkOption {
1019
type = types.bool;
1120
description = ''

0 commit comments

Comments
 (0)