Compare commits
	
		
			2 commits
		
	
	
		
			2a5e75de77
			...
			4b8609385a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 4b8609385a | ||
|   | 6f35544dcd | 
					 7 changed files with 210 additions and 0 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| !**/.keep | ||||
| result | ||||
| flake.lock | ||||
							
								
								
									
										174
									
								
								flake.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								flake.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,174 @@ | |||
| { | ||||
|   inputs.flake-utils.url = "github:numtide/flake-utils"; | ||||
| 
 | ||||
|   outputs = { | ||||
|     self, | ||||
|     nixpkgs, | ||||
|     flake-utils, | ||||
|   }: let | ||||
|     mapOverlayOverride = namespace: overlay: final: prev: let | ||||
|       overlayPkgs = overlay final prev; | ||||
|     in | ||||
|       { | ||||
|         "${namespace}" = builtins.removeAttrs overlayPkgs ["override"]; | ||||
|       } | ||||
|       // (overlayPkgs.override or {}); | ||||
|   in | ||||
|     flake-utils.lib.eachDefaultSystem (system: { | ||||
|       formatter = (import nixpkgs {inherit system;}).alejandra; | ||||
|     }) | ||||
|     // { | ||||
|       overlays = let | ||||
|         overlay = mapOverlayOverride "trivium" (import ./pkgs); | ||||
|       in { | ||||
|         default = overlay; | ||||
|         trivium = overlay; | ||||
|       }; | ||||
| 
 | ||||
|       lib = { | ||||
|         mkSystemFlake = { | ||||
|           flakes, | ||||
|           system, | ||||
|           formatter ? "alejandra", | ||||
|           localOverlayPath ? null, | ||||
|           nixpkgsConfigPath ? null, | ||||
|           nixosSourcePath ? null, | ||||
|           nixosPlatformsPath ? | ||||
|             if nixosSourcePath != null | ||||
|             then nixosSourcePath + /platform | ||||
|             else null, | ||||
|           hmSourcePath ? null, | ||||
|           hmPlatformsPath ? | ||||
|             if hmSourcePath != null | ||||
|             then hmSourcePath + /platform | ||||
|             else null, | ||||
|         }: let | ||||
|           optionalFlake = name: | ||||
|             if flakes ? "${name}" | ||||
|             then flakes.${name} | ||||
|             else null; | ||||
| 
 | ||||
|           requireFlake = name: | ||||
|             if flakes ? "${name}" | ||||
|             then flakes.${name} | ||||
|             else throw "Required flake input '${name}' is required but was not provided"; | ||||
| 
 | ||||
|           nur = optionalFlake "nur"; | ||||
|           nixpkgs = requireFlake "nixpkgs"; | ||||
|           unstable = optionalFlake "unstable"; | ||||
| 
 | ||||
|           home-manager = | ||||
|             if hmSourcePath != null | ||||
|             then requireFlake "home-manager" | ||||
|             else null; | ||||
| 
 | ||||
|           pkgs = importPkgs nixpkgs; | ||||
| 
 | ||||
|           importPkgs = flake: | ||||
|             import flake ({ | ||||
|                 inherit system; | ||||
| 
 | ||||
|                 config = import ./pkgs/config nixpkgs.lib; | ||||
|                 overlays = let | ||||
|                   conditions = [ | ||||
|                     { | ||||
|                       overlay = nur.overlays.default; | ||||
|                       condition = nur != null; | ||||
|                     } | ||||
|                     # NB: Preserve the relative order | ||||
|                     { | ||||
|                       overlay = self.overlays.trivium; | ||||
|                       condition = true; | ||||
|                     } | ||||
|                     { | ||||
|                       overlay = flakes.self.overlays.default; | ||||
|                       condition = true; | ||||
|                     } | ||||
|                   ]; | ||||
|                 in | ||||
|                   builtins.map (cond: cond.overlay) (builtins.filter (cond: cond.condition) conditions); | ||||
|               } | ||||
|               // ( | ||||
|                 if nixpkgsConfigPath != null | ||||
|                 then { | ||||
|                   config = import nixpkgsConfigPath {inherit (nixpkgs) lib;}; | ||||
|                 } | ||||
|                 else {} | ||||
|               )); | ||||
| 
 | ||||
|           inherit (pkgs.trivium.lib) importAll; | ||||
|         in | ||||
|           with pkgs.lib; | ||||
|             { | ||||
|               formatter.${system} = | ||||
|                 if formatter == "alejandra" | ||||
|                 then pkgs.alejandra | ||||
|                 else if formatter == "nixpkgs-fmt" | ||||
|                 then pkgs.nixpkgs-fmt | ||||
|                 else throw "Unknown formatter: '${formatter}'"; | ||||
| 
 | ||||
|               packages.${system} = pkgs.local; | ||||
| 
 | ||||
|               overlays.default = final: prev: let | ||||
|                 overlay = | ||||
|                   if localOverlayPath != null | ||||
|                   then import localOverlayPath | ||||
|                   else (final: prev: {}); | ||||
|               in | ||||
|                 mapOverlayOverride "local" overlay final prev | ||||
|                 // optionalAttrs (unstable != null) { | ||||
|                   unstable = importPkgs unstable; | ||||
|                 }; | ||||
|             } | ||||
|             // optionalAttrs (nixosSourcePath != null) { | ||||
|               nixosConfigurations = let | ||||
|                 nixosSystem = {modules}: | ||||
|                   makeOverridable nixpkgs.lib.nixosSystem { | ||||
|                     inherit modules pkgs system; | ||||
| 
 | ||||
|                     specialArgs = { | ||||
|                       inherit flakes; | ||||
|                     }; | ||||
|                   }; | ||||
| 
 | ||||
|                 hostConfig = platform: | ||||
|                   nixosSystem { | ||||
|                     modules = [ | ||||
|                       ./nixos | ||||
|                       nixosSourcePath | ||||
|                       platform | ||||
|                     ]; | ||||
|                   }; | ||||
|               in | ||||
|                 mapAttrs (_: hostConfig) (importAll {root = nixosPlatformsPath;}); | ||||
|             } | ||||
|             // optionalAttrs (hmSourcePath != null) { | ||||
|               homeConfigurations = let | ||||
|                 registry = {...}: { | ||||
|                   config.nix.registry = | ||||
|                     mapAttrs | ||||
|                     (_: value: {flake = value;}) | ||||
|                     flakes; | ||||
|                 }; | ||||
| 
 | ||||
|                 home = name: platform: | ||||
|                   home-manager.lib.homeManagerConfiguration { | ||||
|                     inherit pkgs; | ||||
| 
 | ||||
|                     extraSpecialArgs = { | ||||
|                       inherit flakes; | ||||
|                     }; | ||||
| 
 | ||||
|                     modules = [ | ||||
|                       ./hm | ||||
|                       hmSourcePath | ||||
|                       platform | ||||
|                       registry | ||||
|                     ]; | ||||
|                   }; | ||||
|               in | ||||
|                 mapAttrs home (importAll {root = hmPlatformsPath;}); | ||||
|             }; | ||||
|       }; | ||||
|     }; | ||||
| } | ||||
							
								
								
									
										1
									
								
								hm/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								hm/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| {} | ||||
							
								
								
									
										1
									
								
								nixos/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								nixos/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| {} | ||||
							
								
								
									
										8
									
								
								pkgs/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								pkgs/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| final: prev: | ||||
| with prev.lib; let | ||||
|   inherit (final) callPackage; | ||||
| in { | ||||
|   lib = callPackage ./lib {}; | ||||
| 
 | ||||
|   override = {}; | ||||
| } | ||||
							
								
								
									
										3
									
								
								pkgs/lib/default.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								pkgs/lib/default.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,3 @@ | |||
| {callPackage}: { | ||||
|   importAll = callPackage ./importAll.nix {}; | ||||
| } | ||||
							
								
								
									
										20
									
								
								pkgs/lib/importAll.nix
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								pkgs/lib/importAll.nix
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| {lib}: { | ||||
|   root, | ||||
|   exclude ? [], | ||||
| }: | ||||
| with builtins; | ||||
| with lib; | ||||
| # http://chriswarbo.net/projects/nixos/useful_hacks.html | ||||
|   let | ||||
|     basename = removeSuffix ".nix"; | ||||
| 
 | ||||
|     isMatch = name: type: | ||||
|       (hasSuffix ".nix" name || type == "directory") | ||||
|       && ! elem name (map basename exclude); | ||||
| 
 | ||||
|     entry = name: _: { | ||||
|       name = basename name; | ||||
|       value = import (root + "/${name}"); | ||||
|     }; | ||||
|   in | ||||
|     mapAttrs' entry (filterAttrs isMatch (readDir root)) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue