1{flake-utils}: {2 fleetConfiguration = {3 data,4 nixpkgs,5 hosts,6 ...7 } @ allConfig: let8 hostNames = nixpkgs.lib.attrNames hosts;9 config = builtins.removeAttrs allConfig ["nixpkgs" "data"];10 fleetLib = import ./fleetLib.nix {11 inherit nixpkgs hostNames;12 };13 in14 let15 withData = data: rec {16 root = nixpkgs.lib.evalModules {17 modules = (import ../modules/fleet/_modules.nix) ++ [config data];18 specialArgs = {19 inherit nixpkgs fleetLib;20 };21 };22 failedAssertions = map (x: x.message) (nixpkgs.lib.filter (x: !x.assertion) root.config.assertions);23 rootAssertWarn =24 if failedAssertions != []25 then throw "Failed assertions:\n${nixpkgs.lib.concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"26 else nixpkgs.lib.showWarnings root.config.warnings root;27 configuredHosts = rootAssertWarn.config.hosts;28 configuredSecrets = rootAssertWarn.config.secrets;29 configuredSystems = configuredSystemsWithExtraModules [];30 configuredSystemsWithExtraModules = extraModules:31 nixpkgs.lib.listToAttrs (32 map33 (34 name: {35 inherit name;36 value = nixpkgs.lib.nixosSystem {37 system = configuredHosts.${name}.system;38 modules = configuredHosts.${name}.modules ++ extraModules;39 specialArgs = {40 inherit fleetLib;41 fleet = fleetLib.hostsToAttrs (host: configuredSystems.${host}.config);42 };43 };44 }45 )46 (builtins.attrNames rootAssertWarn.config.hosts)47 );48 buildSystems = {localSystem}: let49 buildConfigurationModule = {config, ...}: {50 51 52 nixpkgs.buildPlatform.system = localSystem;53 };54 in {55 toplevel = builtins.mapAttrs (_name: value: value.config.system.build.toplevel) (configuredSystemsWithExtraModules [56 buildConfigurationModule57 ({...}: {58 buildTarget = "toplevel";59 })60 ]);61 sdImage = builtins.mapAttrs (_name: value: value.config.system.build.sdImage) (configuredSystemsWithExtraModules [62 buildConfigurationModule63 64 ({...}: {65 buildTarget = "sd-image";66 })67 ]);68 installationCd = builtins.mapAttrs (_name: value: value.config.system.build.isoImage) (configuredSystemsWithExtraModules [69 buildConfigurationModule70 (nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")71 ({lib, ...}: {72 buildTarget = "installation-cd";73 74 boot.supportedFilesystems = lib.mkForce ["btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs"];75 })76 ]);77 };78 configUnchecked = root.config;79 };80 defaultData = withData data;81 in rec {82 inherit (defaultData) configuredHosts configuredSecrets configuredSystems buildSystems configUnchecked;83 injectData = data: let84 injectedData = withData data;85 in {86 inherit (injectedData) configuredHosts configuredSecrets configuredSystems buildSystems configUnchecked;87 };88 };89}