Installing Void Linux on a Gen 3 Thinkpad T14s

2026-06-06

Author’s Note: This post will not follow my usual verbose narrative format. This is more of a notes dump from my recent experience installing Void Linux on my laptop (twice!). My T14s has an AMD Ryzen 5 Pro processor and as such these notes do not cover Intel or Nvidia microcode.

Read The Friendly Manual

The installation process of Void Linux is quite remarkable in that despite it being minimal and reliant on the user to install and configure most things, it’s a shockingly painless process. This is due to the incredible Void Linux Handbook. The majority of the installation process is smiply following along with the handbook. Occasionally decisions must be made and slight detours taken. These extra bits which may not be covered by the handbook are what I’ve documented here.

Each section below corresponds with a section of the handbook for convenient cross-reference.

<Install>

The initial steps of the installer are straightforward and required little-to-no deviation.

User groups

Add the user to the standard run of groups.

wheel floppy dialout audio video cdrom optical storage network kvm input users xbuilder

Partitions

Wipe the slate clean and use a simple but effective partition layout: boot, swap, system.

Filesystems

  1. 512M - Type: vfat - Mount point: /boot/efi
  2. 8G - Type: swap
  3. - Type: ext4 - Monut point: `/`

(Post-install, pre-reboot)

Enable dhcpcd and wpa_supplicant services if not already enabled.

Reboot.

<Configuration>

Login with root and update:

xbps-install -Su

Enable passwordless sudo:

<../Documentation>

Install some basics: xbps-install xtools void-docs cronie vim

Install more documentation (see how nice xtools are?):

xi man-pages-devel man-pages-posix

<../Firmware>

(In the handbook but important so adding here too)

Enable the non-free package repo:

xi void-repo-nonfree

Install AMD microcode and GNU binutils:

xi linux-firmware-amd binutils

May receive an error that linux-firmware-amd is already installed. If so, great! The installer detected it correctly!

<../Users and Groups>

Install fish, then continue on in the handbook to set it for the non-root user:

xi fish-shell

I also like to set root’s shell to bash as it’s easier to work with than dash/sh.

chsh -s /usr/bin/bash

<../Security/AppArmor>

After making the edits according to the handbook, reboot.

Verify the new grub cli arguments are being used: cat /proc/cmdline

Verify AppArmor is enabled: aa-enabled # Yes

<../Date/Time>

Use Chrony and follow instructions is the respective handbook section.

<../Power Management>

Use tlp and follow instructions is the respective handbook section.

<../Network/Wireless>

Make sure wifi interface isn’t blocked (shouldn’t be).

rfkill list

Set up wifi using wpa_cli

# Get interface name
ip link show

# Start wpa_cli interactive session
wpa_cli -i <interface identifier from the previous command>

# Scan for available networks
scan

# View scan results and take note of the SSID
scan_results

# Create a new network profile
# (Profile ID (PID) should be the integer at the end of the output)
add_network

# Configure the network credentials
set_network PID ssid "the_ssid_from_scan"
set_network PID psk "the wifi password"

# For hidden networks, may need to additionally run
set_network 0 ssid 1

# Enable the network
# Handshake attempt logs to stdout so you will know immediately if the connection was successful.
enable_network 0

# Save and quit
save_config
quit

If the enable_network output indicated a successful connection, verify wifi is working with a quick ping:

ping 1.1.1.1

<../Network Filesystems>

Come back to this after everything else is done and the user desktop environment is setup.

<../Session and Seat Management>

Use dbus and follow instructions is the respective handbook section.

D-Bus should already be installed by this point. If not, install it.

Enable the service:

ln -s /etc/sv/dbus /var/service

Install dumb_runtime_dir for automated XDG_RUNTIME_DIR:

xi dumb_runtime_dir

Enable PAM dum runtime dir by removing the comment delimiter from the following line in the PAM configuration file /etc/pam.d/system-login:

session optional pam_dumb_runtime_dir.so

Reboot.

Login as the non-root user.

Verify dumb_runtime_dir is working:

echo $XDG_RUNTIME_DIR # /run/user/1000

Logout and back in as root.

<../Graphical Session/Graphics Drivers/AMD or ATI>

Use Xorg (because Suckless is goddamn awesome) and follow instructions is the respective handbook section. We’re not using a login manager either.

Remember to also install mesa-vaapi for video acceleration and mesa-vulkan-radeon for Vulkan support.

Install picom, qutebrowser, base-devel, libX11-devel, libXft-devel, libxinerama-devel, dbus-x11

Logout and log back in as non-root user.

Clone suckless applications and dotfiles from private repo.

Make sure the user’s shell profile has a shell-compatible version of the below. This starts X if X isn’t already running and the current user logs in on TTY1.

if not set -q DISPLAY
    if test (tty) = "/dev/tty1"
        exec startx
    end
end

Make sure ~/.xinitrc exists and is adequately populated to handle whatever X apps need run for the user’s X session.

<../Graphical Session/Fonts>

Logout and back in as root.

Install some baseline fonts:

xi font-iosevka dejavu-fonts-ttf noto-fonts-ttf noto-fonts-cjk noto-fonts-emoji nerd-fonts-symbols-ttf

<../Multimedia/PipeWire>

Install PipeWire and wiremix (tui mixer for pipewire):

xi pipewire wiremix

Continue PipeWire setup (including PulseAudio Interface!) per the handbook.

Reboot, login in as non-root, and test with wpctl status.

<Misc>

Install ad blocking for qutebrowser:

xi python3-adblock

In qute, update ad blocking:

:adblock-update

Install some misc packages (not an all-inclusive list):

xi bat brightnessctl emacs fzf thefuck wget

Set natural scrolling for the touchpad by creating the directory+file /etc/X11/xorg.conf.d/30-touchpad.conf with the contents:

Section "InputClass"
    Identifier "touchpad"
    MatchIsTouchpad "on"
    Driver "libinput"
    Option "NaturalScrolling" "true"
EndSection

Go back to the <Configuration/Network Filesystems> section of the handbook and setup the NFS.


That’s it! Void Linux is installed and ready to use on a gen 3 Thinkpad T14s (AMD)!