#!/bin/bash

# Variables
ESP=/dev/nvme0n1p1
ROOT=/dev/nvme0n1p2
SWAPFILESIZE=2G
# Optimization: Added discard=async for NVMe, removed redundant nodiratime
MOUNT_OPTIONS="noatime,compress=zstd,space_cache=v2,discard=async,ssd"

# 1. Format the partition
mkfs.btrfs -L ROOT $ROOT -f

# 2. Create Flat Subvolume Layout
mount $ROOT /mnt
btrfs sub create /mnt/@
btrfs sub create /mnt/@home
btrfs sub create /mnt/@pkg
btrfs sub create /mnt/@snapshots
btrfs sub create /mnt/@vm
btrfs sub create /mnt/@log
btrfs sub create /mnt/@swap
umount /mnt

# 3. Mount Root Subvolume
mount -o $MOUNT_OPTIONS,subvol=@ $ROOT /mnt

# 4. Create Mount Points
mkdir -p /mnt/{boot,home,var/cache/pacman/pkg,var/log,var/lib/libvirt,.snapshots,btrfs}

# 5. Mount Other Subvolumes
mount -o $MOUNT_OPTIONS,subvol=@home      $ROOT /mnt/home
mount -o $MOUNT_OPTIONS,subvol=@pkg       $ROOT /mnt/var/cache/pacman/pkg
mount -o $MOUNT_OPTIONS,subvol=@snapshots $ROOT /mnt/.snapshots
mount -o $MOUNT_OPTIONS,subvol=@log       $ROOT /mnt/var/log
mount -o $MOUNT_OPTIONS,subvolid=5        $ROOT /mnt/btrfs

# 6. Specialized Subvolume Mounting (NoCOW for VMs)
mount -o $MOUNT_OPTIONS,subvol=@vm        $ROOT /mnt/var/lib/libvirt
chattr +C /mnt/var/lib/libvirt # Disable Copy-on-Write for VM performance

# 7. Mount ESP
mount $ESP /mnt/boot

# 8. Create Swapfile on Btrfs
# btrfs-progs automatically handles NoCOW and compression exclusion for swapfiles
btrfs filesystem mkswapfile --size $SWAPFILESIZE --uuid clear /mnt/btrfs/@swap/swapfile
swapon /mnt/btrfs/@swap/swapfile

pacstrap -K /mnt base linux linux-firmware intel-ucode sof-firmware networkmanager man-db man-pages neovim grub efibootmgr zsh sudo