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.
This commit is contained in:
Matt Sturgeon 2025-04-28 18:12:18 +01:00
parent 3722f88c5d
commit 29aa60b43a
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
2 changed files with 21 additions and 11 deletions

View file

@ -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 != "") ''

View file

@ -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 = ''