I moved to Arch after getting tired of the outdated Ubuntu-based repositories in Pop!_OS. I wanted a clean, rolling system that I could fully control.

This guide is for anyone who wants:

  • Full disk encryption with LVM on LUKS
  • Hyprland as the Wayland compositor
  • NVIDIA drivers (yes, on Wayland!)
  • A minimal, keyboard-driven environment

I used the Arch ISO and booted in UEFI mode.

🛠️ Disk Setup: LVM on LUKS

… lsblk layout example

1. Partitioning with gdisk

/dev/nvme0n1p1  EFI system (512M)
/dev/nvme0n1p2  LUKS (rest of the disk)

2. Encrypt main partition

cryptsetup luksFormat /dev/nvme0n1p2
cryptsetup open /dev/nvme0n1p2 cryptlvm

3. Set up LVM

pvcreate /dev/mapper/cryptlvm
vgcreate vg0 /dev/mapper/cryptlvm
lvcreate -L 32G vg0 -n root
lvcreate -l 100%FREE vg0 -n home
lvcreate -L -256M vg0/home

LVM - ArchWiki: If a logical volume will be formatted with ext4, leave at least 256 MiB free space in the volume group to allow using e2scrub(8).

4. Format partitions

mkfs.fat -F32 /dev/nvme0n1p1
mkfs.ext4 /dev/vg0/root
mkfs.ext4 /dev/vg0/home

5. Mount partitions

mount /dev/vg0/root /mnt
mount --mkdir /dev/vg0/home /mnt/home
mount --mkdir /dev/nvme0n1p1 /mnt/boot

📦 Base Installation


pacstrap /mnt base linux linux-firmware lvm2 base-devel linux-headers amd-ucode vim sudo networkmanager man-pages man-db texinfo

Strictly Required:

  • base: a minimal package set to define a basic Arch Linux installation.

  • linux: the latest stable Linux kernel.

  • linux-firmware: firmware files to support various hardware (Wi-Fi cards, GPUs, etc.).

Required:

  • lvm2: tools for Logical Volume Mangement (LVM), required by our disk partitioning.

Optional (but useful):

  • base-devel: development tools required to build software from source.
  • linux-headers: kernel headers needed for building kernel modules (e.g. NVIDIA driver, VirtualBox, etc.).
  • amd-ucode: CPU microcode updates for AMD processors — improves stability and performance. Use intel-ucode instead if you have an Intel CPU.
  • vim: a funny text editor.
  • sudo: lets regular users run commands as root.
  • networkmanager: a service to manage network connections easily (Wi-Fi, Ethernet, etc.).
  • man-pages man-db texinfo: packages for accessing documentation in man and info pages.

⚙️ System Configuration

1. Generate fstab and chroot

genfstab -U /mnt >> /mnt/etc/fstab
arch-chroot /mnt

Fstab - ArchWiki: The fstab(5) file can be used to define how disk partitions, various other block devices, or remote file systems should be mounted into the file system.

chroot: change root into the new system.

2. Set Timezone

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

Replace /Region/City with your Region and City. For example, if you live in France, you will probably change this by /Europe/Paris.

3. Localization

Uncomment your locale (e.g. en_US.UTF-8 UTF-8) in /etc/locale.gen:

vim /etc/locale.gen

Then generate locales:

locale-gen

Create /etc/locale.conf:

echo "LANG=en_US.UTF-8" > /etc/locale.conf

Set your keyboard layout:

echo "KEYMAP=fr" > /etc/vconsole.conf 

Yes! I’m writing with a French keyboard 😯

4. Set Hostname

echo "archy" > /etc/hostname

Replace archy with whatever you want.

5. Enable Networking

systemctl enable NetworkManager

💾 Boot Setup

Now, I will configure a systemd-based initramfs and a boot loader so that I can unlock the encrypted volume at boot, following the instructions from the LVM on LUKS - ArchWiki.

1. Configure mkinitcpio

Add the hooks for systemd, LUKS and LVM support:

vim /etc/mkinitcpio.conf

Find the HOOKS= line and set it to:

HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)

Then regenerate the initramfs:

mkinitcpio -P

This ensures the initramfs includes everything needed to prompt for your LUKS passphrase ands activate the LVM volumes.

2. Configure boot loader

Install the systemd boot loader to the EFI system partition

bootctl install

Grab the UUID of the encrypted partition:

DEVICE_UUID=$(blkid -o value -s UUID /dev/nvme0n1p2)

Create /boot/loader/entries/arch.conf:

tee /boot/loader/entries/arch.conf > /dev/null <<EOF
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options rd.luks.name=device-UUID=$(DEVICE_UUID)=cryptlvm root=/dev/vg0/root rw
EOF

If you want, you can also create a /boot/loader/loader.conf file to set boot-time kernel or loader options.

🪪 User accounts

1. Create a user account

useradd -m -G wheel username    # Replace `username` by your username
passwd username

2. Give superpowers to your user account

Enable sudo for the wheel group.

Edit the sudoers file:

visudo

Uncomment the following line:

%wheel ALL=(ALL:ALL) ALL
passwd -l root

🔄 Reboot into your new system

exit
unmount -R /mnt
reboot

🎉 To be continued…

Bravo! You now have a fresh Arch Linux installation.

This was just the first step. In the next part, we will install and configure ZRAM, NVIDIA drivers, and Hyprland.