nix-community.nixvim/plugins/lsp/language-servers/default.nix

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

633 lines
17 KiB
Nix
Raw Normal View History

{
lib,
helpers,
config,
pkgs,
...
2024-05-15 09:00:10 +02:00
}:
with lib;
let
servers = [
{
name = "ansiblels";
description = "ansiblels for Ansible";
package = pkgs.ansible-language-server;
cmd = cfg: [
"${cfg.package}/bin/ansible-language-server"
"--stdio"
];
}
{
name = "ast-grep";
description = ''
ast-grep(sg) is a fast and polyglot tool for code structural search, lint, rewriting at large scale.
ast-grep LSP only works in projects that have `sgconfig.y[a]ml` in their root directories.
'';
serverName = "ast_grep";
}
2023-01-24 00:04:37 +00:00
{
name = "astro";
description = "astrols for Astro";
2023-01-24 00:04:37 +00:00
package = pkgs.nodePackages."@astrojs/language-server";
cmd = cfg: [
"${cfg.package}/bin/astro-ls"
"--stdio"
];
2023-01-24 00:04:37 +00:00
}
{
name = "bashls";
description = "bashls for bash";
package = pkgs.bash-language-server;
}
{
name = "beancount";
description = "beancount-language-server";
package = pkgs.beancount-language-server;
}
{
name = "biome";
description = "Biome, Toolchain of the Web";
}
2023-06-15 11:20:36 +02:00
{
name = "ccls";
description = "ccls for C/C++";
2023-06-15 11:20:36 +02:00
}
{
name = "clangd";
description = "clangd LSP for C/C++";
package = pkgs.clang-tools;
}
2023-05-21 09:14:03 +02:00
{
name = "clojure-lsp";
description = "clojure-lsp for Clojure";
2023-05-21 09:14:03 +02:00
serverName = "clojure_lsp";
package = pkgs.clojure-lsp;
}
2023-06-27 08:12:02 +02:00
{
name = "cmake";
description = "cmake language server";
2023-06-27 08:12:02 +02:00
package = pkgs.cmake-language-server;
}
{
name = "csharp-ls";
description = "csharp-ls for C#";
package = pkgs.csharp-ls;
serverName = "csharp_ls";
}
{
name = "cssls";
description = "cssls for CSS";
package = pkgs.vscode-langservers-extracted;
cmd = cfg: [
"${cfg.package}/bin/vscode-css-language-server"
"--stdio"
];
}
{
name = "dagger";
description = "dagger for Cuelang";
package = pkgs.cuelsp;
}
{
name = "dartls";
description = "dart language-server";
package = pkgs.dart;
settingsOptions = import ./dartls-settings.nix { inherit lib helpers; };
settings = cfg: { dart = cfg; };
}
2022-11-16 13:37:35 +01:00
{
name = "denols";
description = "denols for Deno";
package = pkgs.deno;
2022-11-16 13:37:35 +01:00
}
{
name = "dhall-lsp-server";
description = "dhall-lsp-server for Dhall";
serverName = "dhall_lsp_server";
}
{
name = "digestif";
description = "digestif for LaTeX";
# luaPackages.digestif is currently broken, using lua54Packages instead
package = pkgs.lua54Packages.digestif;
}
{
name = "docker-compose-language-service";
description = "docker-compose-language-service for Docker Compose";
serverName = "docker_compose_language_service";
}
{
name = "dockerls";
description = "dockerls for Dockerfile";
package = pkgs.dockerfile-language-server-nodejs;
cmd = cfg: [
"${cfg.package}/bin/docker-langserver"
"--stdio"
];
}
2023-08-19 22:17:07 +02:00
{
name = "efm";
description = "efm-langserver for misc tools";
2023-08-19 22:17:07 +02:00
package = pkgs.efm-langserver;
}
{
name = "elmls";
description = "elmls for Elm";
package = pkgs.elmPackages.elm-language-server;
}
{
name = "emmet-ls";
description = "emmet_ls, emmet support based on LSP";
package = pkgs.emmet-ls;
serverName = "emmet_ls";
}
{
name = "eslint";
package = pkgs.vscode-langservers-extracted;
cmd = cfg: [
"${cfg.package}/bin/vscode-eslint-language-server"
"--stdio"
];
}
2022-10-22 14:55:22 +01:00
{
name = "elixirls";
package = pkgs.elixir-ls;
cmd = cfg: [ "${cfg.package}/bin/elixir-ls" ];
2022-10-22 14:55:22 +01:00
}
{
name = "fortls";
description = "fortls for Fortran";
cmd = cfg: [
"${cfg.package}/bin/fortls"
"--hover_signature"
"--hover_language=fortran"
"--use_signature_help"
];
}
2023-10-20 08:39:09 +00:00
{
name = "fsautocomplete";
description = "fsautocomplete for F#";
2023-10-20 08:39:09 +00:00
package = pkgs.fsautocomplete;
}
2023-05-08 23:11:30 +02:00
{
name = "futhark-lsp";
description = "futhark-lsp for Futhark";
2023-05-08 23:11:30 +02:00
package = pkgs.futhark;
serverName = "futhark_lsp";
}
{
name = "gdscript";
description = "gdscript for Godot";
package = null;
}
2023-12-13 07:44:05 +01:00
{
name = "gleam";
description = "gleam for gleam";
2023-12-13 07:44:05 +01:00
}
{
name = "gopls";
description = "gopls for Go";
}
{
name = "golangci-lint-ls";
description = "golangci-lint-ls for Go";
serverName = "golangci_lint_ls";
package = pkgs.golangci-lint-langserver;
}
{
name = "graphql";
description = "graphql for GraphQL";
package = pkgs.nodePackages.graphql-language-service-cli;
}
2024-02-02 11:34:19 +01:00
{
name = "helm-ls";
description = "helm_ls for Helm";
serverName = "helm_ls";
}
{
name = "hls";
description = "haskell language server";
package = pkgs.haskell-language-server;
cmd = cfg: [
"haskell-language-server-wrapper"
"--lsp"
];
}
{
name = "html";
description = "HTML language server from `vscode-langservers-extracted`";
package = pkgs.vscode-langservers-extracted;
cmd = cfg: [
"${cfg.package}/bin/vscode-html-language-server"
"--stdio"
];
}
2024-01-12 23:16:28 +01:00
{
name = "htmx";
description = "htmx for HTMX";
2024-01-12 23:16:28 +01:00
package = pkgs.htmx-lsp;
}
2023-08-21 10:12:17 +02:00
{
name = "intelephense";
description = "intelephense for PHP";
2023-08-21 10:12:17 +02:00
package = pkgs.nodePackages.intelephense;
}
{
name = "java-language-server";
description = "Java language server";
serverName = "java_language_server";
cmd = cfg: [ "${cfg.package}/bin/java-language-server" ];
}
{
name = "jsonls";
description = "jsonls for JSON";
package = pkgs.vscode-langservers-extracted;
cmd = cfg: [
"${cfg.package}/bin/vscode-json-language-server"
"--stdio"
];
2024-04-30 09:24:32 +02:00
settings = cfg: { json = cfg; };
}
2024-06-14 09:17:19 +01:00
{
name = "jsonnet-ls";
description = "jsonnet language server";
package = pkgs.jsonnet-language-server;
serverName = "jsonnet_ls";
settingsOptions = import ./jsonnet-ls-settings.nix { inherit lib helpers; };
}
{
name = "julials";
description = "julials for Julia";
# The julia language server has to be installed from julia and thus is not packaged "as is" in
# nixpkgs.
package = null;
}
{
name = "kotlin-language-server";
description = "Kotlin language server";
serverName = "kotlin_language_server";
}
{
name = "leanls";
description = "leanls for Lean";
package = pkgs.lean4;
}
{
2024-01-25 16:00:55 +01:00
name = "lemminx";
description = "lemminx for XML";
2024-01-25 16:00:55 +01:00
}
{
name = "lexical";
description = "lexical for Elixir";
}
2024-01-25 16:00:55 +01:00
{
name = "ltex";
description = "ltex-ls for LanguageTool";
package = pkgs.ltex-ls;
settingsOptions = import ./ltex-settings.nix { inherit lib helpers; };
settings = cfg: { ltex = cfg; };
}
{
name = "lua-ls";
description = "lua-ls for Lua";
package = pkgs.lua-language-server;
serverName = "lua_ls";
settingsOptions = import ./lua-ls-settings.nix { inherit lib helpers; };
settings = cfg: { Lua = cfg; };
}
{
name = "marksman";
description = "marksman for Markdown";
package = pkgs.marksman;
}
{
name = "metals";
description = "metals for Scala";
}
2024-04-29 08:33:43 +02:00
{
name = "nginx-language-server";
description = "nginx-language-server for `nginx.conf`";
serverName = "nginx_language_server";
}
{
name = "nickel-ls";
description = "nls for Nickel";
package = pkgs.nls;
serverName = "nickel_ls";
}
{
name = "nil-ls";
description = "nil for Nix";
package = pkgs.nil;
serverName = "nil_ls";
settingsOptions = import ./nil-ls-settings.nix { inherit lib helpers; };
settings = cfg: { nil = cfg; };
}
2024-04-04 09:03:28 +02:00
{
name = "nimls";
description = "nimls for Nim";
package = pkgs.nimlsp;
}
2023-06-13 09:39:54 +02:00
{
name = "nixd";
description = "nixd for Nix";
2023-06-13 09:39:54 +02:00
package = pkgs.nixd;
settings = cfg: { nixd = cfg; };
2024-05-15 09:00:10 +02:00
settingsOptions = import ./nixd-settings.nix { inherit lib helpers; };
extraConfig = cfg: {
extraPackages = optional (cfg.settings.formatting.command == [ "nixpkgs-fmt" ]) pkgs.nixpkgs-fmt;
};
2023-06-13 09:39:54 +02:00
}
{
name = "nushell";
description = "Nushell language server";
cmd = cfg: [
"${cfg.package}/bin/nu"
"--lsp"
];
}
{
name = "ocamllsp";
description = "ocamllsp for OCaml";
package = pkgs.ocamlPackages.ocaml-lsp;
}
{
name = "ols";
description = "ols for the Odin programming language";
package = pkgs.ols;
}
{
name = "omnisharp";
description = "OmniSharp language server for C#";
package = pkgs.omnisharp-roslyn;
cmd = cfg: [ "${cfg.package}/bin/OmniSharp" ];
settings = cfg: { omnisharp = cfg; };
settingsOptions = {
enableEditorConfigSupport = helpers.defaultNullOpts.mkBool true ''
Enables support for reading code style, naming convention and analyzer settings from
`.editorconfig`.
'';
enableMsBuildLoadProjectsOnDemand = helpers.defaultNullOpts.mkBool false ''
If true, MSBuild project system will only load projects for files that were opened in the
editor.
This setting is useful for big C# codebases and allows for faster initialization of code
navigation features only for projects that are relevant to code that is being edited.
With this setting enabled OmniSharp may load fewer projects and may thus display
incomplete reference lists for symbols.
'';
enableRoslynAnalyzers = helpers.defaultNullOpts.mkBool false ''
If true, MSBuild project system will only load projects for files that were opened in the
editor.
This setting is useful for big C# codebases and allows for faster initialization of code
navigation features only for projects that are relevant to code that is being edited.
With this setting enabled OmniSharp may load fewer projects and may thus display
incomplete reference lists for symbols.
'';
organizeImportsOnFormat = helpers.defaultNullOpts.mkBool false ''
Specifies whether 'using' directives should be grouped and sorted during document
formatting.
'';
enableImportCompletion = helpers.defaultNullOpts.mkBool false ''
Enables support for showing unimported types and unimported extension methods in
completion lists.
When committed, the appropriate using directive will be added at the top of the current
file.
This option can have a negative impact on initial completion responsiveness, particularly
for the first few completion sessions after opening a solution.
'';
sdkIncludePrereleases = helpers.defaultNullOpts.mkBool true ''
Specifies whether to include preview versions of the .NET SDK when determining which
version to use for project loading.
'';
analyzeOpenDocumentsOnly = helpers.defaultNullOpts.mkBool true ''
Only run analyzers against open files when 'enableRoslynAnalyzers' is true.
'';
};
}
{
name = "perlpls";
description = "PLS for Perl";
package = pkgs.perlPackages.PLS;
}
{
name = "pest-ls";
description = "pest_ls for pest";
package = pkgs.pest-ide-tools;
serverName = "pest_ls";
}
2023-09-25 22:04:24 +02:00
{
name = "phpactor";
description = "phpactor for PHP";
2023-09-25 22:04:24 +02:00
package = pkgs.phpactor;
}
{
name = "prismals";
description = "prismals for Prisma";
package = pkgs.nodePackages."@prisma/language-server";
}
2024-01-12 09:40:28 +01:00
{
name = "prolog-ls";
description = "prolog_ls for SWI-Prolog";
2024-01-12 09:40:28 +01:00
serverName = "prolog_ls";
package = pkgs.swiProlog;
}
{
2024-02-10 20:47:07 +01:00
name = "purescriptls";
description = "purescriptls for PureScript";
package = pkgs.nodePackages.purescript-language-server;
}
{
name = "pylsp";
description = "pylsp for Python";
package = pkgs.python3Packages.python-lsp-server;
settings = cfg: { pylsp = cfg; };
}
{
name = "pylyzer";
description = "pylyzer for Python";
}
{
name = "pyright";
description = "pyright for Python";
}
2024-06-04 22:14:30 +10:00
{
name = "r-language-server";
description = "languageserver for R";
package = pkgs.rPackages.languageserver;
serverName = "r_language_server";
}
{
name = "rnix-lsp";
description = "rnix LSP for Nix";
serverName = "rnix";
package = null;
}
2024-05-31 21:51:48 +02:00
{
name = "ruby-lsp";
description = "ruby-lsp for Ruby";
serverName = "ruby_lsp";
}
2024-04-19 09:50:49 +02:00
{
name = "ruff";
description = "Official ruff language server (Rust) for Python";
}
{
name = "ruff-lsp";
description = "ruff-lsp, for Python";
package = pkgs.python3Packages.ruff-lsp;
serverName = "ruff_lsp";
}
{
name = "rust-analyzer";
description = "rust-analyzer for Rust";
serverName = "rust_analyzer";
# settingsOptions = import ./rust-analyzer-config.nix lib pkgs;
settings = cfg: { rust-analyzer = cfg; };
}
{
name = "slint-lsp";
description = "slint_lsp for Slint GUI language";
serverName = "slint_lsp";
}
{
name = "solargraph";
description = "solargraph for Ruby";
package = pkgs.rubyPackages.solargraph;
}
{
name = "sourcekit";
description = "sourcekit language server for Swift and C/C++/Objective-C";
package = pkgs.sourcekit-lsp;
}
2024-03-23 13:28:17 +01:00
{
name = "sqls";
description = "sqls for SQL";
}
{
name = "svelte";
description = "svelte language server for Svelte";
package = pkgs.nodePackages.svelte-language-server;
}
2022-12-15 18:03:31 +01:00
{
name = "tailwindcss";
description = "tailwindcss language server for tailwindcss";
package = pkgs.nodePackages."@tailwindcss/language-server";
2022-12-15 18:03:31 +01:00
}
{
name = "taplo";
description = "taplo for TOML";
package = pkgs.taplo;
}
{
name = "templ";
description = "templ language server for the templ HTML templating language";
}
{
name = "terraformls";
description = "terraform-ls for terraform";
package = pkgs.terraform-ls;
}
{
name = "texlab";
description = "texlab language server for LaTeX";
}
2024-06-14 09:36:04 +01:00
{
name = "tflint";
description = "tflint, a terraform linter";
}
{
name = "tinymist";
description = "tinymist for Typst";
settingsOptions = import ./tinymist-settings.nix { inherit lib helpers; };
}
2022-10-28 01:40:40 +02:00
{
name = "tsserver";
description = "tsserver for TypeScript";
package = pkgs.nodePackages.typescript-language-server;
2022-10-28 01:40:40 +02:00
}
2024-02-15 23:00:35 +11:00
{
name = "typos-lsp";
serverName = "typos_lsp";
description = "Source code spell checker for Visual Studio Code and LSP clients";
}
{
name = "typst-lsp";
serverName = "typst_lsp";
description = "typst-lsp for typst";
package = pkgs.typst-lsp;
}
2024-02-04 19:42:59 +08:00
{
name = "vala-ls";
description = "vala_ls for Vala";
serverName = "vala_ls";
package = pkgs.vala-language-server;
}
2024-03-24 13:51:21 +01:00
{
name = "vhdl-ls";
description = "vhdl_ls for VHDL";
serverName = "vhdl_ls";
}
2023-11-27 13:20:12 +01:00
{
name = "vls";
description = "vls for V";
2023-11-27 13:20:12 +01:00
# The v language server has to be installed from v and thus is not packaged "as is" in
# nixpkgs.
package = null;
extraOptions = {
autoSetFiletype = mkOption {
type = types.bool;
description = ''
Files with the `.v` extension are not automatically detected as vlang files.
If this option is enabled, Nixvim will automatically set the filetype accordingly.
'';
default = true;
example = false;
};
};
extraConfig = cfg: { filetype.extension = mkIf cfg.autoSetFiletype { v = "vlang"; }; };
2023-11-27 13:20:12 +01:00
}
{
name = "vuels";
description = "vuels for Vue";
2023-02-20 11:46:56 +01:00
package = pkgs.nodePackages.vls;
}
{
name = "volar";
description = "@volar/vue-language-server for Vue";
package = pkgs.nodePackages."@volar/vue-language-server";
}
{
name = "yamlls";
description = "yamlls for YAML";
package = pkgs.yaml-language-server;
2024-04-30 09:24:24 +02:00
settings = cfg: { yaml = cfg; };
}
{
name = "zls";
description = "zls for Zig";
}
];
in
{
imports =
let
mkLsp = import ./_mk-lsp.nix { inherit lib config pkgs; };
lspModules = map mkLsp servers;
in
lspModules
++ [
./ccls.nix
./efmls-configs.nix
./pylsp.nix
./rust-analyzer.nix
./svelte.nix
];
}