Skip to content

Instantly share code, notes, and snippets.

@runmaxde
Created December 20, 2025 13:41
Show Gist options
  • Select an option

  • Save runmaxde/b25cfc088d0da6c8697bded3ebc7a939 to your computer and use it in GitHub Desktop.

Select an option

Save runmaxde/b25cfc088d0da6c8697bded3ebc7a939 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
set -euo pipefail
ISO_URL="https://channels.nixos.org/nixos-24.05/latest-nixos-minimal-x86_64-linux.iso"
DISK="/dev/vda"
ISO_PART="/dev/vda1"
MNT="/mnt/nixos-iso"
ISO_PATH="${MNT}/nixos.iso"
echo "[1/7] checks"
id -u | grep -q '^0$' || { echo "run as root (sudo -i)"; exit 1; }
echo "[2/7] mount iso partition"
mkdir -p "$MNT"
mountpoint -q "$MNT" || mount "$ISO_PART" "$MNT"
echo "[3/7] download nixos iso"
if [ ! -f "$ISO_PATH" ]; then
wget -O "$ISO_PATH" "$ISO_URL"
fi
echo "[4/7] verify iso"
mkdir -p /tmp/nixos-check
mount -o loop "$ISO_PATH" /tmp/nixos-check
ls /tmp/nixos-check/boot/bzImage >/dev/null
ls /tmp/nixos-check/boot/initrd >/dev/null
umount /tmp/nixos-check
echo "[5/7] write grub.cfg"
mkdir -p "$MNT/boot/grub"
cat > "$MNT/boot/grub/grub.cfg" <<'EOF'
set default=0
set timeout=5
menuentry "Install NixOS from ISO" {
set root=(hd0,1)
set isofile=/nixos.iso
loopback loop (hd0,1)$isofile
linux (loop)/boot/bzImage iso-scan/filename=$isofile
initrd (loop)/boot/initrd
}
EOF
echo "[6/7] install grub"
grub-install --root-directory="$MNT" "$DISK"
sync
echo "[7/7] done"
echo "Run: umount $MNT && reboot"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment