Skip to content

Instantly share code, notes, and snippets.

@markphelps
Last active October 7, 2025 12:13
Show Gist options
  • Select an option

  • Save markphelps/16dc17ae333231f5447b91972eb3c66a to your computer and use it in GitHub Desktop.

Select an option

Save markphelps/16dc17ae333231f5447b91972eb3c66a to your computer and use it in GitHub Desktop.

Complete Omarchy Dual-Drive Installation Checklist

Print this and check off each step as you go!


PREPARATION

  • Download Arch Linux ISO from https://archlinux.org/download/
  • Create bootable USB with Rufus/balenaEtcher
  • BACKUP ANY DATA you need from the two 1TB NVMe drives
  • Decide: Maximum capacity (2TB) or Redundancy (1TB usable)?
  • Write down a strong encryption passphrase (you'll type it multiple times)

PHASE 1: BOOT AND CONNECT

  • Insert USB drive and boot from it (press F12/F9/F2 during startup)
  • Select "Arch Linux install medium" from boot menu
  • Wait for root@archiso ~ # prompt

Connect to Internet:

If Wired:

  • It should work automatically

If WiFi:

  • Run: iwctl
  • Type: station wlan0 scan
  • Type: station wlan0 get-networks
  • Type: station wlan0 connect "YourNetworkName"
  • Enter WiFi password
  • Type: exit

Verify Connection:

  • Run: ping -c 3 archlinux.org
  • Confirm you see replies

PHASE 2: IDENTIFY DRIVES

  • Run: lsblk
  • Identify your two 1TB NVMe drives (should be nvme0n1 and nvme1n1)
  • CRITICAL: Confirm these are the correct drives to erase
  • Ignore sda (that's your USB installer)

PHASE 3: WIPE AND PARTITION

Wipe Both Drives:

  • Run: wipefs -a /dev/nvme0n1
  • Run: wipefs -a /dev/nvme1n1

Partition First Drive (nvme0n1) - WITH boot partition:

  • Run: cfdisk /dev/nvme0n1
  • Select: "gpt" (if asked for label type)
  • Select: "New" → Type: "1G" → Press Enter
  • Select: "Type" → Choose: "EFI System"
  • Move down to free space → Select: "New" → Press Enter (uses all remaining)
  • Leave as "Linux filesystem"
  • Select: "Write" → Type: "yes" → Press Enter
  • Select: "Quit"

Partition Second Drive (nvme1n1) - NO boot partition:

  • Run: cfdisk /dev/nvme1n1
  • Select: "gpt"
  • Select: "New" → Press Enter (uses all space as ONE partition)
  • Leave as "Linux filesystem"
  • Select: "Write" → Type: "yes" → Press Enter
  • Select: "Quit"

Verify Partitions:

  • Run: lsblk
  • MUST SEE: nvme0n1p1 (1GB), nvme0n1p2 (~930GB), nvme1n1p1 (~931GB)
  • If layout is wrong, go back and repartition!

PHASE 4: FORMAT BOOT PARTITION

  • Run: mkfs.fat -F32 /dev/nvme0n1p1
  • Verify: blkid /dev/nvme0n1p1 (should show TYPE="vfat")

PHASE 5: ENCRYPT BOTH DATA PARTITIONS

Encrypt First Partition:

  • Run: cryptsetup luksFormat /dev/nvme0n1p2
  • Type: "YES" (uppercase)
  • Enter your passphrase (twice)
  • Write down your passphrase somewhere safe!

Encrypt Second Partition:

  • Run: cryptsetup luksFormat /dev/nvme1n1p1
  • Type: "YES" (uppercase)
  • Enter the SAME passphrase (twice)

CRITICAL - Verify Both Are Encrypted:

  • Run: cryptsetup isLuks /dev/nvme0n1p2 && echo "✓ nvme0n1p2 encrypted SUCCESS"
  • Run: cryptsetup isLuks /dev/nvme1n1p1 && echo "✓ nvme1n1p1 encrypted SUCCESS"
  • MUST SEE two SUCCESS messages - if not, go back and re-encrypt!

PHASE 6: OPEN ENCRYPTED PARTITIONS

  • Run: cryptsetup open /dev/nvme0n1p2 cryptroot1
  • Enter your passphrase
  • Run: cryptsetup open /dev/nvme1n1p1 cryptroot2
  • Enter your passphrase
  • Verify: ls /dev/mapper/ (should show cryptroot1 and cryptroot2)

PHASE 7: CREATE BTRFS FILESYSTEM

Choose ONE option:

Option A - Maximum Capacity (2TB):

  • Run: mkfs.btrfs -f -m single -d single -L omarchy /dev/mapper/cryptroot1 /dev/mapper/cryptroot2

Option B - Redundancy (1TB usable):

  • Run: mkfs.btrfs -f -m raid1 -d raid1 -L omarchy /dev/mapper/cryptroot1 /dev/mapper/cryptroot2

Verify:

  • Run: btrfs filesystem show /dev/mapper/cryptroot1
  • MUST SEE BOTH cryptroot1 and cryptroot2 listed as devices

PHASE 8: MOUNT FILESYSTEMS

  • Run: mount /dev/mapper/cryptroot1 /mnt
  • Run: mkdir /mnt/boot
  • Run: mount /dev/nvme0n1p1 /mnt/boot
  • Verify: mount | grep /mnt (should show both mounts)

PHASE 9: INSTALL BASE ARCH SYSTEM

  • Run: pacstrap -K /mnt base linux linux-firmware btrfs-progs nano networkmanager git curl sudo
  • Wait 5-15 minutes for download and installation
  • Verify no errors in output

Generate Filesystem Table:

  • Run: genfstab -U /mnt >> /mnt/etc/fstab

Enter New System:

  • Run: arch-chroot /mnt
  • Your prompt should change (might still say "archiso" but you're in chroot)

PHASE 10: BASIC SYSTEM CONFIGURATION

Set Timezone (replace with your region/city, e.g., America/New_York):

  • Run: ln -sf /usr/share/zoneinfo/Region/City /etc/localtime
  • Run: hwclock --systohc

Set Hostname (choose a name for your computer):

  • Run: echo "your-hostname" > /etc/hostname

Configure Locale:

  • Run: nano /etc/locale.gen
  • Find line: en_US.UTF-8 UTF-8 (or your locale)
  • Remove the # at the start of that line
  • Press: Ctrl+X, then Y, then Enter
  • Run: locale-gen
  • Run: echo "LANG=en_US.UTF-8" > /etc/locale.conf

Create Console Config (prevents error):

  • Run: echo "KEYMAP=us" > /etc/vconsole.conf
  • (Change us to your keyboard layout if different)

Set Root Password:

  • Run: passwd
  • Enter a password (twice)

PHASE 11: CREATE REGULAR USER

Create User:

  • Run: useradd -m -G wheel your-username
  • (Replace your-username with your desired username)

Set User Password:

  • Run: passwd your-username
  • Enter a password (twice)

Enable Sudo for User:

  • Run: EDITOR=nano visudo
  • Find line: # %wheel ALL=(ALL:ALL) ALL
  • Remove the # at the start to uncomment it
  • Press: Ctrl+X, then Y, then Enter

PHASE 12: CONFIGURE SYSTEMD ENCRYPTION

Edit Initramfs Configuration:

  • Run: nano /etc/mkinitcpio.conf
  • Find the line starting with: HOOKS=
  • Replace it with:
HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt filesystems fsck)
  • Key changes: systemd (not udev), sd-vconsole (not keymap consolefont), sd-encrypt (not encrypt)
  • Press: Ctrl+X, then Y, then Enter

Regenerate Initramfs:

  • Run: mkinitcpio -P
  • You might see warnings - that's okay, but no ERRORS
  • Verify you see "Image generation successful"

PHASE 13: INSTALL BOOTLOADER

Install GRUB:

  • Run: pacman -S grub efibootmgr
  • Press Enter to confirm
  • Run: grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
  • Verify you see "Installation finished. No error reported."

PHASE 14: CONFIGURE GRUB FOR ENCRYPTION

Get UUIDs and Build GRUB Line:

  • Run these commands (they build the line for you):
UUID1=$(blkid -s UUID -o value /dev/nvme0n1p2)
UUID2=$(blkid -s UUID -o value /dev/nvme1n1p1)
echo "Copy this line:"
echo "rd.luks.name=$UUID1=cryptroot1 rd.luks.name=$UUID2=cryptroot2 root=/dev/mapper/cryptroot1"
  • IMPORTANT: Copy the ENTIRE line that starts with "rd.luks.name"

Edit GRUB Configuration:

  • Run: nano /etc/default/grub
  • Find the line: GRUB_CMDLINE_LINUX=""
  • Paste your copied line inside the quotes
  • Should look like: GRUB_CMDLINE_LINUX="rd.luks.name=uuid1=cryptroot1 rd.luks.name=uuid2=cryptroot2 root=/dev/mapper/cryptroot1"
  • Leave GRUB_ENABLE_CRYPTODISK=y commented out (leave the # in front)
  • Press: Ctrl+X, then Y, then Enter

Generate GRUB Config:

  • Run: grub-mkconfig -o /boot/grub/grub.cfg
  • IMPORTANT: Verify you see "Found linux image" and "Found initrd image" in output
  • Run: ls -lh /boot/grub/grub.cfg (should be at least 4-5KB)

Verify GRUB Config Has Encryption Parameters:

  • Run: grep "rd.luks.name" /boot/grub/grub.cfg | head -1
  • MUST SEE: Two rd.luks.name= parameters with actual UUID values (not "$UUID")
  • Should all be on ONE line starting with linux /vmlinuz-linux

PHASE 15: ENABLE NETWORKING

  • Run: systemctl enable NetworkManager

PHASE 16: PRE-REBOOT VERIFICATION

Run Quick Verification:

echo "=== Partitions ==="
lsblk | grep nvme

echo -e "\n=== Encryption ==="
cryptsetup isLuks /dev/nvme0n1p2 && echo "✓ nvme0n1p2 encrypted" || echo "✗ PROBLEM"
cryptsetup isLuks /dev/nvme1n1p1 && echo "✓ nvme1n1p1 encrypted" || echo "✗ PROBLEM"

echo -e "\n=== Btrfs Devices ==="
btrfs filesystem show /dev/mapper/cryptroot1

echo -e "\n=== GRUB Config ==="
ls -lh /boot/grub/grub.cfg
grep "rd.luks.name" /boot/grub/grub.cfg | head -1

echo -e "\n=== User & Sudo ==="
id your-username
grep "^%wheel" /etc/sudoers
  • Check all output looks correct before proceeding!

PHASE 17: EXIT AND REBOOT

  • Run: exit (leaves chroot)
  • Run: umount -R /mnt
  • Run: cryptsetup close cryptroot1
  • Run: cryptsetup close cryptroot2
  • Remove USB drive
  • Run: reboot

PHASE 18: FIRST BOOT

  • System should show GRUB menu (might auto-boot)
  • You'll be prompted for encryption passphrase TWICE (once for each drive)
  • Enter your passphrase both times
  • Wait for login prompt
  • Login as your regular user (not root) with your password

PHASE 19: VERIFY DISK SETUP

Connect to Internet:

  • Wired: Should work automatically
  • WiFi: Run nmtui, select "Activate a connection", choose network

Test Internet:

  • Run: ping -c 3 google.com

Verify Disk Setup:

echo "=== Disk Layout ==="
lsblk

echo -e "\n=== Encrypted Volumes ==="
sudo dmsetup ls

echo -e "\n=== Btrfs Devices ==="
sudo btrfs filesystem show /

echo -e "\n=== Available Space ==="
df -h /
  • Verify both cryptroot1 and cryptroot2 are listed
  • Verify btrfs shows both devices
  • Verify available space matches your choice (2TB or 1TB)

PHASE 20: INSTALL OMARCHY

  • Run: curl -fsSL https://omarchy.org/install | bash
  • Follow the Omarchy installer prompts
  • Wait for installation to complete
  • Reboot when prompted

DONE! 🎉

You now have Omarchy running on your dual-drive encrypted setup!


TROUBLESHOOTING NOTES

If you get "device not found" error at boot:

  • Boot back into Arch USB
  • Unlock drives: cryptsetup open /dev/nvme0n1p2 cryptroot1 and cryptsetup open /dev/nvme1n1p1 cryptroot2
  • Mount: mount /dev/mapper/cryptroot1 /mnt and mount /dev/nvme0n1p1 /mnt/boot
  • Chroot: arch-chroot /mnt
  • Check GRUB config has correct UUIDs: grep rd.luks.name /boot/grub/grub.cfg
  • Regenerate if needed: grub-mkconfig -o /boot/grub/grub.cfg

If encryption prompts don't appear:

  • Check initramfs has sd-encrypt: lsinitcpio /boot/initramfs-linux.img | grep sd-encrypt
  • Verify GRUB config has rd.luks.name parameters

Key Points:

  • Use systemd hooks (sd-encrypt, not encrypt)
  • Use rd.luks.name syntax (not cryptdevice)
  • Both passphrases must be identical
  • Create regular user before installing Omarchy
  • Always verify encryption SUCCESS before continuing

Good luck! Take your time and check off each step as you go.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment