Migration To Artix Linux Install Plan
Migration Plan

Artix Linux (s6)

Hybrid BIOS/UEFI install guide for a blank disk with GPT, GRUB, a 1 MiB BIOS boot partition, a 420 MiB FAT32 boot partition, and the rest as Btrfs with zstd, swapfile, zram, Hyprland on Wayland, and no display manager.

Target: boots on both Legacy BIOS and UEFI with s6 as init, GRUB as bootloader, and a manual Hyprland login flow.
Layout

System Diagram and Boot Choice

NVMe Drive Layout 1 TB
Partition 1: BIOS Boot 1 MiB
No filesystem Reserved for GRUB BIOS embedding. Do not format this partition.
Partition 2: GRUB / EFI 420 MiB
FAT32 Stores GRUB files and UEFI boot assets. Mounted at /boot in this guide.
Partition 3: Main Linux Partition Rest of Drive
Btrfs + zstd Main Artix root filesystem with compression enabled.
Swapfile Disk-backed fallback swap living on the Btrfs root.
zram Fast compressed RAM-backed swap enabled after first boot.

Why GRUB Here

  • Hybrid target This install plan still wants one disk that boots on both legacy BIOS and UEFI.
  • Practical now GRUB is the stable option while the migration itself is still being done in a recoverable way.
  • Later direction Custom boot and init work can come later once the base Artix system is already stable.

Why These Changes

This install is not just “Artix instead of Arch.” The storage and boot layout is being changed on purpose so the machine is more flexible, more secure, and more cost-efficient long term.

BIOS Boot + GRUB
Added so the machine can boot in legacy BIOS and normal UEFI paths, which keeps the install more universal across different systems and firmware situations.
s6
The current boot is too slow. Right now the machine is taking 23.813s total to reach the graphical target, and the whole point of moving to s6 is to cut the boot path down aggressively with a target of getting under 4 seconds.
LUKS
Used for strong full-disk style encryption so the core storage stack stays protected. The goal here is serious security, not a casual lock screen.
LVM
Lets the storage be virtualized so multiple physical drives can be merged or rearranged later without rebuilding the whole layout from scratch.
Swapfile
Keeps hibernation encrypted under the LUKS layer and is easier to resize on the fly than a fixed swap partition.
zram
At current RAM prices it makes no sense to leave this off. Compressed RAM-backed swap is too useful to ignore.
zstd
Compression is there because storage is not cheap either. The target is roughly around 30% effective extra space from the same NVMe without changing hardware.
Step 1

Boot, Keyboard, and Partitioning

This page now follows the install in a strict top-to-bottom order. Read it like a checklist, not like a component showcase.

loadkeys uk
lsblk
parted /dev/sda --script \ mklabel gpt \ mkpart BIOSBOOT 1MiB 2MiB \ set 1 bios_grub on \ mkpart GRUB fat32 2MiB 422MiB \ set 2 esp on \ mkpart ROOT btrfs 422MiB 100%
  • /dev/sda1 = 1 MiB BIOS boot partition
  • /dev/sda2 = 420 MiB FAT32 GRUB / EFI partition
  • /dev/sda3 = main Btrfs partition using the rest of the drive
Step 2

Format the Boot and Main Partitions

mkfs.fat -F32 /dev/sda2 mkfs.btrfs /dev/sda3
BIOS boot partition: do not format /dev/sda1. It exists for GRUB BIOS embedding, not for a normal filesystem.
Step 3

Mount Btrfs and the Boot Partition

mount -o noatime,compress=zstd /dev/sda3 /mnt mkdir -p /mnt/boot mount /dev/sda2 /mnt/boot
lsblk
Step 4

Create Swapfile and Plan for zram

truncate -s 0 /mnt/swapfile chattr +C /mnt/swapfile btrfs property set /mnt/swapfile compression none fallocate -l 8G /mnt/swapfile chmod 600 /mnt/swapfile mkswap /mnt/swapfile
Keep the swapfile for hibernation or fallback swap if you need it. Use zram after first boot for fast compressed RAM-backed swap during normal use.
Step 5

Install the Base System

basestrap /mnt base linux linux-firmware base-devel \ s6-base elogind elogind-s6 \ grub efibootmgr \ btrfs-progs zramen zramen-s6 \ networkmanager networkmanager-s6 dbus dbus-s6 \ mkinitcpio fstabgen -U /mnt >> /mnt/etc/fstab artix-chroot /mnt
Step 6

Configure Timezone, Locale, and Console

ln -sf /usr/share/zoneinfo/UTC /etc/localtime hwclock --systohc sed -i 's/#en_GB.UTF-8/en_GB.UTF-8/' /etc/locale.gen locale-gen echo 'LANG=en_GB.UTF-8' > /etc/locale.conf
cat > /etc/vconsole.conf <<'EOF' FONT_MAP=8859-1_to_uni FONT=lat1-16 KEYMAP=uk EOF
Step 7

Hostname and Core Network Identity

echo artix > /etc/hostname cat > /etc/hosts <<'EOF' 127.0.0.1 localhost ::1 localhost 127.0.1.1 artix.localdomain artix EOF
Step 8

mkinitcpio and Bootloader

HOOKS=(base udev autodetect modconf block filesystems fsck)
mkinitcpio -P
GRUB_CMDLINE_LINUX="root=UUID=<UUID_OF_/dev/sda3> rootflags=compress=zstd rw"
blkid /dev/sda3 grub-install --target=i386-pc /dev/sda grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Artix grub-mkconfig -o /boot/grub/grub.cfg
Step 9

Enable Core s6 Services

touch /etc/s6/adminsv/default/contents.d/dbus touch /etc/s6/adminsv/default/contents.d/NetworkManager touch /etc/s6/adminsv/default/contents.d/elogind s6-db-reload
If s6-db-reload is awkward inside the chroot, do this after first boot instead.
Step 10

Set Passwords and Create Your User

passwd
useradd -m -G wheel,audio,video,input george passwd george

Enable your preferred doas or sudo setup afterwards.

Step 11

Install Hyprland and the Wayland Stack

pacman -S hyprland wlroots kitty \ pipewire pipewire-pulse wireplumber \ xdg-desktop-portal-hyprland \ mesa wayland xorg-xwayland
Keep PipeWire, pipewire-pulse, and wireplumber as user-session services started from your Hyprland login rather than system s6 boot services in this guide.
Step 12

TTY Login Directly Into Hyprland

if [ -z "$WAYLAND_DISPLAY" ] && [ "$XDG_VTNR" -eq 1 ]; then exec Hyprland fi

Put that in ~/.bash_profile.

Step 13

Exit, Unmount, and Reboot

exit umount -R /mnt reboot

Remove the install media and log into the new install.

Step 14

Rebuild Your Package Set From Your Current Machine

After the first successful boot, use your saved package lists from the current machine as a reference for rebuilding the environment instead of guessing from memory.

Main full package dump: /home/unknown/pacmanpackages.txt Useful rebuild-oriented lists: /home/unknown/pkglist.txt /home/unknown/pkglist-explicit.txt /home/unknown/pkglist-repo.txt /home/unknown/pkglist-aur.txt /home/unknown/pkglist-clean.txt Older extra copy: /home/unknown/Downloads/packagesinstalled.txt
For actually reinstalling packages onto Artix, the most useful files are usually the explicit, repo, and AUR lists rather than the giant full dump.
Step 15

Order of Recovery After First Boot

1. Confirm networking and s6 services 2. Confirm GRUB boots cleanly in BIOS and UEFI mode 3. Set up sudo/doas 4. Enable the Btrfs swapfile in /etc/fstab 5. Enable zramen under s6 and reboot once 6. Install Hyprland-facing user packages 7. Restore packages from pkglist-explicit / repo / aur 8. Restore dotfiles and app-specific config 9. Re-enable any deferred user-session services
Example first-boot swap + zram setup: echo '/swapfile none swap defaults 0 0' >> /etc/fstab touch /etc/s6/adminsv/default/contents.d/zramen s6-db-reload
For this Artix s6 guide, use zramen with zramen-s6. The point is still the same: keep a disk-backed swapfile on Btrfs if you want fallback swap, and add zram for fast compressed RAM-backed swap.
Back to top