{ 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; }; }) ]; }