forked from jan-leila/nix-config
		
	set up nix mcp server
This commit is contained in:
		
							parent
							
								
									0d2a3e26a8
								
							
						
					
					
						commit
						0d57fb08b1
					
				
					 5 changed files with 140 additions and 4 deletions
				
			
		|  | @ -62,7 +62,6 @@ nix multi user, multi system, configuration with `sops` secret management, `home | |||
| - Create Tor guard/relay server | ||||
| - migrate away from flakes and move to npins | ||||
| - whisper | ||||
| - nix mcp | ||||
| - zfs encryption FIDO2 2fa (look into shavee) | ||||
| - Secure Boot - https://github.com/nix-community/lanzaboote | ||||
| - rotate sops encryption keys periodically (and somehow sync between devices?) | ||||
|  |  | |||
|  | @ -68,7 +68,10 @@ in { | |||
|             go.enable = true; | ||||
| 
 | ||||
|             # claude development | ||||
|             claudeDev.enable = ai-tooling-enabled; | ||||
|             claudeDev = lib.mkIf ai-tooling-enabled { | ||||
|               enable = true; | ||||
|               mcp.nixos.enable = true; | ||||
|             }; | ||||
| 
 | ||||
|             # misc extensions | ||||
|             evenBetterToml.enable = true; | ||||
|  |  | |||
							
								
								
									
										94
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										94
									
								
								flake.lock
									
										
									
										generated
									
									
									
								
							|  | @ -1,5 +1,23 @@ | |||
| { | ||||
|   "nodes": { | ||||
|     "devshell": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": "nixpkgs" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1741473158, | ||||
|         "narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "devshell", | ||||
|         "rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "numtide", | ||||
|         "repo": "devshell", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "disko": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|  | @ -75,6 +93,24 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "flake-utils_2": { | ||||
|       "inputs": { | ||||
|         "systems": "systems_2" | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1731533236, | ||||
|         "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "numtide", | ||||
|         "repo": "flake-utils", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "home-manager": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|  | @ -110,6 +146,28 @@ | |||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "mcp-nixos": { | ||||
|       "inputs": { | ||||
|         "devshell": "devshell", | ||||
|         "flake-utils": "flake-utils", | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|       }, | ||||
|       "locked": { | ||||
|         "lastModified": 1755372538, | ||||
|         "narHash": "sha256-iWhsf1Myk6RyQ7IuNf4bWI3Sqq9pgmhKvEisCXtkxyw=", | ||||
|         "owner": "utensils", | ||||
|         "repo": "mcp-nixos", | ||||
|         "rev": "46b4d4d3d6421bfbadc415532ef74433871e1cda", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "utensils", | ||||
|         "repo": "mcp-nixos", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nix-darwin": { | ||||
|       "inputs": { | ||||
|         "nixpkgs": [ | ||||
|  | @ -153,7 +211,7 @@ | |||
|     }, | ||||
|     "nix-vscode-extensions": { | ||||
|       "inputs": { | ||||
|         "flake-utils": "flake-utils", | ||||
|         "flake-utils": "flake-utils_2", | ||||
|         "nixpkgs": [ | ||||
|           "nixpkgs" | ||||
|         ] | ||||
|  | @ -189,6 +247,22 @@ | |||
|       } | ||||
|     }, | ||||
|     "nixpkgs": { | ||||
|       "locked": { | ||||
|         "lastModified": 1722073938, | ||||
|         "narHash": "sha256-OpX0StkL8vpXyWOGUD6G+MA26wAXK6SpT94kLJXo6B4=", | ||||
|         "owner": "NixOS", | ||||
|         "repo": "nixpkgs", | ||||
|         "rev": "e36e9f57337d0ff0cf77aceb58af4c805472bfae", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "NixOS", | ||||
|         "ref": "nixpkgs-unstable", | ||||
|         "repo": "nixpkgs", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "nixpkgs_2": { | ||||
|       "locked": { | ||||
|         "lastModified": 1755615617, | ||||
|         "narHash": "sha256-HMwfAJBdrr8wXAkbGhtcby1zGFvs+StOp19xNsbqdOg=", | ||||
|  | @ -211,11 +285,12 @@ | |||
|         "flake-compat": "flake-compat", | ||||
|         "home-manager": "home-manager", | ||||
|         "impermanence": "impermanence", | ||||
|         "mcp-nixos": "mcp-nixos", | ||||
|         "nix-darwin": "nix-darwin", | ||||
|         "nix-syncthing": "nix-syncthing", | ||||
|         "nix-vscode-extensions": "nix-vscode-extensions", | ||||
|         "nixos-hardware": "nixos-hardware", | ||||
|         "nixpkgs": "nixpkgs", | ||||
|         "nixpkgs": "nixpkgs_2", | ||||
|         "secrets": "secrets", | ||||
|         "sops-nix": "sops-nix", | ||||
|         "steam-fetcher": "steam-fetcher" | ||||
|  | @ -291,6 +366,21 @@ | |||
|         "repo": "default", | ||||
|         "type": "github" | ||||
|       } | ||||
|     }, | ||||
|     "systems_2": { | ||||
|       "locked": { | ||||
|         "lastModified": 1681028828, | ||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", | ||||
|         "type": "github" | ||||
|       }, | ||||
|       "original": { | ||||
|         "owner": "nix-systems", | ||||
|         "repo": "default", | ||||
|         "type": "github" | ||||
|       } | ||||
|     } | ||||
|   }, | ||||
|   "root": "root", | ||||
|  |  | |||
|  | @ -76,6 +76,12 @@ | |||
|       url = "github:nix-community/steam-fetcher"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
| 
 | ||||
|     # MCP NixOS server for Claude Dev | ||||
|     mcp-nixos = { | ||||
|       url = "github:utensils/mcp-nixos"; | ||||
|       inputs.nixpkgs.follows = "nixpkgs"; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   outputs = { | ||||
|  | @ -157,6 +163,8 @@ | |||
|           disko | ||||
|           # for viewing dconf entries | ||||
|           dconf-editor | ||||
|           # for MCP NixOS server support in development | ||||
|           inputs.mcp-nixos.packages.${system}.default | ||||
|         ]; | ||||
| 
 | ||||
|         SOPS_AGE_KEY_DIRECTORY = import ./const/sops_age_key_directory.nix; | ||||
|  |  | |||
|  | @ -2,10 +2,27 @@ | |||
|   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); | ||||
| 
 | ||||
|   mcpServersConfig = lib.mkMerge [ | ||||
|     (lib.mkIf anyProfileHasMcpNixos { | ||||
|       nixos = { | ||||
|         command = "${mcp-nixos}/bin/mcp-nixos"; | ||||
|       }; | ||||
|     }) | ||||
|   ]; | ||||
| in { | ||||
|   options.programs.vscode.profiles = lib.mkOption { | ||||
|     type = lib.types.attrsOf (lib.types.submodule ({config, ...}: { | ||||
|  | @ -15,6 +32,12 @@ in { | |||
|           extension = lib.mkPackageOption pkgsRepository "claude-dev" { | ||||
|             default = ["saoudrizwan" "claude-dev"]; | ||||
|           }; | ||||
| 
 | ||||
|           mcp = { | ||||
|             nixos = { | ||||
|               enable = lib.mkEnableOption "enable NixOS MCP server for Claude Dev"; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
|       config = lib.mkIf config.extraExtensions.claudeDev.enable { | ||||
|  | @ -24,4 +47,17 @@ in { | |||
|       }; | ||||
|     })); | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf anyProfileHasMcpNixos { | ||||
|     home.file."${config.xdg.configHome}/VSCodium/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json" = { | ||||
|       text = builtins.toJSON { | ||||
|         mcpServers = mcpServersConfig; | ||||
|       }; | ||||
|       force = true; | ||||
|     }; | ||||
| 
 | ||||
|     home.packages = [ | ||||
|       mcp-nixos | ||||
|     ]; | ||||
|   }; | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue