From 9e77c8e4a9a3499833c2c9a336b31ffccd477832 Mon Sep 17 00:00:00 2001 From: Matt Sturgeon Date: Thu, 9 Oct 2025 18:55:24 +0100 Subject: [PATCH] modules/lsp: allow servers to install multiple packages Adds two internal per-server options: `packages.prefix` & `packages.suffix`. These options allow the server module to install multiple packages, and control which end up being prefixed or suffixed on the PATH. This simplifies the propagating code in `modules/lsp/servers/default.nix`, which can now zip up the enabled server `packages` attrs. --- modules/lsp/servers/default.nix | 5 ++--- modules/lsp/servers/server.nix | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/modules/lsp/servers/default.nix b/modules/lsp/servers/default.nix index cc2955cd..51840c9c 100644 --- a/modules/lsp/servers/default.nix +++ b/modules/lsp/servers/default.nix @@ -153,9 +153,8 @@ in ]; packages = lib.pipe enabledServers [ - (builtins.filter (server: server ? package)) - (builtins.groupBy (server: if server.packageFallback then "suffix" else "prefix")) - (builtins.mapAttrs (_: builtins.catAttrs "package")) + (builtins.catAttrs "packages") + (builtins.zipAttrsWith (_: builtins.concatLists)) ]; in { diff --git a/modules/lsp/servers/server.nix b/modules/lsp/servers/server.nix index b683b843..f663d310 100644 --- a/modules/lsp/servers/server.nix +++ b/modules/lsp/servers/server.nix @@ -64,6 +64,22 @@ in ''; }; + packages.prefix = lib.mkOption { + type = types.listOf types.package; + description = "Packages to prefix onto the PATH."; + default = [ ]; + visible = false; + internal = true; + }; + + packages.suffix = lib.mkOption { + type = types.listOf types.package; + description = "Packages to suffix onto the PATH."; + default = [ ]; + visible = false; + internal = true; + }; + config = lib.mkOption { type = with types; attrsOf anything; description = '' @@ -88,6 +104,14 @@ in }; }; + config = { + packages = lib.mkIf (config.package != null) { + ${if config.packageFallback then "suffix" else "prefix"} = [ + config.package + ]; + }; + }; + imports = [ ./server-renames.nix ]