From acefec6468138e83fa197cdde502b77588ab22d1 Mon Sep 17 00:00:00 2001 From: Alexander Nortung Date: Sun, 30 Oct 2022 22:15:16 +0100 Subject: [PATCH] nvim-lsp: added package options for basic servers --- plugins/nvim-lsp/basic-servers.nix | 24 ++++++++++++------------ plugins/nvim-lsp/helpers.nix | 26 +++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/plugins/nvim-lsp/basic-servers.nix b/plugins/nvim-lsp/basic-servers.nix index 5a85a4e5..fabcc8bd 100644 --- a/plugins/nvim-lsp/basic-servers.nix +++ b/plugins/nvim-lsp/basic-servers.nix @@ -5,28 +5,28 @@ let { name = "clangd"; description = "Enable clangd LSP, for C/C++."; - packages = [ pkgs.clang-tools ]; + package = pkgs.clang-tools; } { name = "cssls"; description = "Enable cssls, for CSS"; - packages = [ pkgs.nodePackages.vscode-langservers-extracted ]; + package = pkgs.nodePackages.vscode-langservers-extracted; } { name = "eslint"; description = "Enable eslint"; - packages = [ pkgs.nodePackages.vscode-langservers-extracted ]; + package = pkgs.nodePackages.vscode-langservers-extracted; } { name = "elixirls"; description = "Enable elixirls"; - packages = [ ]; + package = null; cmd = ["${pkgs.elixir_ls}/bin/elixir-ls"]; } { name = "gdscript"; description = "Enable gdscript, for Godot"; - packages = [ ]; + package = null; } { name = "gopls"; @@ -35,12 +35,12 @@ let { name = "html"; description = "Enable html, for HTML"; - packages = [ pkgs.nodePackages.vscode-langservers-extracted ]; + package = pkgs.nodePackages.vscode-langservers-extracted; } { name = "jsonls"; description = "Enable jsonls, for JSON"; - packages = [ pkgs.nodePackages.vscode-langservers-extracted ]; + package = pkgs.nodePackages.vscode-langservers-extracted; } { name = "pyright"; @@ -59,15 +59,15 @@ let { name = "tsserver"; description = "Enable tsserver for typescript"; - packages = with pkgs; [ - nodePackages.typescript - nodePackages.typescript-language-server - ]; + package = pkgs.nodePackages.typescript-language-server; + extraPackages = { + typescript = pkgs.nodePackages.typescript; + }; } { name = "vuels"; description = "Enable vuels, for Vue"; - packages = [ pkgs.nodePackages.vue-language-server ]; + package = pkgs.nodePackages.vue-language-server; } { name = "zls"; diff --git a/plugins/nvim-lsp/helpers.nix b/plugins/nvim-lsp/helpers.nix index b2d9a395..ed4e6f35 100644 --- a/plugins/nvim-lsp/helpers.nix +++ b/plugins/nvim-lsp/helpers.nix @@ -5,7 +5,8 @@ { name , description ? "Enable ${name}." , serverName ? name - , packages ? [ pkgs.${name} ] + , package ? pkgs.${name} + , extraPackages ? { } , cmd ? null , ... }: @@ -14,16 +15,35 @@ with lib; let cfg = config.plugins.lsp.servers.${name}; + + packageOption = + if package != null then { + package = mkOption { + default = package; + type = types.nullOr types.package; + }; + } else { }; + + extraPackagesOptions = mapAttrs' + (name: defaultPackage: { + name = "${name}Package"; + value = mkOption { + default = defaultPackage; + type = types.package; + }; + }) + extraPackages; in { options = { plugins.lsp.servers.${name} = { enable = mkEnableOption description; - }; + } // packageOption // extraPackagesOptions; }; config = mkIf cfg.enable { - extraPackages = packages; + extraPackages = (optional (package != null) cfg.package) ++ + (mapAttrsToList (name: _: cfg."${name}Package") extraPackages); plugins.lsp.enabledServers = [{ name = serverName;