git.delta.rocks / jrsonnet / refs/commits / 89d35672dcfd

difftreelog

source

lib/default.nix3.8 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    # Top-level arg is the builder system (not the target system!)15    nixpkgs.lib.genAttrs flake-utils.lib.defaultSystems (system: let16      withData = data: rec {17        root = nixpkgs.lib.evalModules {18          modules = (import ../modules/fleet/_modules.nix) ++ [config data];19          specialArgs = {20            inherit nixpkgs fleetLib;21          };22        };23        failedAssertions = map (x: x.message) (nixpkgs.lib.filter (x: !x.assertion) root.config.assertions);24        rootAssertWarn =25          if failedAssertions != []26          then throw "Failed assertions:\n${nixpkgs.lib.concatStringsSep "\n" (map (x: "- ${x}") failedAssertions)}"27          else nixpkgs.lib.showWarnings root.config.warnings root;28        configuredHosts = rootAssertWarn.config.hosts;29        configuredSecrets = rootAssertWarn.config.secrets;30        configuredSystems = configuredSystemsWithExtraModules [];31        configuredSystemsWithExtraModules = extraModules:32          nixpkgs.lib.listToAttrs (33            map34            (35              name: {36                inherit name;37                value = nixpkgs.lib.nixosSystem {38                  system = configuredHosts.${name}.system;39                  modules =40                    configuredHosts.${name}.modules41                    ++ extraModules42                    ++ [43                      ({...}: {44                        nixpkgs.system = system;45                        nixpkgs.localSystem.system = system;46                        nixpkgs.crossSystem =47                          if system == configuredHosts.${name}.system48                          then null49                          else {50                            system = configuredHosts.${name}.system;51                          };52                      })53                    ];54                  specialArgs = {55                    inherit fleetLib;56                    fleet = fleetLib.hostsToAttrs (host: configuredSystems.${host}.config);57                  };58                };59              }60            )61            (builtins.attrNames rootAssertWarn.config.hosts)62          );63        buildSystems = {64          toplevel = builtins.mapAttrs (_name: value: value.config.system.build.toplevel) (configuredSystemsWithExtraModules [65            ({...}: {66              buildTarget = "toplevel";67            })68          ]);69          sdImage = builtins.mapAttrs (_name: value: value.config.system.build.sdImage) (configuredSystemsWithExtraModules [70            #(nixpkgs + "/nixos/modules/installer/sd-card/sd-image-aarch64-installer.nix")71            ({...}: {72              buildTarget = "sd-image";73            })74          ]);75          installationCd = builtins.mapAttrs (_name: value: value.config.system.build.isoImage) (configuredSystemsWithExtraModules [76            (nixpkgs + "/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix")77            ({lib, ...}: {78              buildTarget = "installation-cd";79              # Needed for https://github.com/NixOS/nixpkgs/issues/5895980              boot.supportedFilesystems = lib.mkForce ["btrfs" "reiserfs" "vfat" "f2fs" "xfs" "ntfs" "cifs"];81            })82          ]);83        };84        configUnchecked = root.config;85      };86      defaultData = withData data;87    in rec {88      inherit (defaultData) configuredHosts configuredSecrets configuredSystems buildSystems configUnchecked;89      injectData = data: let90        injectedData = withData data;91      in {92        inherit (injectedData) configuredHosts configuredSecrets configuredSystems buildSystems configUnchecked;93      };94    });95}