This commit is contained in:
Ching Pei Yang 2025-09-27 10:26:51 +00:00 committed by GitHub
commit 09d3b24024
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
45 changed files with 266 additions and 68 deletions

View file

@ -1,23 +1,41 @@
# LSP Custom Packages/Command {#sec-languages-custom-lsp-packages} # Configuring supported LSP servers {#sec-languages-configuraing-lsp-servers}
One of the strengths of **nvf** is convenient aliases to quickly configure LSP One of the strengths of **nvf** is convenient aliases to quickly configure LSP
servers through the Nix module system. By default the LSP packages for relevant servers through the Nix module system. By default the LSP packages for relevant
language modules will be pulled into the closure. If this is not desirable, you language modules will be pulled into the closure. If this is not desirable, you
may provide **a custom LSP package** (e.g., a Bash script that calls a command) may modify [](#opt-vim.lsp.servers._name_.cmd) (see example below).
or **a list of strings** to be interpreted as the command to launch the language
server. By using a list of strings, you can use this to skip automatic Any other forms of configuration can be done via [](#opt-vim.lsp.servers), which
installation of a language server, and instead use the one found in your `$PATH` is a wrapper for the Neovim Lua API available as`vim.lsp.config()`. Getting
during runtime, for example: familiar with `:help vim.lsp.config()` may help you better understand how to
configure LSPs.
```nix ```nix
vim.languages.java = { {
vim.languages.python = {
enable = true;
lsp = { lsp = {
enable = true; enable = true;
# You can now enable multiple LSPs per language
servers = ["basedpyright"];
};
};
# This expects 'jdt-language-server' to be in your PATH or in # vim.lsp.servers is a wrapper for the lua API vim.lsp.config
# 'vim.extraPackages.' There are no additional checks performed to see # (see :help vim.lsp.config)
# if the command provided is valid. vim.lsp.servers = {
package = ["jdt-language-server" "-data" "~/.cache/jdtls/workspace"]; basedpyright = {
# `vim.languages.<lang>.lsp.package` is now removed, you have to
# modify the cmd field, and remember to copy over the arguments!
cmd = [(getExe pkgs.myCustomPackage) "--stdio"];
# server specific settings, see documentation of the respective language
# servers
settings = {
basedpyright.analysis.logLevel = "Error";
python.pythonPath = getExe pkgs.myPython3;
};
};
}; };
} }
``` ```

View file

@ -28,6 +28,62 @@
align with the "hunks" themed mapping and avoid conflict with the new [neogit] align with the "hunks" themed mapping and avoid conflict with the new [neogit]
group. group.
- Language modules are reworked to allow more flexible and close-to-neovim-API
configs. LSP configuration options are removed from `vim.languages` and should
be done via `vim.lsp.servers`.
## Language module LSP rework
In nvf v0.8, language modules are overhauled, with a few goals in mind:
1. Get rid of our rigid "hard-coded" Lua scripts in favor of the more flexible
`setupOpts` styled options
2. Have our new API stick closer to Lua APIs, in this case `vim.lsp.config`
3. Allow enabling multiple LSPs per-language
This is, however, a big change, so breaking changes are inevitable. The most
important change is the removal of `vim.languages.<lang>.lsp.package` - you now
need to modify `vim.lsp.servers.<server>.cmd`, copying over any additional
arguments - these can be found in the source code files of the respective
language.
<!-- TODO: add [!NOTE] admonitions when available-->
The `<server>` mentioned here is the name of the language server, as shown in
`vim.languages.<lang>.lsp.servers`. This is NOT the name of the language.
Here's a quick overview at what the new language module, looks like:
```nix
{
vim.languages.python = {
enable = true;
lsp = {
enable = true;
# You can now enable multiple LSPs per language
servers = ["pyright" "python-lsp-server"];
};
};
# vim.lsp.servers is a wrapper for the lua API vim.lsp.config
# (see :help vim.lsp.config)
vim.lsp.servers = {
pyright = {
# `vim.languages.<lang>.lsp.package` is now removed, you have to
# modify the cmd field, and remember to copy over the arguments!
cmd = [(getExe pkgs.myCustomPyright) "--stdio"];
};
python-lsp-server = {
# server specific settings
settings = {
pylsp.signature.line_length = 100;
};
};
};
}
```
[NotAShelf](https://github.com/notashelf): [NotAShelf](https://github.com/notashelf):
[typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim [typst-preview.nvim]: https://github.com/chomosuke/typst-preview.nvim

View file

@ -41,8 +41,7 @@ in {
servers = mkOption { servers = mkOption {
type = attrsOf lspOptions; type = attrsOf lspOptions;
default = {}; default = {};
example = '' example = {
{
"*" = { "*" = {
root_markers = [".git"]; root_markers = [".git"];
capabilities = { capabilities = {
@ -57,8 +56,7 @@ in {
"clangd" = { "clangd" = {
filetypes = ["c"]; filetypes = ["c"];
}; };
} };
'';
description = '' description = ''
LSP configurations that will be managed using `vim.lsp.config()` and related LSP configurations that will be managed using `vim.lsp.config()` and related
utilities added in Neovim 0.11. LSPs defined here will be added to the utilities added in Neovim 0.11. LSPs defined here will be added to the

View file

@ -36,7 +36,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Assembly LSP server to use"; description = ''
Assembly LSP server to use. Customization of the servers can be done
via [](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -91,7 +91,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Astro LSP server to use"; description = ''
Astro LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -57,7 +57,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Bash LSP server to use"; description = ''
Bash LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -197,7 +197,10 @@ in {
enable = mkEnableOption "clang LSP support" // {default = config.vim.lsp.enable;}; enable = mkEnableOption "clang LSP support" // {default = config.vim.lsp.enable;};
servers = mkOption { servers = mkOption {
description = "The clang LSP server to use"; description = ''
The clang LSP server to use. Customization of the servers can be done
via [](#opt-vim.lsp.servers).
'';
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
}; };

View file

@ -37,7 +37,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Clojure LSP server to use"; description = ''
Clojure LSP server to use. Customization of the servers can be done
via [](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -185,7 +185,10 @@ in {
lsp = { lsp = {
enable = mkEnableOption "C# LSP support" // {default = config.vim.lsp.enable;}; enable = mkEnableOption "C# LSP support" // {default = config.vim.lsp.enable;};
servers = mkOption { servers = mkOption {
description = "C# LSP server to use"; description = ''
C# LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
}; };

View file

@ -76,7 +76,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServer; default = defaultServer;
description = "CSS LSP server to use"; description = ''
CSS LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -54,7 +54,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Dart LSP server to use"; description = ''
Dart LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -65,7 +65,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Elixir LSP server to use"; description = ''
Elixir LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -74,7 +74,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServer; default = defaultServer;
description = "F# LSP server to use"; description = ''
F# LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
format = { format = {

View file

@ -37,7 +37,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Gleam LSP server to use"; description = ''
Gleam LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -97,7 +97,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Go LSP server to use"; description = ''
Go LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -78,7 +78,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Haskell LSP server to use"; description = ''
Haskell LSP server to use. Customization of the servers can be done
via [](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -44,7 +44,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "HCL LSP server to use"; description = ''
HCL LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -53,7 +53,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Helm LSP server to use"; description = ''
Helm LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -60,7 +60,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "HTML LSP server to use"; description = ''
HTML LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -74,7 +74,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Java LSP server to use"; description = ''
Java LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -51,7 +51,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "JSON LSP server to use"; description = ''
JSON LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -39,7 +39,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Just LSP server to use"; description = ''
Just LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -65,7 +65,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Kotlin LSP server to use"; description = ''
Kotlin LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -66,7 +66,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Lua LSP server to use"; description = ''
Lua LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
lazydev.enable = mkEnableOption "lazydev.nvim integration, useful for neovim plugin developers"; lazydev.enable = mkEnableOption "lazydev.nvim integration, useful for neovim plugin developers";

View file

@ -69,7 +69,10 @@ in {
enable = mkEnableOption "Markdown LSP support" // {default = config.vim.lsp.enable;}; enable = mkEnableOption "Markdown LSP support" // {default = config.vim.lsp.enable;};
servers = mkOption { servers = mkOption {
description = "Markdown LSP server to use"; description = ''
Markdown LSP server to use. Customization of the servers can be done
via [](#opt-vim.lsp.servers).
'';
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
}; };

View file

@ -61,7 +61,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Nim LSP server to use"; description = ''
Nim LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -100,7 +100,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Nix LSP server to use"; description = ''
Nix LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -48,7 +48,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Nu LSP server to use"; description = ''
Nu LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -76,7 +76,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "OCaml LSP server to use"; description = ''
OCaml LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -48,7 +48,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Odin LSP server to use"; description = ''
Odin LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -79,7 +79,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "PHP LSP server to use"; description = ''
PHP LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -250,7 +250,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Python LSP server to use"; description = ''
Python LSP server to use. Customization of the servers can be done
via [](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -48,7 +48,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "QML LSP server to use"; description = ''
QML LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -79,7 +79,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "R LSP server to use"; description = ''
R LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -79,7 +79,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Ruby LSP server to use"; description = ''
Ruby LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -80,7 +80,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "SQL LSP server to use"; description = ''
SQL LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -101,7 +101,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Svelte LSP server to use"; description = ''
Svelte LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -156,7 +156,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Tailwindcss LSP server to use"; description = ''
Tailwindcss LSP server to use. Customization of the servers can be
done via [](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -38,7 +38,10 @@ in {
servers = mkOption { servers = mkOption {
type = listOf (enum (attrNames servers)); type = listOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Terraform LSP server to use"; description = ''
Terraform LSP server to use. Customization of the servers can be done
via [](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -230,7 +230,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Typescript/Javascript LSP server to use"; description = ''
Typescript/Javascript LSP server to use. Customization of the servers
can be done via [](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -116,7 +116,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Typst LSP server to use"; description = ''
Typst LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };

View file

@ -75,7 +75,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Vala LSP server to use"; description = ''
Vala LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -39,7 +39,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "WGSL LSP server to use"; description = ''
WGSL LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -61,7 +61,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Yaml LSP server to use"; description = ''
Yaml LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };
}; };

View file

@ -69,7 +69,10 @@ in {
servers = mkOption { servers = mkOption {
type = singleOrListOf (enum (attrNames servers)); type = singleOrListOf (enum (attrNames servers));
default = defaultServers; default = defaultServers;
description = "Zig LSP server to use"; description = ''
Zig LSP server to use. Customization of the servers can be done via
[](#opt-vim.lsp.servers).
'';
}; };
}; };