{ inputs, ... }: let inherit (inputs) nixpkgs; inherit (nixpkgs) lib; in { configurations = lib.mapAttrs (dir: _: let inherit (import ./machines/${dir}/sysidentity.nix) sysidentity; package-modules = let listget = attrname: if sysidentity ? ${attrname} then map (v: ./modules + ("/" + v + (if lib.hasSuffix ".nix" v then "" else ".nix"))) sysidentity.${attrname} else []; havelist = listget "have"; droplist = listget "drop"; modulelist = if (sysidentity ? defaultempty) && sysidentity.defaultempty then [] else lib.mapAttrsToList (name: _: ./modules + ("/" + name)) (lib.filterAttrs (_: type: type == "regular") (builtins.readDir ./modules)); in lib.subtractLists droplist (havelist ++ modulelist); inputs-overlays = lib.mapAttrs (_: nixpkgs-special: nixpkgs-special.legacyPackages.${sysidentity.arch}) (lib.filterAttrs (name: _: lib.hasPrefix "nixpkgs-" name) inputs); custom-packages-overlays = lib.mapAttrs (name: _: nixpkgs.legacyPackages.${sysidentity.arch}.callPackage ./packages/${name} { }) (lib.filterAttrs (_: type: type == "directory") (builtins.readDir ./packages)); package-overlays = lib.mapAttrsToList (name: _: (import ./overlays/${name})) (builtins.readDir ./overlays); in lib.nixosSystem { system = sysidentity.arch; modules = [ ./machines/${dir}/hardware-configuration.nix ./configuration.nix ({ ... }: { networking.hostName = sysidentity.name; nixpkgs.overlays = [ (_: _: inputs-overlays) (_: _: custom-packages-overlays) ] ++ package-overlays; }) ] ++ (if lib.pathIsRegularFile ./machines/${dir}/configuration.nix then [ ./machines/${dir}/configuration.nix ] else []) ++ package-modules; }) (lib.filterAttrs (_: type: type == "directory") (builtins.readDir ./machines)); }