# Remaster a Windows ISO: remove boot prompt, optionally inject Autounattend.xml and scripts { pkgs, ... }: { iso, AutounattendedXml ? null, postInstallScript ? null }: pkgs.runCommand "windows-remastered.iso" { nativeBuildInputs = with pkgs; [ p7zip cdrkit ]; } '' workdir=$(mktemp -d) isopath="${iso}" if [ -d "$isopath" ]; then isopath="$(find "$isopath" -maxdepth 1 -name '*.iso' -type f | head -n1)" if [ -z "$isopath" ]; then echo "ERROR: no .iso file found in $isopath" exit 1 fi fi 7z x -o"$workdir" "$isopath" > /dev/null # remove "Press any key to boot from CD/DVD" prompt if [ -f "$workdir/efi/microsoft/boot/efisys_noprompt.bin" ]; then cp "$workdir/efi/microsoft/boot/efisys_noprompt.bin" \ "$workdir/efi/microsoft/boot/efisys.bin" fi if [ -f "$workdir/efi/microsoft/boot/cdboot_noprompt.efi" ]; then cp "$workdir/efi/microsoft/boot/cdboot_noprompt.efi" \ "$workdir/efi/microsoft/boot/cdboot.efi" fi rm -f "$workdir/boot/bootfix.bin" # inject unattend and post-install script into ISO root ${if AutounattendedXml != null then ''cp ${AutounattendedXml} "$workdir/Autounattend.xml"'' else ""} ${if postInstallScript != null then ''cp ${postInstallScript} "$workdir/post-install.cmd"'' else ""} genisoimage \ -allow-limited-size -iso-level 3 -o "$out" \ -joliet -joliet-long -rational-rock -udf \ -b boot/etfsboot.com -no-emul-boot -boot-load-size 8 -boot-info-table \ -eltorito-alt-boot -e efi/microsoft/boot/efisys.bin -no-emul-boot \ "$workdir" rm -rf "$workdir" ''