{ inputs, tree, lib, std, pkgs, }: let # The purpose of this file is to set up the host module which allows assigning of the system, e.g. aarch64-linux and the builder used with less pain. inherit (lib.modules) evalModules; inherit (std) set; hostConfigs = set.map (name: path: evalModules { modules = [ path tree.modules.system ]; specialArgs = { machine = name; inherit name inputs std tree pkgs; }; }) (set.map (_: c: c) tree.systems); processHost = name: cfg: let host = cfg.config; in set.optional (host.type != null) { deploy.nodes.${name} = host.deploy; "${host.folder}Configurations".${name} = host.built; }; in { # Ensure the existence of keys that are operated over nixosConfigurations = {}; homeConfigurations = {}; darwinConfigurations = {}; } // { systems = hostConfigs; } // set.merge (set.mapToValues processHost hostConfigs)