plugins/lsp: enable auto-installing rustc and cargo

This commit is contained in:
Gaetan Lepage 2023-11-23 13:53:22 +01:00 committed by Gaétan Lepage
parent c68f2d6270
commit 0b1984ed81
4 changed files with 102 additions and 4 deletions

View file

@ -528,6 +528,7 @@ in {
./efmls-configs.nix ./efmls-configs.nix
./nixd.nix ./nixd.nix
./pylsp.nix ./pylsp.nix
./rust-analyzer.nix
./svelte.nix ./svelte.nix
]; ];
} }

View file

@ -0,0 +1,81 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
cfg = config.plugins.lsp.servers.rust-analyzer;
in {
options.plugins.lsp.servers.rust-analyzer = {
# https://github.com/nix-community/nixvim/issues/674
installCargo = mkOption {
type = with types; nullOr bool;
default = null;
example = true;
description = "Whether to install `cargo`.";
};
cargoPackage = mkOption {
type = types.package;
default = pkgs.cargo;
description = "Which package to use for `cargo`.";
};
installRustc = mkOption {
type = with types; nullOr bool;
default = null;
example = true;
description = "Whether to install `rustc`.";
};
rustcPackage = mkOption {
type = types.package;
default = pkgs.rustc;
description = "Which package to use for `rustc`.";
};
};
config = mkIf cfg.enable {
warnings =
(
optional
(cfg.installCargo == null)
''
`rust_analyzer` relies on `cargo`.
- Set `plugins.lsp.servers.rust-analyzer.installCargo = true` to install it automatically
with Nixvim.
You can customize which package to install by changing
`plugins.lsp.servers.rust-analyzer.cargoPackage`.
- Set `plugins.lsp.servers.rust-analyzer.installCargo = false` to not have it install
through Nixvim.
By doing so, you will dismiss this warning.
''
)
++ (
optional
(cfg.installRustc == null)
''
`rust_analyzer` relies on `rustc`.
- Set `plugins.lsp.servers.rust-analyzer.installRustc = true` to install it automatically
with Nixvim.
You can customize which package to install by changing
`plugins.lsp.servers.rust-analyzer.rustcPackage`.
- Set `plugins.lsp.servers.rust-analyzer.installRustc = false` to not have it install
through Nixvim.
By doing so, you will dismiss this warning.
''
);
extraPackages = with pkgs;
(
optional
((isBool cfg.installCargo) && cfg.installCargo)
cfg.cargoPackage
)
++ (
optional
((isBool cfg.installRustc) && cfg.installRustc)
cfg.rustcPackage
);
};
}

View file

@ -28,7 +28,11 @@
lsp = { lsp = {
enable = true; enable = true;
servers = { servers = {
rust-analyzer.enable = true; rust-analyzer = {
enable = true;
installCargo = true;
installRustc = true;
};
rnix-lsp.enable = true; rnix-lsp.enable = true;
}; };
}; };
@ -75,7 +79,11 @@
enable = true; enable = true;
servers = { servers = {
rnix-lsp.enable = true; rnix-lsp.enable = true;
rust-analyzer.enable = true; rust-analyzer = {
enable = true;
installCargo = true;
installRustc = true;
};
jsonls.enable = true; jsonls.enable = true;
}; };
}; };

View file

@ -43,7 +43,11 @@
installLanguageServer = false; installLanguageServer = false;
}; };
nil_ls.enable = true; nil_ls.enable = true;
rust-analyzer.enable = true; rust-analyzer = {
enable = true;
installCargo = true;
installRustc = true;
};
ruff-lsp = { ruff-lsp = {
enable = true; enable = true;
extraOptions = { extraOptions = {
@ -112,7 +116,11 @@
pyright.enable = true; pyright.enable = true;
rnix-lsp.enable = true; rnix-lsp.enable = true;
ruff-lsp.enable = true; ruff-lsp.enable = true;
rust-analyzer.enable = true; rust-analyzer = {
enable = true;
installCargo = true;
installRustc = true;
};
sourcekit.enable = true; sourcekit.enable = true;
svelte.enable = true; svelte.enable = true;
tailwindcss.enable = true; tailwindcss.enable = true;