Framework 16

Begin

I recently acquired a Framework 16" Laptop and of course I need to install Arch on it.

Steps

Booting the live USB

I don't actually have any USB, but I do have a 1 TB expansion card for the laptop, so I used Etcher to flash the Arch ISO onto it.

Secure boot has to be disabled first to allow booting from USB devices.

Once booted I just followed through the installation guide.

Networking

1iwctl # drops you in prompt
1[iwd]# device list
2[iwd]# station wlan0 scan 
3[iwd]# station <device> connect <ssid> 

Disk layout

Since I wanted an encrypted disk and did not need to run a logical partition across multiple physical drives, I chose LVM on LUKS and just did 1 big partition.

 1fdisk /dev/nvme0n1
 2# create boot partition
 3> n
 4> +512M
 5> t
 6> 1
 7
 8# fill the rest of the drive for root
 9n
10<enter>
11<enter>
12<enter>
13w # write out the changes, also worth verifying

Once the partitions have been created, they need to be set up.

 1$ lsblk # verify partition creation
 2$ mkfs.fat -F32 /dev/nvme0n1p1 # format EFI
 3$ cryptsetup -v luksFormat /dev/nvme0n1p2 encrypt root
 4$ cryptsetup open /dev/nvme0n1p2 cryptlvm # open as cryptlvm
 5
 6# setup LVM
 7$ pvcreate /dev/mapper/cryptlvm
 8$ vgcreate volgroup /dev/mapper/cryptlvm
 9
10$ lvcreate -L 32G -n swap vg0 # I have 32G of RAM and want to hibernate 
11$ lvcreate -l 100%FREE -n lv-root vg0
12
13$ mkfs.ext4 /dev/vg0/lv-root
14$ mkswap /dev/vg0/swap
15
16$ mount /dev/vg0/lv-root /mnt
17$ mount --mkdir /dev/nvme0n1p1 /mnt/boot
18$ swapon /dev/vg0/swap 
19
20$ pacstrap -K /mnt base linux linux-firmware lvm2 vim networkmanager sbctl
21
22$ genfstab -U /mnt >> /mnt/etc/fstab
23# updated 022 to 077 in /mnt/etc/fstab
24
25$ arch-chroot /mnt
26
27$ # set hostname, locale, timezone

add hooks to decrypt in /etc/mkinitcpio.conf

HOOKS=(base systemd autodetect microcode modconf kms keyboard sd-vconsole block sd-encrypt lvm2 filesystems fsck)
1bootctl install
2vim /boot/loader/entries/arch.conf
title   Arch Linux
linux   /vmlinuz-linux
initrd  /initramfs-linux.img
options rd.luks.name=device-UUID=cryptlvm root=/dev/vg0/lv-root

After install

Follow through with the Arch Wiki Framework 16

Added a udev rules to customise keyboard via https://keyboard.frame.work (you need to use chrome/chromium) https://github.com/qmk/qmk_firmware/blob/master/util/udev/50-qmk.rules

chromium blurry set chrome://flags set ozone to Wayland

Useful commands

check user installed packages

1pacman -Qei | awk '/^Name/ { name=$3 } /^Groups/ { if ( $3 != "base" && $3 != "base-devel" ) { print name } }'

KVM

1yay -S virt-manager qemu-base dnsmasq
2yay -S qemu-hw-usb-host # optional for usb host support
3sudo usermod -aG libvirt $(whoami)
4sudo systemctl enable --now libvirtd

Networking

Bridge networking is not a thing with a wifi only laptop, use NAT.

Windows

needs TPM sudo pacman -S swtpm add a TPM emulator in virt-manager

Gaming

Since the laptop has a dGPU I wanted to see how it handled gaming.

Aside from installing steam, I also installed gamescope, a microcompositor that runs within your current desktop environment. To actually use it you basically have to the game launch options to DRI_PRIME=1 gamescope -W 2560 -H 1600 -r 165 -f -- %command%.

This launches the game with gamescope, and also sets the dGPU to be used. I'm not trying to play any AAA titles, and I played a bit of Hades II and Balatro with no issue.

The real issue was pairing an XBOX Wireless Controller. There is a known bug using the controller over Bluetooth. Basically it repeatedly connects/disconnects in a loop and is unusable. The only solution is to update the controller firmware. I tried using virt-manager to spin up a VM and pass the controller into that and update it, but the Xbox Accessories App refused to pick it up.

Not to be deterred from this adventure I used Rufus ito install Windows To Go via the windows VM onto the 1TB expansion card I had. This allowed me to boot Windows off the card and update the controller.

Sway

Drop in replacement for i3

yay -S sway swayidle swaylock swaynag

wlsunset

kanshi profiles for hotplug displays

Polkit

yay -S polkit-gnome

HyprPanel

REMOVED FOR ##`nwg-panel`

HyprPanel

A menubar application that provides a fairly complete user experience out of the box. Shows volume/networking/battery etc and drop down menus for each item.

yay -S power-profiles-daemon

makes power profiles handling available over D-Bus

nwg-panel

REMOVED FOR ##waybar

1yay -S nwg-panel

Waybar

1yay -S waybar`

https://github.com/victordantasdev/waybar I stole this config and tidied up the scripts.

Power Management

yay -S power-profiles-daemon

 1$ powerprofilesctl
 2   performance:
 3     CpuDriver:  amd_pstate
 4     PlatformDriver:     platform_profile
 5     Degraded:   no
 6 
 7   balanced:
 8     CpuDriver:  amd_pstate
 9     PlatformDriver:     platform_profile
10 
11 * power-saver:
12     CpuDriver:  amd_pstate
13     PlatformDriver:     platform_profile
1yay -S corectrl

You can't change power settings on the GPU unless the GPU is running.

needs a polkit agent installed or it'll quietly die

Fingerprint

yay -S fprintd

fprintd-enroll

Greeter

yay -S sddm

--no-global-shortcuts to prevent login screen bypasses

[General]
DisplayServer=wayland
GreeterEnvironment=QT_WAYLAND_SHELL_INTEGRATION=layer-shell

[Wayland]
CompositorCommand=kwin_wayland --drm --no-lockscreen --no-global-shortcuts --locale1

Offline Doc Viewing

1yay -S arch-wiki-docs
2yay -S arch-wiki-lite 
3
4wiki-search-html amd
5wiki-search-html 0 # your browser now opens

Default Browser

xdg-settings set default-web-browser firefox.desktop

Time

Timezones

1vim /etc/NetworkManager/dispatcher.d/09-timezone`



1#!/bin/sh
2case "$2" in
3    up)
4        timedatectl set-timezone "$(curl --fail https://ipapi.co/timezone)"
5    ;;
6esac
1chmod +x /etc/NetworkManager/dispatcher.d/09-timezone

Network Time Protocol

systemd-timesyncd

To start timedatectl set-ntp true

Mail

Aerc

yay -S isync aerc

Setup mbsync and point aerc at it

msmtp and msmtp-mta for the sendmail alias

I find msmtp and more suitable to my needs of sending an email, no offline queueing.

Domain Name Service (DNS)

Multiple services like to think they own /etc/resolv.conf and end up clobbering it. The solution is to use systemd-resolved or resolvconf

sudo systemctl enable systemd-resolved.service

Make sure that /etc/resolv.conf is a symlink to stub-resolv.conf otherwise run

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

and restart all services

to check whats going on run

resolvectl status

Audio

yay -S easyeffects lsp-plugins calf

import profile https://gist.github.com/amesb/cc5d717472d7e322b5f551b643ff03f4

exec easyeffects --gapplication-service on DE start

Music

mpd - server

rmpc - client

mpd-mpris if you want playerctl to work

Fonts

mkdir ~/.local/share/fonts and put folders in here

fc-cache to update

fc-list to check

Terminal

Foot

I used alacritty for a while, changed to using ghostty since it was all hype but changed to foot ghotty has a slow start up time, I worked around by launching the first instance in a scratch pad but foot is just fast from the start.

yay -S foot

Daily Usage

yay -Scc clean caches

yay -S --asexplicit install packages as explicitly installed

yay -Yc removes unneeded dependencies yay -Ycc removes unneeded dependencies and optional packages

yay -Pw shows news since you list updated

← Incoming Links (2)

fw-fanctrl
wiki • Line 5
"Framework 16"
Index
wiki • Line 16
"- Framework 16 (2025..."

→ Outgoing Links

No outgoing links