git.delta.rocks / jrsonnet / refs/commits / 624fe7e9f18b

difftreelog

source

lib/default.nix3.5 KiBsourcehistory
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            # Equivalent to nixpkgs.localSystem51            # nixpkgs.system = localSystem;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            #(nixpkgs + "/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix")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              # Needed for https://github.com/NixOS/nixpkgs/issues/5895974              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}