{ pkgs, lib, system, ... }: let windows = rec { drivers = import ./drivers { inherit pkgs system; }; makeFilesISO = (import ./helpers/makeFilesISO.nix) { inherit pkgs; }; customizeImage = (import ./helpers/customizeImage.nix) { inherit pkgs lib; }; customizeImageFold = builtins.foldl' customizeImage; templates = (import ./templates) { inherit pkgs lib system drivers makeFilesISO; }; makeAuditModeAutounattend = (import ./helpers/makeAuditModeAutounattend.nix) { inherit pkgs lib; }; makeWinISO = (import ./helpers/makeWinISO.nix) { inherit pkgs; }; makeImage = (import ./helpers/makeImage.nix) { inherit pkgs lib drivers makeWinISO makeAuditModeAutounattend; }; }; win10 = (import ./win10) { inherit pkgs lib system windows; }; win11 = (import ./win11) { inherit pkgs lib system windows; }; # Recursively add .generalize to every derivation leaf in the image tree addGeneralize = val: if val ? _vmixOsType then val // { generalize = args: let templateArgs = builtins.removeAttrs args [ "vncDisplay" ]; displayArgs = lib.optionalAttrs (args ? vncDisplay) { inherit (args) vncDisplay; }; in windows.customizeImage val (windows.templates.generalize templateArgs // displayArgs); } else if builtins.isAttrs val then lib.mapAttrs (_: addGeneralize) val else val; in windows // { images = addGeneralize { inherit win10 win11; }; }