#!/bin/bash # # Quick-iterate on boot branding without rebuilding the ISO. # # Usage: # ./dev-branding.sh # # What it does: # 1. Regenerates GRUB background and Plymouth logo from Python scripts # 2. Extracts the existing ISO # 3. Swaps in updated branding files (theme, background, Plymouth) # 4. Repackages as a new ISO # 5. Boots it in QEMU for testing # # This takes ~10 seconds instead of 20 minutes. # # For design-only iteration (no QEMU boot): # python3 branding/generate-grub-background.py /tmp/grub-bg.png && open /tmp/grub-bg.png # set -e SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" ISO="${1:-}" if [ -z "$ISO" ] || [ ! -f "$ISO" ]; then # Auto-detect latest dev ISO on Desktop ISO=$(ls -t ~/Desktop/archipelago-dev-*.iso 2>/dev/null | head -1) fi if [ -z "$ISO" ] || [ ! -f "$ISO" ]; then ISO=$(ls -t "$SCRIPT_DIR/results/archipelago-*.iso" 2>/dev/null | head -1) fi if [ -z "$ISO" ] || [ ! -f "$ISO" ]; then echo "No ISO found. Provide a path or place one on Desktop/results." echo "Usage: $0 " exit 1 fi WORK="/tmp/archipelago-dev-branding" PATCHED="$SCRIPT_DIR/results/archipelago-dev-patched.iso" echo "=== Archipelago Branding Dev ===" echo " Base ISO: $ISO" echo "" # Step 1: Regenerate assets echo "[1/4] Generating assets..." python3 "$SCRIPT_DIR/branding/generate-grub-background.py" /tmp/grub-bg.png 2>/dev/null && \ echo " GRUB background: OK" || echo " GRUB background: FAILED" python3 "$SCRIPT_DIR/branding/generate-plymouth-logo.py" /tmp/plymouth-logo.png 2>/dev/null && \ echo " Plymouth logo: OK" || echo " Plymouth logo: FAILED" # Also show the background for quick visual check if command -v open >/dev/null 2>&1; then open /tmp/grub-bg.png 2>/dev/null & fi # Step 2: Extract ISO echo "[2/4] Extracting ISO..." rm -rf "$WORK" mkdir -p "$WORK" xorriso -osirrox on -indev "$ISO" -extract / "$WORK" 2>/dev/null || { # Fallback: mount + copy MNT=$(mktemp -d) if [ "$(uname)" = "Darwin" ]; then hdiutil attach "$ISO" -mountpoint "$MNT" -readonly -nobrowse 2>/dev/null else sudo mount -o loop,ro "$ISO" "$MNT" fi cp -a "$MNT"/* "$WORK/" 2>/dev/null || true if [ "$(uname)" = "Darwin" ]; then hdiutil detach "$MNT" 2>/dev/null else sudo umount "$MNT" fi rmdir "$MNT" 2>/dev/null || true } # Step 3: Patch branding echo "[3/4] Patching branding..." THEME_DST="$WORK/boot/grub/themes/archipelago" mkdir -p "$THEME_DST" # GRUB theme cp "$SCRIPT_DIR/branding/grub-theme/theme.txt" "$THEME_DST/" 2>/dev/null && \ echo " theme.txt: OK" cp /tmp/grub-bg.png "$THEME_DST/background.png" 2>/dev/null && \ echo " background.png: OK" # Plymouth theme if [ -d "$WORK/archipelago/plymouth-theme" ]; then cp "$SCRIPT_DIR/branding/plymouth-theme/"* "$WORK/archipelago/plymouth-theme/" 2>/dev/null cp /tmp/plymouth-logo.png "$WORK/archipelago/plymouth-theme/logo.png" 2>/dev/null echo " Plymouth theme: OK" fi # GRUB config (in case you edited it) if [ -f "$SCRIPT_DIR/branding/grub.cfg" ]; then cp "$SCRIPT_DIR/branding/grub.cfg" "$WORK/boot/grub/grub.cfg" echo " grub.cfg: OK (custom)" fi # ISOLINUX config if [ -f "$SCRIPT_DIR/branding/isolinux.cfg" ]; then cp "$SCRIPT_DIR/branding/isolinux.cfg" "$WORK/isolinux/isolinux.cfg" echo " isolinux.cfg: OK (custom)" fi # Step 4: Repackage ISO echo "[4/4] Repackaging ISO..." mkdir -p "$SCRIPT_DIR/results" # Find isohdpfx.bin ISOHDPFX="" for p in "$WORK/isolinux/isohdpfx.bin" \ /usr/lib/ISOLINUX/isohdpfx.bin \ /usr/share/syslinux/isohdpfx.bin \ /opt/homebrew/share/syslinux/isohdpfx.bin; do [ -f "$p" ] && ISOHDPFX="$p" && break done # Check for EFI image EFI_IMG="$WORK/boot/grub/efi.img" if [ -n "$ISOHDPFX" ] && [ -f "$EFI_IMG" ]; then xorriso -as mkisofs -o "$PATCHED" \ -volid "ARCHIPELAGO" \ -iso-level 3 \ -J -joliet-long -R \ -isohybrid-mbr "$ISOHDPFX" \ -c isolinux/boot.cat \ -b isolinux/isolinux.bin \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -eltorito-alt-boot \ -e boot/grub/efi.img \ -no-emul-boot \ -isohybrid-gpt-basdat \ -partition_offset 16 \ "$WORK" 2>/dev/null elif [ -n "$ISOHDPFX" ]; then xorriso -as mkisofs -o "$PATCHED" \ -volid "ARCHIPELAGO" \ -iso-level 3 \ -J -joliet-long -R \ -isohybrid-mbr "$ISOHDPFX" \ -c isolinux/boot.cat \ -b isolinux/isolinux.bin \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -partition_offset 16 \ "$WORK" 2>/dev/null else echo "Cannot repackage: no isohdpfx.bin found." echo "Install xorriso and isolinux: brew install xorriso" echo "" echo "You can still preview the assets:" echo " open /tmp/grub-bg.png" echo " open /tmp/plymouth-logo.png" exit 0 fi echo "" echo " Patched ISO: $PATCHED ($(du -h "$PATCHED" | cut -f1))" echo "" # Auto-boot in QEMU if available if command -v qemu-system-x86_64 >/dev/null 2>&1; then read -p "Boot in QEMU? [Y/n] " -n 1 -r echo "" if [[ ! $REPLY =~ ^[Nn]$ ]]; then exec "$SCRIPT_DIR/test-iso-qemu.sh" "$PATCHED" --bios fi else echo "Install QEMU to test: brew install qemu" fi