{ 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`."; }; # TODO: make nullable? cargoPackage = mkPackageOption pkgs "cargo" { }; installRustc = mkOption { type = with types; nullOr bool; default = null; example = true; description = "Whether to install `rustc`."; }; # TODO: make nullable rustcPackage = mkPackageOption pkgs "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); }; }