{ pkgs, lib, system, ... }: let upstream = (lib.importJSON ./upstream.json).${system}; macos = rec { inherit upstream; qemu = import ./helpers/qemu.nix { inherit pkgs lib; }; ident = import ./helpers/ident.nix { inherit lib; }; macserial = import ./helpers/macserial.nix { inherit pkgs upstream; }; fetchRecovery = import ./helpers/fetchRecovery.nix { inherit pkgs upstream; }; installerPayload = import ./helpers/installerPayload.nix { inherit pkgs lib; }; makeOpenCore = import ./helpers/makeOpenCore.nix { inherit pkgs lib upstream macserial qemu; }; makeVmixVolume = import ./helpers/makeVmixVolume.nix { inherit pkgs lib; }; makeAgentPkg = import ./helpers/makeAgentPkg.nix { inherit pkgs lib; }; installBootloader = import ./helpers/installBootloader.nix { inherit pkgs lib; }; vmixReadback = import ./helpers/vmix-readback.nix { inherit pkgs lib; }; vmDriver = ./helpers/vm-driver.py; makeImage = import ./helpers/makeImage.nix { inherit pkgs lib qemu ident installerPayload makeOpenCore makeVmixVolume makeAgentPkg installBootloader vmixReadback vmDriver; }; customizeImage = import ./helpers/customizeImage.nix { inherit pkgs lib qemu ident makeVmixVolume makeOpenCore installBootloader vmixReadback vmDriver; }; customizeImageFold = builtins.foldl' customizeImage; templates = import ./templates { inherit pkgs lib; }; }; tahoe = import ./tahoe { inherit pkgs lib system macos; }; # Recursively add .generalize to every image leaf (same shape as windows) addGeneralize = val: if val ? _vmixOsType then val // { generalize = args: let templateArgs = builtins.removeAttrs args [ "vncDisplay" ]; displayArgs = lib.optionalAttrs (args ? vncDisplay) { inherit (args) vncDisplay; }; in macos.customizeImage val (macos.templates.generalize templateArgs // displayArgs); } else if builtins.isAttrs val then lib.mapAttrs (_: addGeneralize) val else val; in macos // { images = addGeneralize { inherit tahoe; }; }