2022-07-28 21:37:49 +02:00
|
|
|
{ pkgs, config, lib, ... }:
|
|
|
|
|
|
|
|
{
|
2022-09-18 11:19:23 +01:00
|
|
|
mkLsp =
|
|
|
|
{ name
|
|
|
|
, description ? "Enable ${name}."
|
|
|
|
, serverName ? name
|
2023-01-19 10:36:56 +00:00
|
|
|
, package ? pkgs.${name}
|
|
|
|
, extraPackages ? { }
|
|
|
|
, cmd ? (cfg: null)
|
|
|
|
, settings ? (cfg: { })
|
2023-01-10 23:47:52 +01:00
|
|
|
, extraOptions ? { }
|
2022-09-18 11:19:23 +01:00
|
|
|
, ...
|
|
|
|
}:
|
|
|
|
# returns a module
|
|
|
|
{ pkgs, config, lib, ... }:
|
|
|
|
with lib;
|
|
|
|
let
|
|
|
|
cfg = config.plugins.lsp.servers.${name};
|
2023-01-19 10:36:56 +00:00
|
|
|
|
|
|
|
packageOption =
|
|
|
|
if package != null then {
|
|
|
|
package = mkOption {
|
|
|
|
default = package;
|
|
|
|
type = types.nullOr types.package;
|
|
|
|
};
|
|
|
|
} else { };
|
2022-09-18 11:19:23 +01:00
|
|
|
in
|
|
|
|
{
|
|
|
|
options = {
|
|
|
|
plugins.lsp.servers.${name} = {
|
|
|
|
enable = mkEnableOption description;
|
2023-01-19 10:36:56 +00:00
|
|
|
} // packageOption // extraOptions;
|
2022-09-18 11:19:23 +01:00
|
|
|
};
|
2022-07-28 21:37:49 +02:00
|
|
|
|
2023-01-19 10:36:56 +00: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-01-19 10:36:56 +00:00
|
|
|
plugins.lsp.enabledServers = [{
|
|
|
|
name = serverName;
|
|
|
|
extraOptions = {
|
|
|
|
cmd = cmd cfg;
|
|
|
|
settings = settings cfg;
|
|
|
|
};
|
|
|
|
}];
|
|
|
|
};
|
2022-09-18 11:19:23 +01:00
|
|
|
};
|
2022-07-28 21:37:49 +02:00
|
|
|
}
|