My Arch Linux installation guide for Framework Laptop 13 (AMD Ryzen 7040). LUKS2 encrypted BTRFS with Limine bootloader.
Based on guides by yovko and mgajewskik, adapted for Framework AMD hardware.
Overview
- Encryption: LUKS2 on system partition
- Filesystem: BTRFS with subvolumes (snapshots, compression)
- Bootloader: Limine (lightweight, Snapper-friendly)
- Hardware: Framework Laptop 13 AMD (Ryzen 7040 series)
Preparation
Boot from the official Arch ISO.
Connect to WiFi
iwctl station wlan0 connect <SSID>Set keymap and font
loadkeys us
setfont ter-132bVerify UEFI mode
cat /sys/firmware/efi/fw_platform_size
# Should return 64(Optional) SSH in from another machine
passwd # set root password
ip addr show # get IP
# From other machine: ssh root@<ip>Disk Partitioning
Assuming single-boot Arch on /dev/nvme0n1.
Wipe existing partitions
sgdisk --zap-all /dev/nvme0n1Create partitions
- ESP: 2GB FAT32 for
/boot - System: Rest of disk, LUKS2 encrypted BTRFS
parted --script /dev/nvme0n1 \
mklabel gpt \
mkpart ESP fat32 1MiB 2049MiB \
set 1 esp on \
mkpart Linux btrfs 2050MiB 100%Format ESP
mkfs.fat -F 32 /dev/nvme0n1p1Encryption Setup
Create LUKS container
cryptsetup luksFormat /dev/nvme0n1p2Save the UUID — you’ll need it for the bootloader:
cryptsetup luksUUID /dev/nvme0n1p2Open the container
cryptsetup open /dev/nvme0n1p2 rootBTRFS Setup
Format and mount
mkfs.btrfs /dev/mapper/root
mount /dev/mapper/root /mntCreate subvolumes
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@var_log
btrfs subvolume create /mnt/@var_cache
btrfs subvolume create /mnt/@snapshotsRemount with subvolumes
umount /mnt
mount -o compress=zstd:1,noatime,subvol=@ /dev/mapper/root /mnt
mount --mkdir -o compress=zstd:1,noatime,subvol=@home /dev/mapper/root /mnt/home
mount --mkdir -o compress=zstd:1,noatime,subvol=@var_log /dev/mapper/root /mnt/var/log
mount --mkdir -o compress=zstd:1,noatime,subvol=@var_cache /dev/mapper/root /mnt/var/cache
mount --mkdir -o compress=zstd:1,noatime,subvol=@snapshots /dev/mapper/root /mnt/.snapshots
mount --mkdir /dev/nvme0n1p1 /mnt/bootInstall Base System
pacman -Syy
pacstrap -K /mnt \
base base-devel linux linux-firmware linux-headers \
git vim neovim \
btrfs-progs efibootmgr limine cryptsetup \
networkmanager iwd wireless-regdb \
reflector bash-completion zsh \
pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber sof-firmware \
bluez bluez-utils \
acpi acpid power-profiles-daemon \
firewalld cups avahi nss-mdns \
util-linux terminus-font openssh man sudo rsync \
amd-ucode mesa vulkan-radeon libva-mesa-driverGenerate fstab
genfstab -U /mnt >> /mnt/etc/fstabSystem Configuration
Chroot in
arch-chroot /mntTimezone and locale
ln -sf /usr/share/zoneinfo/America/Denver /etc/localtime
hwclock --systohc
# Edit /etc/locale.gen, uncomment en_US.UTF-8 UTF-8
vim /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.confConsole font and keymap
cat > /etc/vconsole.conf << EOF
KEYMAP=us
FONT=ter-132b
EOFHostname
echo "framework" > /etc/hostnameRoot password
passwdCreate user
useradd -mG wheel phil
passwd phil
EDITOR=vim visudo # uncomment %wheel ALL=(ALL:ALL) ALLConfigure mkinitcpio
Edit /etc/mkinitcpio.conf:
MODULES=(btrfs)
BINARIES=(/usr/bin/btrfs)
HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt filesystems fsck)Note: Add
resumeafterfilesystemsif you want hibernation support.
Regenerate:
mkinitcpio -PLimine Bootloader
Install Limine
mkdir -p /boot/EFI/limine
cp /usr/share/limine/BOOTX64.EFI /boot/EFI/limine/Create NVRAM entry
efibootmgr --create --disk /dev/nvme0n1 --part 1 \
--label "Arch Linux" \
--loader '\EFI\limine\BOOTX64.EFI' \
--unicodeConfigure Limine
Create /boot/EFI/limine/limine.conf:
timeout: 3
/Arch Linux
protocol: linux
path: boot():/vmlinuz-linux
cmdline: quiet cryptdevice=UUID=<YOUR-LUKS-UUID>:root root=/dev/mapper/root rw rootflags=subvol=@ rootfstype=btrfs cfg80211.ieee80211_regdom=US
module_path: boot():/initramfs-linux.img
/Arch Linux (fallback)
protocol: linux
path: boot():/vmlinuz-linux
cmdline: quiet cryptdevice=UUID=<YOUR-LUKS-UUID>:root root=/dev/mapper/root rw rootflags=subvol=@ rootfstype=btrfs cfg80211.ieee80211_regdom=US
module_path: boot():/initramfs-linux-fallback.img
Replace <YOUR-LUKS-UUID> with the UUID from earlier.
Enable Services
systemctl enable NetworkManager
systemctl enable iwd
systemctl enable bluetooth
systemctl enable cups
systemctl enable avahi-daemon
systemctl enable firewalld
systemctl enable acpid
systemctl enable power-profiles-daemon
systemctl enable reflector.timer
systemctl enable fstrim.timerFramework AMD Tweaks
Disable PC speaker
Create /etc/modprobe.d/nobeep.conf:
blacklist pcspkr
blacklist snd_pcsp
Lid behavior
Edit /etc/systemd/logind.conf:
HandlePowerKey=ignore
HandlePowerKeyLongPress=poweroff
HandleLidSwitch=suspend
HandleLidSwitchExternalPower=suspend
HandleLidSwitchDocked=ignoreWiFi performance (MediaTek RZ616)
The AMD Framework uses MediaTek WiFi which needs some tuning.
Set regulatory domain — without this you’re stuck on 2.4GHz:
# Add to Limine cmdline:
cfg80211.ieee80211_regdom=USUse iwd as NetworkManager backend for better stability:
Create /etc/NetworkManager/conf.d/wifi-backend.conf:
[device]
wifi.backend=iwdDisable WiFi power saving to prevent disconnects:
Create /etc/modprobe.d/mt7921.conf:
options mt7921e power_save=0
Headphone jack buzz fix
The AMD board has a slight buzz when audio is idle. Disable power saving:
Create /etc/modprobe.d/audio-powersave.conf:
options snd_hda_intel power_save=0
USB-A expansion card power drain
Avoid placing USB-A cards in the two rear slots — they cause higher idle power drain. Front slots are fine.
HDMI/DisplayPort expansion cards
Don’t use the front-left slot for HDMI/DP cards — may not work on AMD.
Reboot
exit
umount -R /mnt
cryptsetup close root
rebootRemove the USB drive.
Post-Install
Connect to WiFi
nmcli device wifi connect <SSID> password <password>Install paru (AUR helper)
sudo pacman -S --needed git base-devel
git clone https://aur.archlinux.org/paru.git
cd paru && makepkg -si
cd .. && rm -rf paruEnable pacman colors
Uncomment Color in /etc/pacman.conf.
Time sync
timedatectl set-ntp truePacman hook for Limine updates
Create /etc/pacman.d/hooks/99-limine.hook:
[Trigger]
Operation = Install
Operation = Upgrade
Type = Package
Target = limine
[Action]
Description = Deploying Limine after upgrade...
When = PostTransaction
Exec = /usr/bin/cp /usr/share/limine/BOOTX64.EFI /boot/EFI/limine/BIOS updates
Framework AMD is well supported on LVFS. Check for updates:
sudo pacman -S fwupd
fwupdmgr refresh
fwupdmgr get-updates
fwupdmgr updateNote: If you have a batch 1 or 2 device, make sure BIOS is at least 3.03 before updating further.
Next Steps
- Hyprland Setup — graphical environment
- Network — advanced networking
- Snapper for BTRFS snapshots
- Swap/hibernation setup