plugins/lsp/servers: use lib.mkPackageOption

This commit is contained in:
Matt Sturgeon 2024-09-01 09:43:53 +01:00
parent 0b86bf519b
commit 9c11b54065
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
2 changed files with 113 additions and 78 deletions

View file

@ -4,24 +4,24 @@
# #
# Helper function that returns the Nix module `plugins.lsp.servers.<name>`. # Helper function that returns the Nix module `plugins.lsp.servers.<name>`.
# #
{ pkgs, ... }:
{ {
name, name,
description ? "Enable ${name}.", description ? "Enable ${name}.",
serverName ? name, serverName ? name,
package ? pkgs.${name}, package ? name,
url ? package.meta.homepage or null, url ? null,
cmd ? (cfg: null), cmd ? (cfg: null),
settings ? (cfg: cfg), settings ? (cfg: cfg),
settingsOptions ? { }, settingsOptions ? { },
extraConfig ? cfg: { }, extraConfig ? cfg: { },
extraOptions ? { }, extraOptions ? { },
... ...
}: }@args:
# returns a module # returns a module
{ {
pkgs, pkgs,
config, config,
options,
helpers, helpers,
lib, lib,
... ...
@ -29,11 +29,12 @@
with lib; with lib;
let let
cfg = config.plugins.lsp.servers.${name}; cfg = config.plugins.lsp.servers.${name};
opt = options.plugins.lsp.servers.${name};
in in
{ {
meta.nixvimInfo = { meta.nixvimInfo = {
# TODO: description # TODO: description
inherit url; url = args.url or opt.package.default.meta.homepage or null;
path = [ path = [
"plugins" "plugins"
"lsp" "lsp"
@ -46,10 +47,13 @@ in
plugins.lsp.servers.${name} = { plugins.lsp.servers.${name} = {
enable = mkEnableOption description; enable = mkEnableOption description;
package = mkOption { package =
if lib.isOption package then
package
else
lib.mkPackageOption pkgs name {
nullable = true;
default = package; default = package;
type = types.nullOr types.package;
description = "Which package to use for ${name}.";
}; };
cmd = mkOption { cmd = mkOption {

View file

@ -1,7 +1,6 @@
{ {
lib, lib,
helpers, helpers,
config,
pkgs, pkgs,
... ...
}: }:
@ -11,7 +10,7 @@ let
{ {
name = "ansiblels"; name = "ansiblels";
description = "ansiblels for Ansible"; description = "ansiblels for Ansible";
package = pkgs.ansible-language-server; package = "ansible-language-server";
cmd = cfg: [ cmd = cfg: [
"${cfg.package}/bin/ansible-language-server" "${cfg.package}/bin/ansible-language-server"
"--stdio" "--stdio"
@ -28,7 +27,7 @@ let
{ {
name = "astro"; name = "astro";
description = "astrols for Astro"; description = "astrols for Astro";
package = pkgs.astro-language-server; package = "astro-language-server";
cmd = cfg: [ cmd = cfg: [
"${cfg.package}/bin/astro-ls" "${cfg.package}/bin/astro-ls"
"--stdio" "--stdio"
@ -37,12 +36,12 @@ let
{ {
name = "bashls"; name = "bashls";
description = "bashls for bash"; description = "bashls for bash";
package = pkgs.bash-language-server; package = "bash-language-server";
} }
{ {
name = "beancount"; name = "beancount";
description = "beancount-language-server"; description = "beancount-language-server";
package = pkgs.beancount-language-server; package = "beancount-language-server";
} }
{ {
name = "biome"; name = "biome";
@ -51,7 +50,7 @@ let
{ {
name = "bufls"; name = "bufls";
description = "Prototype for a Protobuf language server compatible with Buf."; description = "Prototype for a Protobuf language server compatible with Buf.";
package = pkgs.buf-language-server; package = "buf-language-server";
} }
{ {
name = "ccls"; name = "ccls";
@ -60,29 +59,27 @@ let
{ {
name = "clangd"; name = "clangd";
description = "clangd LSP for C/C++"; description = "clangd LSP for C/C++";
package = pkgs.clang-tools; package = "clang-tools";
} }
{ {
name = "clojure-lsp"; name = "clojure-lsp";
description = "clojure-lsp for Clojure"; description = "clojure-lsp for Clojure";
serverName = "clojure_lsp"; serverName = "clojure_lsp";
package = pkgs.clojure-lsp;
} }
{ {
name = "cmake"; name = "cmake";
description = "cmake language server"; description = "cmake language server";
package = pkgs.cmake-language-server; package = "cmake-language-server";
} }
{ {
name = "csharp-ls"; name = "csharp-ls";
description = "csharp-ls for C#"; description = "csharp-ls for C#";
package = pkgs.csharp-ls;
serverName = "csharp_ls"; serverName = "csharp_ls";
} }
{ {
name = "cssls"; name = "cssls";
description = "cssls for CSS"; description = "cssls for CSS";
package = pkgs.vscode-langservers-extracted; package = "vscode-langservers-extracted";
cmd = cfg: [ cmd = cfg: [
"${cfg.package}/bin/vscode-css-language-server" "${cfg.package}/bin/vscode-css-language-server"
"--stdio" "--stdio"
@ -91,19 +88,19 @@ let
{ {
name = "dagger"; name = "dagger";
description = "dagger for Cuelang"; description = "dagger for Cuelang";
package = pkgs.cuelsp; package = "cuelsp";
} }
{ {
name = "dartls"; name = "dartls";
description = "dart language-server"; description = "dart language-server";
package = pkgs.dart; package = "dart";
settingsOptions = import ./dartls-settings.nix { inherit lib helpers; }; settingsOptions = import ./dartls-settings.nix { inherit lib helpers; };
settings = cfg: { dart = cfg; }; settings = cfg: { dart = cfg; };
} }
{ {
name = "denols"; name = "denols";
description = "denols for Deno"; description = "denols for Deno";
package = pkgs.deno; package = "deno";
} }
{ {
name = "dhall-lsp-server"; name = "dhall-lsp-server";
@ -114,7 +111,10 @@ let
name = "digestif"; name = "digestif";
description = "digestif for LaTeX"; description = "digestif for LaTeX";
# luaPackages.digestif is currently broken, using lua54Packages instead # luaPackages.digestif is currently broken, using lua54Packages instead
package = pkgs.lua54Packages.digestif; package = [
"lua54Packages"
"digestif"
];
} }
{ {
name = "docker-compose-language-service"; name = "docker-compose-language-service";
@ -124,7 +124,7 @@ let
{ {
name = "dockerls"; name = "dockerls";
description = "dockerls for Dockerfile"; description = "dockerls for Dockerfile";
package = pkgs.dockerfile-language-server-nodejs; package = "dockerfile-language-server-nodejs";
cmd = cfg: [ cmd = cfg: [
"${cfg.package}/bin/docker-langserver" "${cfg.package}/bin/docker-langserver"
"--stdio" "--stdio"
@ -133,22 +133,24 @@ let
{ {
name = "efm"; name = "efm";
description = "efm-langserver for misc tools"; description = "efm-langserver for misc tools";
package = pkgs.efm-langserver; package = "efm-langserver";
} }
{ {
name = "elmls"; name = "elmls";
description = "elmls for Elm"; description = "elmls for Elm";
package = pkgs.elmPackages.elm-language-server; package = [
"elmPackages"
"elm-language-server"
];
} }
{ {
name = "emmet-ls"; name = "emmet-ls";
description = "emmet_ls, emmet support based on LSP"; description = "emmet_ls, emmet support based on LSP";
package = pkgs.emmet-ls;
serverName = "emmet_ls"; serverName = "emmet_ls";
} }
{ {
name = "eslint"; name = "eslint";
package = pkgs.vscode-langservers-extracted; package = "vscode-langservers-extracted";
cmd = cfg: [ cmd = cfg: [
"${cfg.package}/bin/vscode-eslint-language-server" "${cfg.package}/bin/vscode-eslint-language-server"
"--stdio" "--stdio"
@ -156,7 +158,7 @@ let
} }
{ {
name = "elixirls"; name = "elixirls";
package = pkgs.elixir-ls; package = "elixir-ls";
cmd = cfg: [ "${cfg.package}/bin/elixir-ls" ]; cmd = cfg: [ "${cfg.package}/bin/elixir-ls" ];
} }
{ {
@ -172,12 +174,11 @@ let
{ {
name = "fsautocomplete"; name = "fsautocomplete";
description = "fsautocomplete for F#"; description = "fsautocomplete for F#";
package = pkgs.fsautocomplete;
} }
{ {
name = "futhark-lsp"; name = "futhark-lsp";
description = "futhark-lsp for Futhark"; description = "futhark-lsp for Futhark";
package = pkgs.futhark; package = "futhark";
serverName = "futhark_lsp"; serverName = "futhark_lsp";
} }
{ {
@ -197,12 +198,15 @@ let
name = "golangci-lint-ls"; name = "golangci-lint-ls";
description = "golangci-lint-ls for Go"; description = "golangci-lint-ls for Go";
serverName = "golangci_lint_ls"; serverName = "golangci_lint_ls";
package = pkgs.golangci-lint-langserver; package = "golangci-lint-langserver";
} }
{ {
name = "graphql"; name = "graphql";
description = "graphql for GraphQL"; description = "graphql for GraphQL";
package = pkgs.nodePackages.graphql-language-service-cli; package = [
"nodePackages"
"graphql-language-service-cli"
];
} }
{ {
name = "helm-ls"; name = "helm-ls";
@ -212,7 +216,7 @@ let
{ {
name = "hls"; name = "hls";
description = "haskell language server"; description = "haskell language server";
package = pkgs.haskell-language-server; package = "haskell-language-server";
cmd = cfg: [ cmd = cfg: [
"haskell-language-server-wrapper" "haskell-language-server-wrapper"
"--lsp" "--lsp"
@ -221,7 +225,7 @@ let
{ {
name = "html"; name = "html";
description = "HTML language server from `vscode-langservers-extracted`"; description = "HTML language server from `vscode-langservers-extracted`";
package = pkgs.vscode-langservers-extracted; package = "vscode-langservers-extracted";
cmd = cfg: [ cmd = cfg: [
"${cfg.package}/bin/vscode-html-language-server" "${cfg.package}/bin/vscode-html-language-server"
"--stdio" "--stdio"
@ -230,12 +234,15 @@ let
{ {
name = "htmx"; name = "htmx";
description = "htmx for HTMX"; description = "htmx for HTMX";
package = pkgs.htmx-lsp; package = "htmx-lsp";
} }
{ {
name = "intelephense"; name = "intelephense";
description = "intelephense for PHP"; description = "intelephense for PHP";
package = pkgs.nodePackages.intelephense; package = [
"nodePackages"
"intelephense"
];
} }
{ {
name = "java-language-server"; name = "java-language-server";
@ -252,7 +259,7 @@ let
{ {
name = "jsonls"; name = "jsonls";
description = "jsonls for JSON"; description = "jsonls for JSON";
package = pkgs.vscode-langservers-extracted; package = "vscode-langservers-extracted";
cmd = cfg: [ cmd = cfg: [
"${cfg.package}/bin/vscode-json-language-server" "${cfg.package}/bin/vscode-json-language-server"
"--stdio" "--stdio"
@ -262,7 +269,7 @@ let
{ {
name = "jsonnet-ls"; name = "jsonnet-ls";
description = "jsonnet language server"; description = "jsonnet language server";
package = pkgs.jsonnet-language-server; package = "jsonnet-language-server";
serverName = "jsonnet_ls"; serverName = "jsonnet_ls";
settingsOptions = import ./jsonnet-ls-settings.nix { inherit lib helpers; }; settingsOptions = import ./jsonnet-ls-settings.nix { inherit lib helpers; };
} }
@ -281,7 +288,7 @@ let
{ {
name = "leanls"; name = "leanls";
description = "leanls for Lean"; description = "leanls for Lean";
package = pkgs.lean4; package = "lean4";
} }
{ {
name = "lemminx"; name = "lemminx";
@ -294,14 +301,14 @@ let
{ {
name = "ltex"; name = "ltex";
description = "ltex-ls for LanguageTool"; description = "ltex-ls for LanguageTool";
package = pkgs.ltex-ls; package = "ltex-ls";
settingsOptions = import ./ltex-settings.nix { inherit lib helpers; }; settingsOptions = import ./ltex-settings.nix { inherit lib helpers; };
settings = cfg: { ltex = cfg; }; settings = cfg: { ltex = cfg; };
} }
{ {
name = "lua-ls"; name = "lua-ls";
description = "lua-ls for Lua"; description = "lua-ls for Lua";
package = pkgs.lua-language-server; package = "lua-language-server";
serverName = "lua_ls"; serverName = "lua_ls";
settingsOptions = import ./lua-ls-settings.nix { inherit lib helpers; }; settingsOptions = import ./lua-ls-settings.nix { inherit lib helpers; };
settings = cfg: { Lua = cfg; }; settings = cfg: { Lua = cfg; };
@ -309,7 +316,6 @@ let
{ {
name = "marksman"; name = "marksman";
description = "marksman for Markdown"; description = "marksman for Markdown";
package = pkgs.marksman;
} }
{ {
name = "metals"; name = "metals";
@ -318,7 +324,7 @@ let
{ {
name = "nextls"; name = "nextls";
description = "The language server for Elixir that just works."; description = "The language server for Elixir that just works.";
package = pkgs.next-ls; package = "next-ls";
cmd = cfg: [ cmd = cfg: [
"nextls" "nextls"
"--stdio" "--stdio"
@ -332,13 +338,13 @@ let
{ {
name = "nickel-ls"; name = "nickel-ls";
description = "nls for Nickel"; description = "nls for Nickel";
package = pkgs.nls; package = "nls";
serverName = "nickel_ls"; serverName = "nickel_ls";
} }
{ {
name = "nil-ls"; name = "nil-ls";
description = "nil for Nix"; description = "nil for Nix";
package = pkgs.nil; package = "nil";
serverName = "nil_ls"; serverName = "nil_ls";
settingsOptions = import ./nil-ls-settings.nix { inherit lib helpers; }; settingsOptions = import ./nil-ls-settings.nix { inherit lib helpers; };
settings = cfg: { nil = cfg; }; settings = cfg: { nil = cfg; };
@ -346,12 +352,11 @@ let
{ {
name = "nimls"; name = "nimls";
description = "nimls for Nim"; description = "nimls for Nim";
package = pkgs.nimlsp; package = "nimlsp";
} }
{ {
name = "nixd"; name = "nixd";
description = "nixd for Nix"; description = "nixd for Nix";
package = pkgs.nixd;
settings = cfg: { nixd = cfg; }; settings = cfg: { nixd = cfg; };
settingsOptions = import ./nixd-settings.nix { inherit lib helpers; }; settingsOptions = import ./nixd-settings.nix { inherit lib helpers; };
extraConfig = cfg: { extraConfig = cfg: {
@ -369,17 +374,19 @@ let
{ {
name = "ocamllsp"; name = "ocamllsp";
description = "ocamllsp for OCaml"; description = "ocamllsp for OCaml";
package = pkgs.ocamlPackages.ocaml-lsp; package = [
"ocamlPackages"
"ocaml-lsp"
];
} }
{ {
name = "ols"; name = "ols";
description = "ols for the Odin programming language"; description = "ols for the Odin programming language";
package = pkgs.ols;
} }
{ {
name = "omnisharp"; name = "omnisharp";
description = "OmniSharp language server for C#"; description = "OmniSharp language server for C#";
package = pkgs.omnisharp-roslyn; package = "omnisharp-roslyn";
cmd = cfg: [ "${cfg.package}/bin/OmniSharp" ]; cmd = cfg: [ "${cfg.package}/bin/OmniSharp" ];
settings = cfg: { omnisharp = cfg; }; settings = cfg: { omnisharp = cfg; };
settingsOptions = { settingsOptions = {
@ -438,39 +445,51 @@ let
{ {
name = "perlpls"; name = "perlpls";
description = "PLS for Perl"; description = "PLS for Perl";
package = pkgs.perlPackages.PLS; package = [
"perlPackages"
"PLS"
];
} }
{ {
name = "pest-ls"; name = "pest-ls";
description = "pest_ls for pest"; description = "pest_ls for pest";
package = pkgs.pest-ide-tools; package = "pest-ide-tools";
serverName = "pest_ls"; serverName = "pest_ls";
} }
{ {
name = "phpactor"; name = "phpactor";
description = "phpactor for PHP"; description = "phpactor for PHP";
package = pkgs.phpactor; package = "phpactor";
} }
{ {
name = "prismals"; name = "prismals";
description = "prismals for Prisma"; description = "prismals for Prisma";
package = pkgs.nodePackages."@prisma/language-server"; package = [
"nodePackages"
"@prisma/language-server"
];
} }
{ {
name = "prolog-ls"; name = "prolog-ls";
description = "prolog_ls for SWI-Prolog"; description = "prolog_ls for SWI-Prolog";
serverName = "prolog_ls"; serverName = "prolog_ls";
package = pkgs.swiProlog; package = "swiProlog";
} }
{ {
name = "purescriptls"; name = "purescriptls";
description = "purescriptls for PureScript"; description = "purescriptls for PureScript";
package = pkgs.nodePackages.purescript-language-server; package = [
"nodePackages"
"purescript-language-server"
];
} }
{ {
name = "pylsp"; name = "pylsp";
description = "pylsp for Python"; description = "pylsp for Python";
package = pkgs.python3Packages.python-lsp-server; package = [
"python3Packages"
"python-lsp-server"
];
settings = cfg: { pylsp = cfg; }; settings = cfg: { pylsp = cfg; };
} }
{ {
@ -484,7 +503,10 @@ let
{ {
name = "r-language-server"; name = "r-language-server";
description = "languageserver for R"; description = "languageserver for R";
package = pkgs.rPackages.languageserver; package = [
"rPackages"
"languageserver"
];
serverName = "r_language_server"; serverName = "r_language_server";
} }
{ {
@ -505,10 +527,6 @@ let
{ {
name = "ruff-lsp"; name = "ruff-lsp";
description = "ruff-lsp, for Python"; description = "ruff-lsp, for Python";
# TODO: Added 2024-08-19; remove 2024-11-19
# Ruff-lsp was moved out of python3Packages set without alias
# Using fallback as a transition period
package = pkgs.ruff-lsp or pkgs.python3Packages.ruff-lsp;
serverName = "ruff_lsp"; serverName = "ruff_lsp";
} }
{ {
@ -527,12 +545,15 @@ let
{ {
name = "solargraph"; name = "solargraph";
description = "solargraph for Ruby"; description = "solargraph for Ruby";
package = pkgs.rubyPackages.solargraph; package = [
"rubyPackages"
"solargraph"
];
} }
{ {
name = "sourcekit"; name = "sourcekit";
description = "sourcekit language server for Swift and C/C++/Objective-C"; description = "sourcekit language server for Swift and C/C++/Objective-C";
package = pkgs.sourcekit-lsp; package = "sourcekit-lsp";
} }
{ {
name = "sqls"; name = "sqls";
@ -541,17 +562,22 @@ let
{ {
name = "svelte"; name = "svelte";
description = "svelte language server for Svelte"; description = "svelte language server for Svelte";
package = pkgs.nodePackages.svelte-language-server; package = [
"nodePackages"
"svelte-language-server"
];
} }
{ {
name = "tailwindcss"; name = "tailwindcss";
description = "tailwindcss language server for tailwindcss"; description = "tailwindcss language server for tailwindcss";
package = pkgs.nodePackages."@tailwindcss/language-server"; package = [
"nodePackages"
"@tailwindcss/language-server"
];
} }
{ {
name = "taplo"; name = "taplo";
description = "taplo for TOML"; description = "taplo for TOML";
package = pkgs.taplo;
} }
{ {
name = "templ"; name = "templ";
@ -560,7 +586,7 @@ let
{ {
name = "terraformls"; name = "terraformls";
description = "terraform-ls for terraform"; description = "terraform-ls for terraform";
package = pkgs.terraform-ls; package = "terraform-ls";
} }
{ {
name = "texlab"; name = "texlab";
@ -578,7 +604,7 @@ let
{ {
name = "tsserver"; name = "tsserver";
description = "tsserver for TypeScript"; description = "tsserver for TypeScript";
package = pkgs.typescript-language-server; package = "typescript-language-server";
} }
{ {
name = "typos-lsp"; name = "typos-lsp";
@ -589,13 +615,12 @@ let
name = "typst-lsp"; name = "typst-lsp";
serverName = "typst_lsp"; serverName = "typst_lsp";
description = "typst-lsp for typst"; description = "typst-lsp for typst";
package = pkgs.typst-lsp;
} }
{ {
name = "vala-ls"; name = "vala-ls";
description = "vala_ls for Vala"; description = "vala_ls for Vala";
serverName = "vala_ls"; serverName = "vala_ls";
package = pkgs.vala-language-server; package = "vala-language-server";
} }
{ {
name = "vhdl-ls"; name = "vhdl-ls";
@ -626,17 +651,23 @@ let
{ {
name = "vuels"; name = "vuels";
description = "vuels for Vue"; description = "vuels for Vue";
package = pkgs.nodePackages.vls; package = [
"nodePackages"
"vls"
];
} }
{ {
name = "volar"; name = "volar";
description = "@volar/vue-language-server for Vue"; description = "@volar/vue-language-server for Vue";
package = pkgs.nodePackages."@volar/vue-language-server"; package = [
"nodePackages"
"@volar/vue-language-server"
];
} }
{ {
name = "yamlls"; name = "yamlls";
description = "yamlls for YAML"; description = "yamlls for YAML";
package = pkgs.yaml-language-server; package = "yaml-language-server";
settings = cfg: { yaml = cfg; }; settings = cfg: { yaml = cfg; };
} }
{ {
@ -648,7 +679,7 @@ in
{ {
imports = imports =
let let
mkLsp = import ./_mk-lsp.nix { inherit lib config pkgs; }; mkLsp = import ./_mk-lsp.nix;
lspModules = map mkLsp servers; lspModules = map mkLsp servers;
in in
lspModules lspModules