1{ flake-utils }: {2 fleetConfiguration = { data, nixpkgs, hosts, ... }@allConfig:3 let4 hostNames = nixpkgs.lib.attrNames hosts;5 config = builtins.removeAttrs allConfig [ "nixpkgs" "data" ];6 fleetLib = import ./fleetLib.nix {7 inherit nixpkgs hostNames;8 };9 in10 nixpkgs.lib.genAttrs flake-utils.lib.defaultSystems (system:11 let12 root = nixpkgs.lib.evalModules {13 modules = (import ../modules/fleet/_modules.nix) ++ [ config data ];14 specialArgs = {15 inherit nixpkgs fleetLib;16 };17 };18 failedAssertions = map (x: x.message) (nixpkgs.lib.filter (x: !x.assertion) root.config.assertions);19 rootAssertWarn =20 if failedAssertions != [ ]21 then throw "Failed assertions:\n${nixpkgs.lib.concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"22 else nixpkgs.lib.showWarnings root.config.warnings root;23 configuredHosts = rootAssertWarn.config.hosts;24 configuredSecrets = rootAssertWarn.config.secrets;25 configuredSystems = configuredSystemsWithExtraModules [ ];26 configuredSystemsWithExtraModules = extraModules: nixpkgs.lib.listToAttrs (27 map28 (29 name: {30 inherit name;31 value = nixpkgs.lib.nixosSystem {32 system = configuredHosts.${name}.system;33 modules = configuredHosts.${name}.modules ++ extraModules ++ [34 ({ ... }: {35 nixpkgs.system = system;36 nixpkgs.localSystem.system = system;37 nixpkgs.crossSystem = if system == configuredHosts.${name}.system then null else {38 system = configuredHosts.${name}.system;39 };40 })41 ];42 specialArgs = {43 inherit fleetLib;44 fleet = fleetLib.hostsToAttrs (host: configuredSystems.${host}.config);45 };46 };47 }48 )49 (builtins.attrNames rootAssertWarn.config.hosts)50 );51 in52 rec {53 inherit configuredHosts configuredSecrets configuredSystems;54 buildSystems = {55 toplevel = builtins.mapAttrs (_name: value: value.config.system.build.toplevel) (configuredSystemsWithExtraModules [ ]);56 sdImage = builtins.mapAttrs (_name: value: value.config.system.build.sdImage) (configuredSystemsWithExtraModules [57 (nixpkgs + "/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix")58 ]);59 installationCd = builtins.mapAttrs (_name: value: value.config.system.build.isoImage) (configuredSystemsWithExtraModules [60 (nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")61 ({ lib, ... }: {62 63 boot.supportedFilesystems = lib.mkForce [ "btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs" ];64 })65 ]);66 };67 });68}