{ lib ? import "${(import ../npins).nixpkgs}/lib", npins ? import ../npins, ... }: ( let # read the current directorys files and pipe the result through a list of functions machines = builtins.listToAttrs ( lib.pipe (builtins.readDir ./.) [ # convert to a list containing just the attribute names (builtins.attrNames) # drop "default.nix" from the list (builtins.filter (name: name != "default.nix")) # convert each list-element containing its file-name to an element containing the file's content (builtins.map (name: { # remove '.nix' suffix name = lib.removeSuffix ".nix" name; value = import ./${name}; })) ] ); nixosModules = import ../nixosModules { inherit lib; }; overlays = import ../overlays { inherit npins; }; specialArgs = { inherit npins machines nixosConfigurations; resources = import ../resources { inherit npins lib; }; sopsSecrets = import ../secrets { inherit npins lib; }; }; nixosConfigurations = lib.flip builtins.mapAttrs machines ( machineName: machineConfig: let nixpkgs = if !machineConfig.nixpkgsStable then npins.nixpkgsUnstable else npins.nixpkgs; in import "${nixpkgs}/nixos/lib/eval-config.nix" { system = machineConfig.system; specialArgs = specialArgs // { machineConfig = machineConfig // { inherit machineName; }; }; modules = lib.flatten [ { nixpkgs.overlays = overlays.default; } nixosModules.default machineConfig.nixosConfiguration ]; } ); in nixosConfigurations )