{ lib, nixpkgs, inputs, self, ... }: rec { getDirs = parentDir: lib.mapAttrs (n: v: (import "${parentDir}/${n}")) ( lib.filterAttrs (n: v: v == "directory") (builtins.readDir parentDir) ); loadInstances = dir: extraModules: lib.mapAttrs (n: v: loadInstance extraModules v (getDirs dir)) (getDirs dir); loadInstance = extraModules: instance: instanceConfigs: nixpkgs.lib.nixosSystem { specialArgs = { inherit inputs instanceConfigs; instanceConfig = instance; }; modules = instance.modules ++ extraModules ++ [ { nixpkgs.overlays = [ self.overlays.default ]; nixpkgs.config.allowUnfree = true; networking.hostName = instance.hostName; } ]; }; }