a flake module to ease creating and managing multiple hosts in your nix flake.

refactor: reduce passing of the entire config

Changed files
+13 -10
+2 -2
flake-module.nix
··· 85 85 modules = [ ]; 86 86 specialArgs = { }; 87 87 }; 88 - defaultText = '' 88 + defaultText = '' 89 89 class: { 90 90 modules = [ ]; 91 91 specialArgs = { }; ··· 184 184 185 185 system = mkOption { 186 186 type = types.str; 187 - default = constructSystem cfg config.arch config.class; 187 + default = constructSystem cfg.additionalClasses config.arch config.class; 188 188 example = "aarch64-darwin"; 189 189 description = "The system to be used for the host"; 190 190 internal = true; # this should ideally be set by easy-hosts
+11 -8
lib.nix
··· 29 29 classToND = class: if (class == "darwin") then "darwin" else "nixos"; 30 30 31 31 redefineClass = 32 - cfg: class: ({ linux = "nixos"; } // (cfg.additionalClasses or { })).${class} or class; 32 + additionalClasses: class: ({ linux = "nixos"; } // additionalClasses).${class} or class; 33 33 34 34 constructSystem = 35 - config: arch: class: 35 + additionalClasses: arch: class: 36 36 let 37 - class' = redefineClass config class; 37 + class' = redefineClass additionalClasses class; 38 38 os = classToOS class'; 39 39 in 40 40 "${arch}-${os}"; ··· 194 194 let 195 195 # memoize the class and perClass values so we don't have to recompute them 196 196 perClass = easyHostsConfig.perClass hostConfig.class; 197 - class = redefineClass easyHostsConfig hostConfig.class; 197 + class = redefineClass easyHostsConfig.additionalClasses hostConfig.class; 198 198 in 199 199 toHostOutput { 200 200 inherit name class; ··· 229 229 ]; 230 230 231 231 normaliseHost = 232 - cfg: system: path: 232 + additionalClasses: system: path: 233 233 let 234 234 inherit (splitSystem system) arch class; 235 235 in 236 236 { 237 237 inherit arch class path; 238 - system = constructSystem cfg arch class; 238 + system = constructSystem additionalClasses arch class; 239 239 }; 240 240 241 241 normaliseHosts = 242 242 cfg: hosts: 243 243 if (cfg.onlySystem == null) then 244 244 pipe hosts [ 245 - (mapAttrs (system: mapAttrs (name: _: normaliseHost cfg system "${cfg.path}/${system}/${name}"))) 245 + (mapAttrs ( 246 + system: 247 + mapAttrs (name: _: normaliseHost cfg.additionalClasses system "${cfg.path}/${system}/${name}") 248 + )) 246 249 247 250 attrValues 248 251 foldAttrsMerge 249 252 ] 250 253 else 251 - mapAttrs (name: _: normaliseHost cfg cfg.onlySystem "${cfg.path}/${name}") hosts; 254 + mapAttrs (name: _: normaliseHost cfg.additionalClasses cfg.onlySystem "${cfg.path}/${name}") hosts; 252 255 253 256 buildHosts = 254 257 cfg: