96 lines
3 KiB
Nix
96 lines
3 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
config,
|
|
inputs,
|
|
...
|
|
}: let
|
|
pkgsRepositories = pkgs.nix-vscode-extensions.forVSCodeVersion config.programs.vscode.package.version;
|
|
pkgsRepository = pkgsRepositories.open-vsx;
|
|
|
|
mcp-nixos = inputs.mcp-nixos.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
|
|
|
anyProfileHasMcpNixos = lib.any (
|
|
profile:
|
|
profile.extraExtensions.claudeDev.enable
|
|
&& profile.extraExtensions.claudeDev.mcp.nixos.enable
|
|
) (lib.attrValues config.programs.vscode.profiles);
|
|
|
|
anyProfileHasMcpEslint = lib.any (
|
|
profile:
|
|
profile.extraExtensions.claudeDev.enable
|
|
&& profile.extraExtensions.claudeDev.mcp.eslint.enable
|
|
) (lib.attrValues config.programs.vscode.profiles);
|
|
|
|
anyProfileHasMcpVitest = lib.any (
|
|
profile:
|
|
profile.extraExtensions.claudeDev.enable
|
|
&& profile.extraExtensions.claudeDev.mcp.vitest.enable
|
|
) (lib.attrValues config.programs.vscode.profiles);
|
|
|
|
anyProfileHasMcp = anyProfileHasMcpNixos || anyProfileHasMcpEslint || anyProfileHasMcpVitest;
|
|
in {
|
|
options.programs.vscode.profiles = lib.mkOption {
|
|
type = lib.types.attrsOf (lib.types.submodule ({config, ...}: {
|
|
options = {
|
|
extraExtensions.claudeDev = {
|
|
enable = lib.mkEnableOption "should the claude-dev extension for vscode be enabled";
|
|
extension = lib.mkPackageOption pkgsRepository "claude-dev" {
|
|
default = ["saoudrizwan" "claude-dev"];
|
|
};
|
|
|
|
mcp = {
|
|
nixos = {
|
|
enable = lib.mkEnableOption "enable NixOS MCP server for Claude Dev";
|
|
};
|
|
eslint = {
|
|
enable = lib.mkEnableOption "enable ESLint MCP server for Claude Dev";
|
|
};
|
|
vitest = {
|
|
enable = lib.mkEnableOption "enable Vitest MCP server for Claude Dev";
|
|
};
|
|
};
|
|
};
|
|
};
|
|
config = lib.mkIf config.extraExtensions.claudeDev.enable {
|
|
extensions = [
|
|
config.extraExtensions.claudeDev.extension
|
|
];
|
|
};
|
|
}));
|
|
};
|
|
|
|
config = lib.mkMerge [
|
|
(lib.mkIf anyProfileHasMcpNixos {
|
|
home.packages = [
|
|
mcp-nixos
|
|
];
|
|
})
|
|
|
|
(lib.mkIf anyProfileHasMcp {
|
|
home.file."${config.xdg.configHome}/VSCodium/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json" = {
|
|
text = builtins.toJSON {
|
|
mcpServers =
|
|
(lib.optionalAttrs anyProfileHasMcpNixos {
|
|
nixos = {
|
|
command = "${mcp-nixos}/bin/mcp-nixos";
|
|
};
|
|
})
|
|
// (lib.optionalAttrs anyProfileHasMcpEslint {
|
|
eslint = {
|
|
command = "${pkgs.nodejs}/bin/npx";
|
|
args = ["-y" "@eslint/mcp@latest"];
|
|
};
|
|
})
|
|
// (lib.optionalAttrs anyProfileHasMcpVitest {
|
|
vitest = {
|
|
command = "${pkgs.nodejs}/bin/npx";
|
|
args = ["-y" "@djankies/vitest-mcp"];
|
|
};
|
|
});
|
|
};
|
|
force = true;
|
|
};
|
|
})
|
|
];
|
|
}
|