#!/usr/bin/env just --justfile IMG_FILE := 'small.img' IMG_SIZE_MB := '36' EFI_NAME := 'bootx64' EFI_FILE := 'bootx64.efi' MNT_DIR := 'esp_mnt' default: image build: @echo ">>> Building UEFI executable ({{EFI_FILE}})..." zig build-exe -OReleaseFast -target x86_64-uefi-msvc --name {{EFI_NAME}} main.zig _image-init: echo ">>> Creating blank disk image: {{IMG_FILE}} ({{IMG_SIZE_MB}}MB)..." #dd if=/dev/zero of={{IMG_FILE}} bs=1M count={{IMG_SIZE_MB}} fallocate -l {{IMG_SIZE_MB}}M {{IMG_FILE}} sudo -v echo ">>> Creating GPT and EFI System Partition..." sudo sgdisk --new=1:0:0 --typecode=1:ef00 {{IMG_FILE}} image: build _image-init #!/usr/bin/env bash set -euo pipefail LOOP_DEV=$(sudo losetup --partscan --show --find {{IMG_FILE}}) trap 'sudo umount {{MNT_DIR}} 2>/dev/null || true; sudo losetup -d "$LOOP_DEV" 2>/dev/null || true; rm -rf {{MNT_DIR}};' EXIT echo ">>> Using loop device: $LOOP_DEV" echo ">>> Formatting EFI partition (FAT32)..." sudo mkfs.vfat -F32 "${LOOP_DEV}p1" echo ">>> Mounting partition..." mkdir -p {{MNT_DIR}} sudo mount "${LOOP_DEV}p1" {{MNT_DIR}} echo ">>> Copying EFI executable to EFI/BOOT/BOOTX64.EFI..." sudo mkdir -p {{MNT_DIR}}/EFI/BOOT sudo cp {{EFI_FILE}} {{MNT_DIR}}/EFI/BOOT/BOOTX64.EFI echo ">>> Syncing filesystem..." sync echo "Success! Bootable image created: {{IMG_FILE}}" run: image qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -drive format=raw,file={{IMG_FILE}} clean: @echo ">>> Cleaning up..." -rm -vrf zig-cache zig-out -rm -vf *.img bootx64* @echo ">>> Cleanup complete."