2022-07-28 21:37:49 +02:00
|
|
|
{
|
2023-02-20 11:42:13 +01:00
|
|
|
pkgs,
|
|
|
|
config,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}: {
|
|
|
|
mkLsp = {
|
|
|
|
name,
|
|
|
|
description ? "Enable ${name}.",
|
|
|
|
serverName ? name,
|
|
|
|
package ? pkgs.${name},
|
|
|
|
extraPackages ? {},
|
|
|
|
cmd ? (cfg: null),
|
|
|
|
settings ? (cfg: {}),
|
|
|
|
settingsOptions ? {},
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
# returns a module
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
config,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
with lib; let
|
|
|
|
cfg = config.plugins.lsp.servers.${name};
|
2023-03-14 15:16:26 +01:00
|
|
|
helpers = import ../helpers.nix {inherit lib;};
|
2023-01-19 10:36:56 +00:00
|
|
|
|
2023-02-20 11:42:13 +01:00
|
|
|
packageOption =
|
|
|
|
if package != null
|
|
|
|
then {
|
|
|
|
package = mkOption {
|
|
|
|
default = package;
|
|
|
|
type = types.nullOr types.package;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
else {};
|
|
|
|
in {
|
|
|
|
options = {
|
|
|
|
plugins.lsp.servers.${name} =
|
|
|
|
{
|
2022-09-18 11:19:23 +01:00
|
|
|
enable = mkEnableOption description;
|
2023-03-14 15:16:26 +01:00
|
|
|
|
2023-02-27 11:45:49 +01:00
|
|
|
cmd = mkOption {
|
|
|
|
type = with types; nullOr (listOf str);
|
|
|
|
default = cmd cfg;
|
|
|
|
};
|
2023-03-14 15:16:26 +01:00
|
|
|
|
|
|
|
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|).
|
|
|
|
'';
|
|
|
|
|
2023-01-23 14:52:46 +01:00
|
|
|
settings = settingsOptions;
|
2023-03-14 15:16:26 +01:00
|
|
|
|
2023-02-23 00:37:22 +01:00
|
|
|
extraSettings = mkOption {
|
|
|
|
default = {};
|
|
|
|
type = types.attrs;
|
|
|
|
description = ''
|
|
|
|
Extra settings for the ${name} language server.
|
|
|
|
'';
|
|
|
|
};
|
2023-02-20 11:42:13 +01:00
|
|
|
}
|
|
|
|
// packageOption;
|
|
|
|
};
|
2022-07-28 21:37:49 +02:00
|
|
|
|
2023-02-20 11:42:13 +01:00
|
|
|
config =
|
|
|
|
mkIf cfg.enable
|
|
|
|
{
|
|
|
|
extraPackages =
|
|
|
|
(optional (package != null) cfg.package)
|
|
|
|
++ (mapAttrsToList (name: _: cfg."${name}Package") extraPackages);
|
2022-07-28 21:37:49 +02:00
|
|
|
|
2023-02-20 11:42:13 +01:00
|
|
|
plugins.lsp.enabledServers = [
|
|
|
|
{
|
2023-01-19 10:36:56 +00:00
|
|
|
name = serverName;
|
|
|
|
extraOptions = {
|
2023-03-14 15:16:26 +01:00
|
|
|
inherit (cfg) cmd filetypes autostart;
|
2023-02-23 00:37:22 +01:00
|
|
|
settings = settings (cfg.settings // cfg.extraSettings);
|
2023-01-19 10:36:56 +00:00
|
|
|
};
|
2023-02-20 11:42:13 +01:00
|
|
|
}
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
2022-07-28 21:37:49 +02:00
|
|
|
}
|