git.delta.rocks / jrsonnet / refs/commits / 7e2e5c591e04

difftreelog

source

lib/default.nix3.9 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  in let14    root = nixpkgs.lib.evalModules {15      modules = (import ../modules/fleet/_modules.nix) ++ [config data];16      specialArgs = {17        inherit nixpkgs fleetLib;18      };19    };20    failedAssertions = map (x: x.message) (nixpkgs.lib.filter (x: !x.assertion) root.config.assertions);21    checkedRoot =22      if failedAssertions != []23      then throw "Fleet failed assertions:\n${nixpkgs.lib.concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"24      else nixpkgs.lib.showWarnings root.config.warnings root;25    withData = {26      root,27      data,28    }: rec {29      configuredHosts = root.config.hosts;30      configuredUncheckedHosts = root.config.hosts;31      configuredSystems = configuredSystemsWithExtraModules [];32      configuredSystemsWithExtraModules = extraModules:33        nixpkgs.lib.listToAttrs (34          map35          (36            name: {37              inherit name;38              value = nixpkgs.lib.nixosSystem {39                system = configuredHosts.${name}.system;40                modules = configuredHosts.${name}.modules ++ extraModules;41                specialArgs = {42                  inherit fleetLib;43                  fleet = fleetLib.hostsToAttrs (host: configuredSystems.${host}.config);44                };45              };46            }47          )48          (builtins.attrNames root.config.hosts)49        );50      buildableSystems = {localSystem}: let51        buildConfigurationModule = {config, ...}: {52          # Equivalent to nixpkgs.localSystem53          # nixpkgs.system = localSystem;54          nixpkgs.buildPlatform.system = localSystem;55        };56      in57        configuredSystemsWithExtraModules [58          buildConfigurationModule59        ];60      buildSystems = {localSystem}: let61        buildConfigurationModule = {config, ...}: {62          # Equivalent to nixpkgs.localSystem63          # nixpkgs.system = localSystem;64          nixpkgs.buildPlatform.system = localSystem;65        };66      in {67        toplevel = builtins.mapAttrs (_name: value: value.config.system.build.toplevel) (configuredSystemsWithExtraModules [68          buildConfigurationModule69          ({...}: {70            buildTarget = "toplevel";71          })72        ]);73        sdImage = builtins.mapAttrs (_name: value: value.config.system.build.sdImage) (configuredSystemsWithExtraModules [74          buildConfigurationModule75          #(nixpkgs + "/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix")76          ({...}: {77            buildTarget = "sd-image";78          })79        ]);80        installationCd = builtins.mapAttrs (_name: value: value.config.system.build.isoImage) (configuredSystemsWithExtraModules [81          buildConfigurationModule82          (nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")83          ({lib, ...}: {84            buildTarget = "installation-cd";85            # Needed for https://github.com/NixOS/nixpkgs/issues/5895986            boot.supportedFilesystems = lib.mkForce ["btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs"];87          })88        ]);89      };90      configUnchecked = root.config;91    };92    defaultData = withData {93      inherit data;94      root = checkedRoot;95    };96    uncheckedData = withData {inherit data root;};97  in rec {98    inherit (defaultData) configuredHosts configuredSystems buildSystems configUnchecked buildableSystems;99    unchecked = {100      inherit (uncheckedData) configuredHosts configuredSystems buildSystems configUnchecked buildableSystems;101    };102    injectData = data: let103      injectedData = withData data;104    in {105      inherit (injectedData) configuredHosts configuredSystems buildSystems configUnchecked;106    };107  };108}