#!/usr/bin/env bash
# Build the Nomarchy live ISO and boot it in QEMU for a try-before-install
# run. Ported from the previous Nomarchy iteration. See docs/TESTING.md
# for what to verify once it's up.

set -e
cd "$(dirname "$0")/.."

echo "Building Nomarchy live ISO..."
nix build .#nixosConfigurations.nomarchy-live.config.system.build.isoImage

ISO=$(ls -1 result/iso/*.iso 2>/dev/null | head -n 1)
if [ -z "$ISO" ]; then
    echo "Error: ISO build succeeded but no .iso file found in result/iso/" >&2
    exit 1
fi

# Prefer UEFI with OVMF so the ISO boots the same way a modern install
# does; fall back to legacy BIOS if OVMF isn't available on this host.
OVMF_CANDIDATES=(
    "/run/current-system/sw/share/OVMF/OVMF_CODE.fd"
    "/run/current-system/sw/share/qemu/edk2-x86_64-code.fd"
    "/nix/var/nix/profiles/system/sw/share/OVMF/OVMF_CODE.fd"
    "/usr/share/OVMF/OVMF_CODE.fd"
)
BIOS_ARG=()
for c in "${OVMF_CANDIDATES[@]}"; do
    if [ -f "$c" ]; then
        BIOS_ARG=(-drive "if=pflash,format=raw,readonly=on,file=$c")
        VARS="${c%_CODE.fd}_VARS.fd"
        [ -f "$VARS" ] && BIOS_ARG+=(-drive "if=pflash,format=raw,readonly=on,file=$VARS")
        break
    fi
done

# KVM if the host supports it; software emulation otherwise (slow).
ACCEL_ARG=()
[ -r /dev/kvm ] && ACCEL_ARG=(-enable-kvm -cpu host)

echo "Launching ISO: $ISO"
# virtio-vga-gl + gl=on gives the guest real OpenGL — Hyprland and
# the session needs it; without GL Hyprland may fail to start.
exec qemu-system-x86_64 \
    "${ACCEL_ARG[@]}" \
    -m 4096 -smp 2 \
    "${BIOS_ARG[@]}" \
    -device virtio-vga-gl -display gtk,gl=on \
    -device virtio-net-pci,netdev=n0 -netdev user,id=n0 \
    -cdrom "$ISO" -boot d
