<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Runbooks on Osaigbovo Omere</title><link>https://osaigbovo.xyz/runbooks/</link><description>Recent posts from Osaigbovo Omere</description><generator>Hugo -- gohugo.io</generator><language>en-gb</language><managingEditor>mail@osaigbovo.xyz (Osaigbovo Omere)</managingEditor><webMaster>mail@osaigbovo.xyz (Osaigbovo Omere)</webMaster><lastBuildDate>Thu, 14 May 2026 14:52:11 +0100</lastBuildDate><atom:link href="https://osaigbovo.xyz/runbooks/index.xml" rel="self" type="application/rss+xml"/><item><title>Tiling Engine Hot-Swapping in Hyprland</title><link>https://osaigbovo.xyz/runbooks/tiling-engine-hot-swapping-in-hyprland/</link><pubDate>Fri, 01 May 2026 00:00:00 +0000</pubDate><author>mail@osaigbovo.xyz (Osaigbovo Omere)</author><guid>https://osaigbovo.xyz/runbooks/tiling-engine-hot-swapping-in-hyprland/</guid><description>&lt;p&gt;For a long time, I treated Hyprland’s default layout engine, Dwindle, as an unquestioned standard. It worked. You open a window, it splits the screen. You open another, it splits again. It is organic, fractal, and chaotic.&lt;/p&gt;
&lt;p&gt;Recently, while building a landing page for a friend, that chaos became a liability. I needed a highly specific, static geometry: the browser dead centre, my terminal on the right, and my notes on the left. While you can manually resize and shove windows into a semblance of this layout using Dwindle, it lacks mathematical permanence. The moment you open a fourth window to check a reference, the fractal algorithm kicks in and destroys your geometry.&lt;/p&gt;
&lt;p&gt;I needed mathematical accuracy. I needed the system to enforce the layout, rather than fighting the system to maintain it.&lt;/p&gt;
&lt;p&gt;This led me to abandon Dwindle for structured work and adopt Hyprland&amp;rsquo;s Master layout, specifically configured for a centred orientation.&lt;/p&gt;
&lt;h3 id="the-centred-master"&gt;The Centred Master&lt;/h3&gt;
&lt;p&gt;The Master layout enforces a strict visual hierarchy. It designates a primary &amp;ldquo;master&amp;rdquo; zone that occupies a fixed mathematical percentage of the screen, and relegates all subsequent windows into subservient &amp;ldquo;stack&amp;rdquo; columns.&lt;/p&gt;
&lt;p&gt;By setting the orientation to &lt;code&gt;center&lt;/code&gt;, the master window is locked in the middle of the monitor, while the stacks form neat pillars in your peripheral vision on the left and right.&lt;/p&gt;
&lt;p&gt;&lt;img src="202605010837.png" alt="202605010837.png"&gt;&lt;br&gt;
&lt;em&gt;A mathematically precise workspace: 50% central focus, 25% peripheral reference columns.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="workspace-engine-swapping"&gt;Workspace Engine Swapping&lt;/h3&gt;
&lt;p&gt;I realised I did not have to choose between the predictable structure of the Master layout and the organic chaos of Dwindle. Hyprland allows you to declare global layout overrides on a per-workspace basis.&lt;/p&gt;
&lt;p&gt;I hardcoded my environment to swap engines dynamically. The odd workspaces (1, 3, 5, 7, 9) are strictly governed by the Master layout for development and writing. The even workspaces (2, 4, 6, 8, 10) default to Dwindle for ad-hoc browsing and terminal tasks.&lt;/p&gt;
&lt;p&gt;&lt;img src="202605010837-1.png" alt="202605010837-1.png"&gt;&lt;br&gt;
&lt;em&gt;The Dwindle engine running on an even workspace, dividing space recursively.&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="the-configuration"&gt;The Configuration&lt;/h3&gt;
&lt;p&gt;Below is the exact &lt;code&gt;appearance.conf&lt;/code&gt; required to achieve this environment. It enforces the centred master, dictates the workspace rules, and strips out all visual noise&amp;ndash;no rounding, no blur, no drop shadows. Just functional geometry snapping into place.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# GENERAL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;general {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;gaps_in&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; gaps_out = 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; border_size = 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;col.active_border&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;$foreground
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; col.inactive_border = $background&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;layout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# DECORATION&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;decoration {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;rounding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;blur {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;shadow {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ANIMATIONS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;animations {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; bezier = sharp, 0.25, 1, 0.5, 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; animation = windows, 1, 4, sharp, slide
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; animation = windowsOut, 1, 4, sharp, slide
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; animation = border, 1, 10, default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; animation = fade, 1, 5, default
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; animation = workspaces, 1, 5, sharp, slide&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# LAYOUT ENGINES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;master {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;mfact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0.50
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; orientation = center
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; new_on_top = true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; new_status = master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;dwindle {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;pseudotile&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; preserve_split = yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# WORKSPACES&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# odds: master layout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;1, layout:master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;3, layout:master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;5, layout:master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;7, layout:master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;9, layout:master&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# evens: dwindle layout&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;2, layout:dwindle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;4, layout:dwindle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;6, layout:dwindle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;8, layout:dwindle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;workspace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;10, layout:dwindle&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# MISCELLANEOUS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;misc {&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="na"&gt;force_default_wallpaper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt; disable_hyprland_logo = true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>My Arch Install</title><link>https://osaigbovo.xyz/runbooks/my-arch-install/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><author>mail@osaigbovo.xyz (Osaigbovo Omere)</author><guid>https://osaigbovo.xyz/runbooks/my-arch-install/</guid><description>&lt;h2 id="1-pre-flight"&gt;1. Pre-Flight&lt;/h2&gt;
&lt;p&gt;Boot the Arch live USB in UEFI mode. Confirm it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ls /sys/firmware/efi/efivars
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Set the keymap immediately. You will be typing a LUKS passphrase shortly, and the default US layout will silently mangle it.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;loadkeys uk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Connect to the network and synchronise the clock:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ping -c &lt;span class="m"&gt;3&lt;/span&gt; archlinux.org
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# wireless if needed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;iwctl
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# station wlan0 scan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# station wlan0 connect &amp;lt;ssid&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;timedatectl set-ntp &lt;span class="nb"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;timedatectl status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="2-storage-architecture"&gt;2. Storage Architecture&lt;/h2&gt;
&lt;p&gt;The partition layout is straightforward:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Partition&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/dev/nvme0n1p1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1 GiB&lt;/td&gt;
&lt;td&gt;EFI System Partition — vfat, unencrypted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/dev/nvme0n1p2&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;2 GiB&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/boot&lt;/code&gt; — ext4, unencrypted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/dev/nvme0n1p3&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~253 GiB&lt;/td&gt;
&lt;td&gt;LUKS2 container&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Inside the LUKS container, LVM carves out four volumes:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Volume&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Filesystem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;vg0/swap&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;16 GiB&lt;/td&gt;
&lt;td&gt;swap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;vg0/root&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;50 GiB&lt;/td&gt;
&lt;td&gt;XFS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;vg0/var&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;20 GiB&lt;/td&gt;
&lt;td&gt;XFS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;vg0/home&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;~167 GiB&lt;/td&gt;
&lt;td&gt;XFS&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;16 GiB of swap is twice the physical RAM. That covers hibernation without spilling.&lt;/p&gt;
&lt;h3 id="21-wipe-the-drive"&gt;2.1 Wipe the Drive&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wipefs -a /dev/nvme0n1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="22-partition"&gt;2.2 Partition&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parted -s /dev/nvme0n1 mklabel gpt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parted -s /dev/nvme0n1 mkpart ESP fat32 1MiB 1025MiB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parted -s /dev/nvme0n1 &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; esp on
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parted -s /dev/nvme0n1 mkpart primary ext4 1025MiB 3073MiB
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;parted -s /dev/nvme0n1 mkpart primary 3073MiB 100%
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="23-encrypt-the-root-partition"&gt;2.3 Encrypt the Root Partition&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cryptsetup luksFormat --type luks2 --cipher aes-xts-plain64 --key-size &lt;span class="m"&gt;512&lt;/span&gt; /dev/nvme0n1p3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cryptsetup open /dev/nvme0n1p3 cryptroot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;/boot&lt;/code&gt; sits on its own unencrypted partition — GRUB reads it directly. &lt;code&gt;GRUB_ENABLE_CRYPTODISK&lt;/code&gt; is not needed here.&lt;/p&gt;
&lt;h3 id="24-lvm"&gt;2.4 LVM&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pvcreate /dev/mapper/cryptroot
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgcreate vg0 /dev/mapper/cryptroot
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lvcreate -L 16G -n swap vg0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lvcreate -L 50G -n root vg0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lvcreate -L 20G -n var vg0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;lvcreate -l 100%FREE -n home vg0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="25-format"&gt;2.5 Format&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkfs.vfat -F32 /dev/nvme0n1p1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkfs.ext4 /dev/nvme0n1p2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkfs.xfs /dev/vg0/root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkfs.xfs /dev/vg0/var
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkfs.xfs /dev/vg0/home
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkswap /dev/vg0/swap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="26-mount"&gt;2.6 Mount&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/vg0/root /mnt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkdir -p /mnt/&lt;span class="o"&gt;{&lt;/span&gt;boot/efi,home,var&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/nvme0n1p2 /mnt/boot
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/nvme0n1p1 /mnt/boot/efi
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/vg0/var /mnt/var
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mount /dev/vg0/home /mnt/home
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swapon /dev/vg0/swap
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-base-installation"&gt;3. Base Installation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pacstrap -K /mnt &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; base base-devel linux linux-headers linux-firmware &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; intel-ucode &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; lvm2 cryptsetup xfsprogs e2fsprogs dosfstools &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; neovim tmux git networkmanager man-db man-pages sudo &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mesa vulkan-intel intel-media-driver &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hyprland waybar rofi-wayland &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; xdg-desktop-portal-hyprland xdg-desktop-portal-gtk &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; xdg-user-dirs polkit-gnome &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ly &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; kitty wl-clipboard grim slurp &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hypridle hyprlock mako &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pipewire pipewire-alsa pipewire-pulse pipewire-jack wireplumber pavucontrol &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bluez bluez-utils &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; tlp tlp-rdw acpid brightnessctl &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ttf-ibm-plex noto-fonts noto-fonts-emoji ttf-jetbrains-mono-nerd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then generate the filesystem table:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;genfstab -U /mnt &amp;gt;&amp;gt; /mnt/etc/fstab
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat /mnt/etc/fstab
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="4-system-configuration"&gt;4. System Configuration&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;arch-chroot /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="41-timezone-and-locale"&gt;4.1 Timezone and Locale&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -sf /usr/share/zoneinfo/Africa/Lagos /etc/localtime
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hwclock --systohc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s1"&gt;&amp;#39;s/^#en_GB.UTF-8 UTF-8/en_GB.UTF-8 UTF-8/&amp;#39;&lt;/span&gt; /etc/locale.gen
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;locale-gen
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;LANG=en_GB.UTF-8&amp;#34;&lt;/span&gt; &amp;gt; /etc/locale.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="42-keymap"&gt;4.2 Keymap&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;localectl&lt;/code&gt; requires a running systemd instance. Inside &lt;code&gt;arch-chroot&lt;/code&gt; it will either fail silently or error out, leaving you with no keymap on first boot. Write directly to &lt;code&gt;vconsole.conf&lt;/code&gt; instead — the &lt;code&gt;keyboard&lt;/code&gt; and &lt;code&gt;keymap&lt;/code&gt; mkinitcpio hooks read it automatically.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;KEYMAP=uk&amp;#34;&lt;/span&gt; &amp;gt; /etc/vconsole.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="43-network-identity"&gt;4.3 Network Identity&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;arch&amp;#34;&lt;/span&gt; &amp;gt; /etc/hostname
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &lt;span class="s"&gt;&amp;lt;&amp;lt;EOF &amp;gt; /etc/hosts
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;127.0.0.1 localhost
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;::1 localhost
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;127.0.1.1 arch.localdomain arch
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; NetworkManager
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="44-initramfs"&gt;4.4 Initramfs&lt;/h3&gt;
&lt;p&gt;Edit &lt;code&gt;/etc/mkinitcpio.conf&lt;/code&gt; and set the &lt;code&gt;HOOKS&lt;/code&gt; array. The ordering is not optional — &lt;code&gt;encrypt&lt;/code&gt; must come before &lt;code&gt;lvm2&lt;/code&gt;, and &lt;code&gt;resume&lt;/code&gt; must follow &lt;code&gt;lvm2&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block encrypt lvm2 resume filesystems fsck)
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nvim /etc/mkinitcpio.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mkinitcpio -P
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="5-bootloader"&gt;5. Bootloader&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pacman -S grub efibootmgr
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Get the UUID of the LUKS partition:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;blkid /dev/nvme0n1p3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit &lt;code&gt;/etc/default/grub&lt;/code&gt;. Set &lt;code&gt;GRUB_CMDLINE_LINUX&lt;/code&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GRUB_CMDLINE_LINUX=&amp;#34;cryptdevice=UUID=&amp;lt;uuid&amp;gt;:cryptroot root=/dev/mapper/vg0-root resume=/dev/mapper/vg0-swap&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Replace &lt;code&gt;&amp;lt;uuid&amp;gt;&lt;/code&gt; with the actual string from &lt;code&gt;blkid&lt;/code&gt;. The &lt;code&gt;resume=&lt;/code&gt; parameter enables hibernation via the swap LV. Drop it if you do not need hibernation.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;nvim /etc/default/grub
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Install and generate the config. The &lt;code&gt;--removable&lt;/code&gt; flag writes a fallback EFI entry that survives firmware resets.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;grub-install --target&lt;span class="o"&gt;=&lt;/span&gt;x86_64-efi --efi-directory&lt;span class="o"&gt;=&lt;/span&gt;/boot/efi &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --bootloader-id&lt;span class="o"&gt;=&lt;/span&gt;GRUB --removable
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;grub-mkconfig -o /boot/grub/grub.cfg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="6-user-management"&gt;6. User Management&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;passwd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;useradd -m -s /bin/bash -G wheel,video,audio,storage,input osaigbovo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;passwd osaigbovo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# uncomment: %wheel ALL=(ALL:ALL) ALL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;EDITOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nvim visudo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;input&lt;/code&gt; group is required for Wayland input device access under Hyprland.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="7-desktop-services"&gt;7. Desktop Services&lt;/h2&gt;
&lt;p&gt;Enable everything before the first reboot:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; ly
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; bluetooth
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tlp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; tlp-rdw
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; acpid
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# tlp manages rfkill — mask the systemd units to avoid conflicts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl mask systemd-rfkill.service systemd-rfkill.socket
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Pipewire runs as a user session service, not a system service. On first login, enable it as your user:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl --user &lt;span class="nb"&gt;enable&lt;/span&gt; --now pipewire pipewire-pulse wireplumber
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl --user &lt;span class="nb"&gt;enable&lt;/span&gt; --now xdg-desktop-portal-hyprland
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="71-hyprland-configuration"&gt;7.1 Hyprland Configuration&lt;/h3&gt;
&lt;p&gt;Add these to &lt;code&gt;~/.config/hypr/hyprland.conf&lt;/code&gt; to start the essential session components:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exec-once &lt;span class="o"&gt;=&lt;/span&gt; /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exec-once &lt;span class="o"&gt;=&lt;/span&gt; mako
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exec-once &lt;span class="o"&gt;=&lt;/span&gt; waybar
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exec-once &lt;span class="o"&gt;=&lt;/span&gt; hypridle
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The UHD 620 needs a few environment variables set for correct VA-API, cursor rendering, and Qt/Firefox Wayland compatibility:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; LIBVA_DRIVER_NAME,iHD
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; WLR_NO_HARDWARE_CURSORS,1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; XDG_SESSION_TYPE,wayland
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; XDG_SESSION_DESKTOP,Hyprland
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; QT_QPA_PLATFORM,wayland
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; MOZ_ENABLE_WAYLAND,1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="8-finalisation"&gt;8. Finalisation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;swapoff -a
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;umount -R /mnt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vgchange -an vg0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cryptsetup close cryptroot
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;reboot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On reboot: GRUB hands off to the kernel, the initramfs prompts for the LUKS passphrase, LVM activates, root mounts, &lt;code&gt;ly&lt;/code&gt; presents the login, and Hyprland takes over.&lt;/p&gt;</description></item><item><title>Package Categories and References</title><link>https://osaigbovo.xyz/runbooks/package-categories-and-references/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>mail@osaigbovo.xyz (Osaigbovo Omere)</author><guid>https://osaigbovo.xyz/runbooks/package-categories-and-references/</guid><description>&lt;hr&gt;
&lt;h2 id="1-core-system"&gt;1. Core System&lt;/h2&gt;
&lt;p&gt;These are not optional. Without them, nothing else works correctly.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="base-system"&gt;Base System&lt;/h3&gt;
&lt;p&gt;The absolute minimum for a bootable Arch installation. Includes&lt;br&gt;
the core utilities, the C library, and the package manager itself.&lt;br&gt;
Without this layer, the system does not exist.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;base&lt;/code&gt;, &lt;code&gt;base-devel&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="linux-kernel"&gt;Linux Kernel&lt;/h3&gt;
&lt;p&gt;The kernel is the bridge between your hardware and your software.&lt;br&gt;
It manages memory, processes, devices, and system calls. Arch&lt;br&gt;
ships the vanilla upstream kernel, but alternatives exist with&lt;br&gt;
different scheduling and performance characteristics.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;linux&lt;/code&gt;, &lt;code&gt;linux-lts&lt;/code&gt;, &lt;code&gt;linux-zen&lt;/code&gt;, &lt;code&gt;linux-hardened&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;linux-headers&lt;/code&gt; is also needed if you build kernel modules&lt;br&gt;
(e.g. for certain GPU drivers or VPN tools).&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="firmware"&gt;Firmware&lt;/h3&gt;
&lt;p&gt;Blobs of binary code that the kernel loads onto hardware devices&lt;br&gt;
at boot &amp;ndash; GPU microcode, Wi-Fi card firmware, NVMe controller&lt;br&gt;
firmware. Without this, hardware either does not work at all or&lt;br&gt;
works badly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;linux-firmware&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="cpu-microcode"&gt;CPU Microcode&lt;/h3&gt;
&lt;p&gt;Processor-specific patches applied by the bootloader at boot&lt;br&gt;
time. They fix hardware bugs and security vulnerabilities at the&lt;br&gt;
CPU level. You pick one depending on your CPU manufacturer.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;intel-ucode&lt;/code&gt;, &lt;code&gt;amd-ucode&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="bootloader"&gt;Bootloader&lt;/h3&gt;
&lt;p&gt;The first piece of software that runs after your firmware (UEFI&lt;br&gt;
or BIOS). It finds the kernel image and hands control over to it.&lt;br&gt;
Without a bootloader, the system does not start.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;grub&lt;/code&gt;, &lt;code&gt;systemd-boot&lt;/code&gt; (part of systemd), &lt;code&gt;rEFInd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="init-system"&gt;Init System&lt;/h3&gt;
&lt;p&gt;The first process the kernel starts (PID 1). It brings up&lt;br&gt;
everything else &amp;ndash; mounts filesystems, starts daemons, manages&lt;br&gt;
services. Arch uses systemd by default. You are not replacing it&lt;br&gt;
unless you know exactly why.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;systemd&lt;/code&gt; (default on Arch, already present)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="filesystem-utilities"&gt;Filesystem Utilities&lt;/h3&gt;
&lt;p&gt;Tools for creating, checking, and repairing filesystems. Also&lt;br&gt;
needed for mounting drives formatted with filesystems other than&lt;br&gt;
the one your root partition uses &amp;ndash; external drives, USB sticks,&lt;br&gt;
Windows partitions.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;e2fsprogs&lt;/code&gt; (ext4), &lt;code&gt;dosfstools&lt;/code&gt; (FAT32),&lt;br&gt;
&lt;code&gt;ntfs-3g&lt;/code&gt; (NTFS), &lt;code&gt;exfatprogs&lt;/code&gt; (exFAT), &lt;code&gt;btrfs-progs&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="man-pages"&gt;Man Pages&lt;/h3&gt;
&lt;p&gt;The built-in documentation system. &lt;code&gt;man ls&lt;/code&gt;, &lt;code&gt;man systemctl&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;man pacman&lt;/code&gt;. Without &lt;code&gt;man-db&lt;/code&gt;, you have no offline reference.&lt;br&gt;
You will need the internet for everything.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;man-db&lt;/code&gt;, &lt;code&gt;man-pages&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="time-synchronisation"&gt;Time Synchronisation&lt;/h3&gt;
&lt;p&gt;Keeps the system clock accurate by syncing with network time&lt;br&gt;
servers. An inaccurate clock breaks HTTPS certificate validation,&lt;br&gt;
authentication tokens, and log timestamps. &lt;code&gt;systemd-timesyncd&lt;/code&gt;&lt;br&gt;
is already present on most Arch installs and handles basic NTP.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;systemd-timesyncd&lt;/code&gt; (lightweight, already in&lt;br&gt;
systemd), &lt;code&gt;chrony&lt;/code&gt; (more accurate, better for laptops&lt;br&gt;
that sleep frequently)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="disk-encryption"&gt;Disk Encryption&lt;/h3&gt;
&lt;p&gt;Encrypts partitions or volumes so their contents are unreadable&lt;br&gt;
without the correct passphrase or key. If you set up LUKS during&lt;br&gt;
install, &lt;code&gt;cryptsetup&lt;/code&gt; is already on your system. If not, this is&lt;br&gt;
the tool you use to add encryption later.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;cryptsetup&lt;/code&gt; (LUKS), &lt;code&gt;veracrypt&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="2-display--compositor"&gt;2. Display &amp;amp; Compositor&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="wayland-compositor"&gt;Wayland Compositor&lt;/h3&gt;
&lt;p&gt;On a standard desktop environment like GNOME or KDE, the&lt;br&gt;
compositor is bundled in. On a standalone window manager setup&lt;br&gt;
like this, it is its own package. The compositor is responsible&lt;br&gt;
for drawing windows, handling input, managing outputs (monitors),&lt;br&gt;
and compositing everything into what you see on screen. On&lt;br&gt;
Wayland, the compositor also &lt;em&gt;is&lt;/em&gt; the display server.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;hyprland&lt;/code&gt;, &lt;code&gt;sway&lt;/code&gt;, &lt;code&gt;river&lt;/code&gt;, &lt;code&gt;niri&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="display-manager--login-manager"&gt;Display Manager / Login Manager&lt;/h3&gt;
&lt;p&gt;The graphical (or TUI) interface that greets you before you log&lt;br&gt;
in. It authenticates your session and launches your compositor.&lt;br&gt;
You can also skip it entirely and launch Hyprland from a TTY with&lt;br&gt;
&lt;code&gt;uwsm&lt;/code&gt; or a shell script &amp;ndash; but a display manager gives you a&lt;br&gt;
cleaner boot experience.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;ly&lt;/code&gt;, &lt;code&gt;greetd&lt;/code&gt;, &lt;code&gt;sddm&lt;/code&gt;, &lt;code&gt;gdm&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="wayland-session-manager"&gt;Wayland Session Manager&lt;/h3&gt;
&lt;p&gt;A wrapper that correctly launches a Wayland compositor as a&lt;br&gt;
proper systemd user session, ensuring environment variables are&lt;br&gt;
set, D-Bus is activated, and XDG portals start correctly. Without&lt;br&gt;
something like this, some applications or portals may not&lt;br&gt;
function properly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;uwsm&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="xdg-desktop-portal"&gt;XDG Desktop Portal&lt;/h3&gt;
&lt;p&gt;A standardised interface that allows sandboxed applications&lt;br&gt;
(Flatpak, but also native apps) to request desktop services &amp;ndash;&lt;br&gt;
screen sharing, file picker, opening URIs, camera access &amp;ndash; in a&lt;br&gt;
controlled way. Without the correct portal for your compositor,&lt;br&gt;
screen sharing in browsers, file pickers in some apps, and&lt;br&gt;
screenshots via portals will not work.&lt;/p&gt;
&lt;p&gt;You typically need two: one compositor-specific, one GTK fallback.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;xdg-desktop-portal-hyprland&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;xdg-desktop-portal-gtk&lt;/code&gt;, &lt;code&gt;xdg-desktop-portal-kde&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="xwayland"&gt;XWayland&lt;/h3&gt;
&lt;p&gt;A compatibility layer that allows X11 applications to run inside&lt;br&gt;
a Wayland session. Some software has not been ported to Wayland&lt;br&gt;
yet. Without XWayland, those applications will not launch at all.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;xwayland&lt;/code&gt; (often pulled as a dependency of the&lt;br&gt;
compositor)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="gpu-driver"&gt;GPU Driver&lt;/h3&gt;
&lt;p&gt;Software that lets the kernel communicate with your graphics&lt;br&gt;
card. Without the correct driver, you get software rendering,&lt;br&gt;
which is slow, consumes a lot of CPU, and will make Hyprland&lt;br&gt;
painful to use.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;mesa&lt;/code&gt; (AMD / Intel open source), &lt;code&gt;nvidia&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;nvidia-open&lt;/code&gt;, &lt;code&gt;vulkan-intel&lt;/code&gt;, &lt;code&gt;vulkan-radeon&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="video-acceleration"&gt;Video Acceleration&lt;/h3&gt;
&lt;p&gt;Libraries that offload video decoding and encoding to the GPU&lt;br&gt;
rather than the CPU. Without this, playing video is noticeably&lt;br&gt;
more expensive on your system resources.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;intel-media-driver&lt;/code&gt;, &lt;code&gt;libva-mesa-driver&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;nvidia-utils&lt;/code&gt;, &lt;code&gt;libva-utils&lt;/code&gt; (for testing)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="display-configuration-tool"&gt;Display Configuration Tool&lt;/h3&gt;
&lt;p&gt;A tool for arranging monitors, setting resolutions, refresh&lt;br&gt;
rates, and scaling. Hyprland handles this in its config file, but&lt;br&gt;
a GUI tool makes multi-monitor setups significantly less painful&lt;br&gt;
to configure initially.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;nwg-displays&lt;/code&gt;, &lt;code&gt;wdisplays&lt;/code&gt;, &lt;code&gt;kanshi&lt;/code&gt;&lt;br&gt;
(kanshi is for automatic profiles, not interactive config)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="3-desktop-environment-components"&gt;3. Desktop Environment Components&lt;/h2&gt;
&lt;p&gt;These are the building blocks of the desktop. A traditional DE&lt;br&gt;
like GNOME bundles all of these together. On a standalone&lt;br&gt;
compositor, you assemble them yourself.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="status-bar--panel"&gt;Status Bar / Panel&lt;/h3&gt;
&lt;p&gt;A persistent bar that displays information &amp;ndash; time, date,&lt;br&gt;
workspace indicators, system stats, network status, battery,&lt;br&gt;
volume, active window title. On Wayland this communicates with&lt;br&gt;
the compositor via its own protocol or via standard Wayland&lt;br&gt;
protocols.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;waybar&lt;/code&gt;, &lt;code&gt;eww&lt;/code&gt;, &lt;code&gt;yambar&lt;/code&gt;, &lt;code&gt;ags&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="application-launcher"&gt;Application Launcher&lt;/h3&gt;
&lt;p&gt;A fuzzy-search interface for launching applications by name,&lt;br&gt;
running shell commands, or switching between open windows.&lt;br&gt;
Without one, you either open a terminal every time or bind every&lt;br&gt;
application to a keyboard shortcut.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;rofi&lt;/code&gt; (with Wayland fork), &lt;code&gt;wofi&lt;/code&gt;, &lt;code&gt;tofi&lt;/code&gt;, &lt;code&gt;fuzzel&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;anyrun&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="notification-daemon"&gt;Notification Daemon&lt;/h3&gt;
&lt;p&gt;Receives and displays desktop notifications sent by applications&lt;br&gt;
via the D-Bus notification spec. Manages the queue, allows&lt;br&gt;
dismissal, can support actions (buttons inside notifications).&lt;br&gt;
Without one, notifications are silently dropped.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;mako&lt;/code&gt;, &lt;code&gt;swaync&lt;/code&gt;, &lt;code&gt;dunst&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="screen-lock"&gt;Screen Lock&lt;/h3&gt;
&lt;p&gt;Blanks the screen and requires authentication to resume the&lt;br&gt;
session. The lock screen sits between your unattended machine and&lt;br&gt;
anyone who walks up to it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;hyprlock&lt;/code&gt;, &lt;code&gt;swaylock&lt;/code&gt;, &lt;code&gt;waylock&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="idle-daemon"&gt;Idle Daemon&lt;/h3&gt;
&lt;p&gt;Monitors input inactivity and triggers actions after a set time&lt;br&gt;
&amp;ndash; dim the screen, lock the session, suspend the system. Works&lt;br&gt;
in tandem with the screen lock.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;hypridle&lt;/code&gt;, &lt;code&gt;swayidle&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="wallpaper-setter"&gt;Wallpaper Setter&lt;/h3&gt;
&lt;p&gt;Sets and manages the desktop background. On Wayland this must be&lt;br&gt;
a Wayland-native tool; X11 wallpaper setters will not work.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;hyprpaper&lt;/code&gt;, &lt;code&gt;swww&lt;/code&gt;, &lt;code&gt;swaybg&lt;/code&gt;, &lt;code&gt;mpvpaper&lt;/code&gt; (animated&lt;br&gt;
wallpapers via mpv)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="polkit-authentication-agent"&gt;Polkit Authentication Agent&lt;/h3&gt;
&lt;p&gt;Polkit is a framework for controlling privilege escalation for&lt;br&gt;
unprivileged processes. When an application needs elevated&lt;br&gt;
permissions (mounting a drive, installing a package via a GUI),&lt;br&gt;
Polkit intercepts the request and the authentication agent&lt;br&gt;
presents a password prompt. Without one, those GUI operations&lt;br&gt;
silently fail.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;polkit-kde-agent&lt;/code&gt;, &lt;code&gt;polkit-gnome&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;lxqt-policykit&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="keyring--secret-storage"&gt;Keyring / Secret Storage&lt;/h3&gt;
&lt;p&gt;A secure, encrypted store for secrets &amp;ndash; passwords, API tokens,&lt;br&gt;
SSH keys, application credentials. Applications that handle&lt;br&gt;
authentication (browsers, email clients, cloud sync tools) expect&lt;br&gt;
a secret service to be present and will either fail to save&lt;br&gt;
credentials or store them in plaintext without one.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;gnome-keyring&lt;/code&gt;, &lt;code&gt;keepassxc&lt;/code&gt; (with secret service&lt;br&gt;
integration)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="clipboard-manager"&gt;Clipboard Manager&lt;/h3&gt;
&lt;p&gt;Wayland does not have a persistent clipboard by default. When a&lt;br&gt;
window closes, its clipboard content disappears. A clipboard&lt;br&gt;
manager keeps a history of copied items and makes them accessible&lt;br&gt;
after the source application is gone. Also enables fuzzy-search&lt;br&gt;
through clipboard history.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;cliphist&lt;/code&gt;, &lt;code&gt;clipman&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;wl-clipboard&lt;/code&gt; (&lt;code&gt;wl-copy&lt;/code&gt; / &lt;code&gt;wl-paste&lt;/code&gt;) is also needed as the&lt;br&gt;
underlying Wayland clipboard utility. It is not a manager itself,&lt;br&gt;
but most managers depend on it.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="screenshot-tool"&gt;Screenshot Tool&lt;/h3&gt;
&lt;p&gt;Captures the screen, a region, or a specific window. On Wayland&lt;br&gt;
this works through the compositor&amp;rsquo;s screencopy protocol or via&lt;br&gt;
XDG portals. X11 screenshot tools do not function on Wayland.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;grim&lt;/code&gt;, &lt;code&gt;hyprshot&lt;/code&gt;, &lt;code&gt;grimblast&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A region selection tool is almost always used alongside the&lt;br&gt;
screenshot tool.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="screen-region-selector"&gt;Screen Region Selector&lt;/h3&gt;
&lt;p&gt;An interactive overlay that lets you draw a rectangle over the&lt;br&gt;
screen to define a capture area. Used with screenshot tools and&lt;br&gt;
sometimes screen recorders.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;slurp&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="screen-recorder"&gt;Screen Recorder&lt;/h3&gt;
&lt;p&gt;Captures video of the screen or a region of it. Useful for&lt;br&gt;
documentation, bug reports, or content creation. Wayland screen&lt;br&gt;
recording requires compositor support for the screencopy protocol.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;wf-recorder&lt;/code&gt;, &lt;code&gt;obs-studio&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="color-picker"&gt;Color Picker&lt;/h3&gt;
&lt;p&gt;Samples the color of any pixel on screen and returns the hex or&lt;br&gt;
RGB value. Small tool, but immediately useful when theming.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;hyprpicker&lt;/code&gt;, &lt;code&gt;gpick&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="on-screen-display-osd"&gt;On-Screen Display (OSD)&lt;/h3&gt;
&lt;p&gt;A temporary overlay that appears when you change volume or&lt;br&gt;
brightness, showing the current level visually. Not strictly&lt;br&gt;
necessary, but without it you adjust volume blind.&lt;/p&gt;
&lt;p&gt;Some notification daemons (like &lt;code&gt;swaync&lt;/code&gt;) can be configured to&lt;br&gt;
do this. There are also dedicated tools.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;swayosd&lt;/code&gt;, custom scripts using &lt;code&gt;notify-send&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="screen-annotation--screenshot-editor"&gt;Screen Annotation / Screenshot Editor&lt;/h3&gt;
&lt;p&gt;Edits screenshots immediately after capture &amp;ndash; adds arrows,&lt;br&gt;
text, highlights, and crops. Useful for documentation.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;swappy&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="4-audio"&gt;4. Audio&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="audio-server"&gt;Audio Server&lt;/h3&gt;
&lt;p&gt;The layer between the kernel&amp;rsquo;s audio subsystem (ALSA) and your&lt;br&gt;
applications. It handles routing, mixing, Bluetooth audio,&lt;br&gt;
virtual devices, and gives applications a consistent interface&lt;br&gt;
regardless of hardware. PipeWire is the current standard on&lt;br&gt;
modern Linux &amp;ndash; it also handles PulseAudio and JACK compatibility.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;pipewire&lt;/code&gt;, &lt;code&gt;pipewire-pulse&lt;/code&gt;, &lt;code&gt;pipewire-alsa&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;pipewire-jack&lt;/code&gt;, &lt;code&gt;wireplumber&lt;/code&gt; (session manager for PipeWire)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="volume-control--audio-mixer"&gt;Volume Control / Audio Mixer&lt;/h3&gt;
&lt;p&gt;A GUI or TUI for controlling per-application volume, input/output&lt;br&gt;
device selection, and audio routing. The audio server itself does&lt;br&gt;
not provide this interface.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;pavucontrol&lt;/code&gt; (GUI), &lt;code&gt;pulsemixer&lt;/code&gt; (TUI), &lt;code&gt;pamixer&lt;/code&gt;&lt;br&gt;
(CLI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="5-networking"&gt;5. Networking&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="network-manager"&gt;Network Manager&lt;/h3&gt;
&lt;p&gt;Manages wired, wireless, and VPN connections. Handles DHCP,&lt;br&gt;
static IP configuration, connection profiles, and automatic&lt;br&gt;
reconnection. Without this (or an equivalent), you configure&lt;br&gt;
networking manually via &lt;code&gt;ip&lt;/code&gt; and &lt;code&gt;wpa_supplicant&lt;/code&gt; every boot,&lt;br&gt;
which is painful.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;networkmanager&lt;/code&gt;, &lt;code&gt;iwd&lt;/code&gt;, &lt;code&gt;connman&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="network-manager-frontend"&gt;Network Manager Frontend&lt;/h3&gt;
&lt;p&gt;A user interface for the network manager. The manager itself runs&lt;br&gt;
as a daemon in the background; the frontend is how you interact&lt;br&gt;
with it &amp;ndash; connecting to Wi-Fi, editing profiles, toggling VPN.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;nm-applet&lt;/code&gt; (system tray), &lt;code&gt;nmtui&lt;/code&gt; (TUI),&lt;br&gt;
&lt;code&gt;networkmanager-dmenu&lt;/code&gt; (rofi/dmenu integration)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="dns-resolver--encrypted-dns"&gt;DNS Resolver / Encrypted DNS&lt;/h3&gt;
&lt;p&gt;Handles domain name resolution. The default system resolver sends&lt;br&gt;
DNS queries in plaintext, which is readable by your ISP and any&lt;br&gt;
network middleman. An encrypted DNS tool routes those queries over&lt;br&gt;
DoH or DNSCrypt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;dnscrypt-proxy&lt;/code&gt;, &lt;code&gt;systemd-resolved&lt;/code&gt; (with DoH&lt;br&gt;
config), &lt;code&gt;stubby&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="vpn-client"&gt;VPN Client&lt;/h3&gt;
&lt;p&gt;Encrypts your network traffic and routes it through a remote&lt;br&gt;
server. Necessary for privacy on hostile networks or for&lt;br&gt;
accessing private network resources.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;wireguard-tools&lt;/code&gt;, &lt;code&gt;openvpn&lt;/code&gt;, &lt;code&gt;openconnect&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="firewall"&gt;Firewall&lt;/h3&gt;
&lt;p&gt;Controls which network traffic is allowed in and out of the&lt;br&gt;
system. Without one, all ports are open to whatever the kernel&lt;br&gt;
allows by default.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;ufw&lt;/code&gt; (frontend for nftables/iptables),&lt;br&gt;
&lt;code&gt;nftables&lt;/code&gt;, &lt;code&gt;iptables&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="ssh-client--server"&gt;SSH Client / Server&lt;/h3&gt;
&lt;p&gt;The standard tool for remote access and secure file transfer.&lt;br&gt;
The client lets you connect to remote machines. The server lets&lt;br&gt;
remote machines connect to yours.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;openssh&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="tor"&gt;Tor&lt;/h3&gt;
&lt;p&gt;Routes traffic through the Tor anonymity network. &lt;code&gt;torsocks&lt;/code&gt;&lt;br&gt;
wraps arbitrary applications to force their traffic through Tor.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;tor&lt;/code&gt;, &lt;code&gt;torsocks&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="network-diagnostics"&gt;Network Diagnostics&lt;/h3&gt;
&lt;p&gt;Tools for inspecting, testing, and debugging network connections&lt;br&gt;
at a lower level than a browser or ping. Useful for diagnosing&lt;br&gt;
connectivity issues, scanning for open ports, or measuring&lt;br&gt;
throughput.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;nmap&lt;/code&gt; (port scanning), &lt;code&gt;traceroute&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;iperf3&lt;/code&gt; (bandwidth testing), &lt;code&gt;bind&lt;/code&gt; (provides &lt;code&gt;dig&lt;/code&gt; and&lt;br&gt;
&lt;code&gt;nslookup&lt;/code&gt; for DNS queries), &lt;code&gt;openbsd-netcat&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="6-input--hardware"&gt;6. Input &amp;amp; Hardware&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="input-remapper"&gt;Input Remapper&lt;/h3&gt;
&lt;p&gt;Remaps keys, mice, and other input devices at the kernel or&lt;br&gt;
application level. Useful for non-standard keyboards, ergo&lt;br&gt;
layouts, or remapping modifier keys across the entire system.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;keyd&lt;/code&gt;, &lt;code&gt;xremap&lt;/code&gt;, &lt;code&gt;interception-tools&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="brightness-control"&gt;Brightness Control&lt;/h3&gt;
&lt;p&gt;Adjusts screen backlight brightness. On Wayland this usually&lt;br&gt;
works through a tool that writes directly to the kernel&amp;rsquo;s backlight&lt;br&gt;
interface.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;brightnessctl&lt;/code&gt;, &lt;code&gt;light&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="fingerprint-reader"&gt;Fingerprint Reader&lt;/h3&gt;
&lt;p&gt;If your machine has a fingerprint sensor, this daemon enables&lt;br&gt;
it for PAM authentication &amp;ndash; login, sudo, screen unlock.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;fprintd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="power-management"&gt;Power Management&lt;/h3&gt;
&lt;p&gt;Controls CPU frequency scaling, disk spin-down, USB autosuspend,&lt;br&gt;
and other power-saving features. Particularly relevant on laptops.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;tlp&lt;/code&gt;, &lt;code&gt;auto-cpufreq&lt;/code&gt;, &lt;code&gt;power-profiles-daemon&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="bluetooth-manager"&gt;Bluetooth Manager&lt;/h3&gt;
&lt;p&gt;Manages Bluetooth device pairing, connection, and profiles. The&lt;br&gt;
kernel&amp;rsquo;s Bluetooth stack (&lt;code&gt;bluez&lt;/code&gt;) is the backend; a frontend&lt;br&gt;
gives you a usable interface.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;bluez&lt;/code&gt;, &lt;code&gt;bluez-utils&lt;/code&gt; (backend),&lt;br&gt;
&lt;code&gt;blueman&lt;/code&gt; (GUI), &lt;code&gt;bluetui&lt;/code&gt; (TUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="smart-drive-monitor"&gt;Smart Drive Monitor&lt;/h3&gt;
&lt;p&gt;Monitors hard drive and SSD health via the S.M.A.R.T. interface&lt;br&gt;
built into the drive firmware. Useful for catching failing drives&lt;br&gt;
before data loss.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;smartmontools&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="7-theming--appearance"&gt;7. Theming &amp;amp; Appearance&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="font--monospace-with-icons"&gt;Font — Monospace (with Icons)&lt;/h3&gt;
&lt;p&gt;Your terminal, editor, and status bar all render text. A Nerd&lt;br&gt;
Font patches the typeface with icon glyphs used by many TUI tools&lt;br&gt;
and status bars. Without one, you see boxes or question marks&lt;br&gt;
instead of icons.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;ttf-jetbrains-mono-nerd&lt;/code&gt;, &lt;code&gt;ttf-firacode-nerd&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;ttf-hack-nerd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="font--sans-serif-ui--interface"&gt;Font — Sans-Serif (UI / Interface)&lt;/h3&gt;
&lt;p&gt;Used by GTK applications, notification bodies, rofi, and anywhere&lt;br&gt;
a proportional font is expected. Picking one gives the desktop&lt;br&gt;
a consistent look across applications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;inter-font&lt;/code&gt;, &lt;code&gt;noto-fonts&lt;/code&gt;, &lt;code&gt;ttf-ubuntu-font-family&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="font--emoji"&gt;Font — Emoji&lt;/h3&gt;
&lt;p&gt;Without emoji fonts, emoji render as empty boxes. Browsers,&lt;br&gt;
terminals, and some applications use them even if you do not&lt;br&gt;
intentionally.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;noto-fonts-emoji&lt;/code&gt;, &lt;code&gt;ttf-twemoji&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="font--serif"&gt;Font — Serif&lt;/h3&gt;
&lt;p&gt;Used in documents, PDF viewers, and reading-focused applications.&lt;br&gt;
Less critical than monospace and sans-serif for a terminal-first&lt;br&gt;
setup, but absence is noticeable in document viewers and office&lt;br&gt;
applications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;adobe-source-serif-fonts&lt;/code&gt;, &lt;code&gt;noto-serif&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="font-management-tool"&gt;Font Management Tool&lt;/h3&gt;
&lt;p&gt;Previews, installs, and organises fonts. Not necessary if you&lt;br&gt;
install fonts via the package manager, but useful if you are&lt;br&gt;
downloading fonts from external sources or managing a large&lt;br&gt;
collection.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;font-manager&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="icon-theme"&gt;Icon Theme&lt;/h3&gt;
&lt;p&gt;The set of icons used by GTK applications for file types,&lt;br&gt;
folders, application launchers, and system actions.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;papirus-icon-theme&lt;/code&gt;, &lt;code&gt;hicolor-icon-theme&lt;/code&gt;&lt;br&gt;
(hicolor is the fallback standard, always install it)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="cursor-theme"&gt;Cursor Theme&lt;/h3&gt;
&lt;p&gt;The mouse cursor shape. The default Wayland cursor is functional&lt;br&gt;
but ugly. A cursor theme makes things look intentional.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;capitaine-cursors&lt;/code&gt;, &lt;code&gt;xcursor-themes&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;bibata-cursor-theme&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="gtk-theme"&gt;GTK Theme&lt;/h3&gt;
&lt;p&gt;Controls the visual appearance of GTK2/GTK3/GTK4 applications &amp;ndash;&lt;br&gt;
buttons, windows, scrollbars, toggles, everything. Without a&lt;br&gt;
theme, GTK apps use the bare Adwaita default which may clash with&lt;br&gt;
your compositor&amp;rsquo;s look.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;adwaita-dark&lt;/code&gt; (built-in GTK), &lt;code&gt;catppuccin-gtk-theme&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="gtk-settings-manager"&gt;GTK Settings Manager&lt;/h3&gt;
&lt;p&gt;A GUI tool for applying GTK themes, icon themes, and cursor&lt;br&gt;
themes without manually editing &lt;code&gt;~/.config/gtk-3.0/settings.ini&lt;/code&gt;.&lt;br&gt;
Also handles font settings for GTK apps.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;nwg-look&lt;/code&gt;, &lt;code&gt;lxappearance&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="qt-theme--qt-theming-layer"&gt;Qt Theme / Qt Theming Layer&lt;/h3&gt;
&lt;p&gt;Qt applications use a separate theming system from GTK. Without&lt;br&gt;
configuring this, Qt apps look completely different from everything&lt;br&gt;
else &amp;ndash; mismatched fonts, colours, and widget styles.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;qt5ct&lt;/code&gt; and &lt;code&gt;qt6ct&lt;/code&gt; are configuration tools. Kvantum is a theme&lt;br&gt;
engine that applies SVG-based themes to Qt.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;qt5ct&lt;/code&gt;, &lt;code&gt;qt6ct&lt;/code&gt;, &lt;code&gt;kvantum&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="8-shell--terminal"&gt;8. Shell &amp;amp; Terminal&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="terminal-emulator"&gt;Terminal Emulator&lt;/h3&gt;
&lt;p&gt;The window that runs your shell. On Wayland this must be a&lt;br&gt;
Wayland-native terminal or one that runs under XWayland. GPU&lt;br&gt;
acceleration makes a meaningful difference in rendering speed,&lt;br&gt;
especially with large outputs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;kitty&lt;/code&gt;, &lt;code&gt;alacritty&lt;/code&gt;, &lt;code&gt;foot&lt;/code&gt;, &lt;code&gt;wezterm&lt;/code&gt;, &lt;code&gt;ghostty&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="shell"&gt;Shell&lt;/h3&gt;
&lt;p&gt;The command interpreter. Bash is the default on Arch. Zsh adds&lt;br&gt;
better completion, history handling, and plugin support. Fish is&lt;br&gt;
friendly but not POSIX-compatible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;zsh&lt;/code&gt;, &lt;code&gt;bash&lt;/code&gt;, &lt;code&gt;fish&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="shell-prompt"&gt;Shell Prompt&lt;/h3&gt;
&lt;p&gt;The part of your shell that displays information at the start of&lt;br&gt;
each line &amp;ndash; current directory, git branch, last exit code, etc.&lt;br&gt;
A well-configured prompt gives you context at a glance.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;starship&lt;/code&gt;, &lt;code&gt;oh-my-posh&lt;/code&gt;, &lt;code&gt;powerlevel10k&lt;/code&gt; (Zsh only)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="terminal-multiplexer"&gt;Terminal Multiplexer&lt;/h3&gt;
&lt;p&gt;Allows multiple terminal sessions within a single window, with&lt;br&gt;
persistent sessions that survive disconnection. Especially useful&lt;br&gt;
for SSH or long-running processes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;tmux&lt;/code&gt;, &lt;code&gt;zellij&lt;/code&gt;, &lt;code&gt;screen&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="pager"&gt;Pager&lt;/h3&gt;
&lt;p&gt;Displays long text output one screenful at a time.&lt;br&gt;
&lt;code&gt;less&lt;/code&gt; is the standard. &lt;code&gt;bat&lt;/code&gt; is a replacement with syntax&lt;br&gt;
highlighting and line numbers.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;less&lt;/code&gt;, &lt;code&gt;bat&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="aur-helper"&gt;AUR Helper&lt;/h3&gt;
&lt;p&gt;Automates building and installing packages from the Arch User&lt;br&gt;
Repository, which is not covered by &lt;code&gt;pacman&lt;/code&gt; directly. Also&lt;br&gt;
wraps &lt;code&gt;pacman&lt;/code&gt; for full system upgrades.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;paru&lt;/code&gt;, &lt;code&gt;yay&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="9-text-editors"&gt;9. Text Editors&lt;/h2&gt;
&lt;p&gt;There is a meaningful distinction between a quick terminal editor,&lt;br&gt;
a modal editor, and a full IDE. They are not interchangeable and&lt;br&gt;
serve different moments.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="simple-terminal-editor"&gt;Simple Terminal Editor&lt;/h3&gt;
&lt;p&gt;A straightforward, non-modal editor that behaves like most&lt;br&gt;
people expect a text editor to behave &amp;ndash; you open it, you type,&lt;br&gt;
you save, you quit. No modes, no configuration required to use&lt;br&gt;
it. The value is immediate usability, especially on a fresh&lt;br&gt;
system before anything else is configured, or when editing a&lt;br&gt;
single file quickly over SSH.&lt;/p&gt;
&lt;p&gt;The tradeoff is that it is slow for large-scale editing and&lt;br&gt;
offers almost no extensibility.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;nano&lt;/code&gt;, &lt;code&gt;micro&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="modal-terminal-editor"&gt;Modal Terminal Editor&lt;/h3&gt;
&lt;p&gt;A terminal editor built around the concept of distinct modes &amp;ndash;&lt;br&gt;
usually a normal mode for navigation and commands, and an insert&lt;br&gt;
mode for typing. This means the keyboard is not wasted on just&lt;br&gt;
typing characters; every key is a potential command. The learning&lt;br&gt;
curve is steep but the payoff is that editing becomes&lt;br&gt;
significantly faster once the muscle memory is built.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;vim&lt;/code&gt; is the classic. It is installed almost everywhere, which&lt;br&gt;
makes knowing it valuable beyond your own machine. &lt;code&gt;neovim&lt;/code&gt; is&lt;br&gt;
a modernised fork with a Lua configuration API, better defaults,&lt;br&gt;
and a large plugin ecosystem. The two share the same fundamental&lt;br&gt;
editing model.&lt;/p&gt;
&lt;p&gt;These editors are also the foundation of the terminal-first&lt;br&gt;
development workflow &amp;ndash; with enough configuration they approach&lt;br&gt;
full IDE behaviour.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;vim&lt;/code&gt;, &lt;code&gt;neovim&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="ide-integrated-development-environment"&gt;IDE (Integrated Development Environment)&lt;/h3&gt;
&lt;p&gt;A heavier, more complete development environment than a plain&lt;br&gt;
text editor. An IDE bundles a file tree, integrated terminal,&lt;br&gt;
built-in debugger, version control UI, and deep&lt;br&gt;
language-specific tooling into one application. The distinction&lt;br&gt;
from a text editor is fuzzy &amp;ndash; Neovim with enough plugins&lt;br&gt;
approaches IDE behaviour &amp;ndash; but a dedicated IDE requires less&lt;br&gt;
configuration to get to that point.&lt;/p&gt;
&lt;p&gt;Worth noting: VS Code and its derivatives are technically&lt;br&gt;
Electron applications. They are large, they consume more memory&lt;br&gt;
than a terminal editor, and they are not terminal-native. The&lt;br&gt;
tradeoff is that they work well out of the box for most&lt;br&gt;
languages without extensive configuration.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;code&lt;/code&gt; (VS Code), &lt;code&gt;vscodium&lt;/code&gt; (VS Code without&lt;br&gt;
Microsoft telemetry), &lt;code&gt;intellij-idea-community&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;pycharm-community&lt;/code&gt;, &lt;code&gt;eclipse&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="10-development--version-control"&gt;10. Development &amp;amp; Version Control&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="version-control-system"&gt;Version Control System&lt;/h3&gt;
&lt;p&gt;Tracks changes to files over time. Essential for any code or&lt;br&gt;
configuration work. Also used by AUR helpers to clone and update&lt;br&gt;
packages.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;git&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="git-tui--frontend"&gt;Git TUI / Frontend&lt;/h3&gt;
&lt;p&gt;An interactive terminal interface for git &amp;ndash; viewing diffs,&lt;br&gt;
staging changes, managing branches, and resolving conflicts&lt;br&gt;
without memorising every git subcommand.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;lazygit&lt;/code&gt;, &lt;code&gt;gitui&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="diff--merge-tool"&gt;Diff / Merge Tool&lt;/h3&gt;
&lt;p&gt;Compares two files or directories side by side and highlights&lt;br&gt;
differences. A merge tool extends this to resolve conflicts when&lt;br&gt;
two versions of a file have both been modified. &lt;code&gt;git diff&lt;/code&gt; is&lt;br&gt;
sufficient for simple cases; a dedicated tool helps with complex&lt;br&gt;
conflicts.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;meld&lt;/code&gt; (GUI), &lt;code&gt;vimdiff&lt;/code&gt; (terminal),&lt;br&gt;
&lt;code&gt;delta&lt;/code&gt; (better git diff output in terminal)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="language--runtime-version-manager"&gt;Language / Runtime Version Manager&lt;/h3&gt;
&lt;p&gt;Manages multiple installed versions of a language runtime on the&lt;br&gt;
same machine. Essential when different projects require different&lt;br&gt;
versions &amp;ndash; one project needs Node 18, another needs Node 20, a&lt;br&gt;
third needs Python 3.10 while your system has 3.12. A version&lt;br&gt;
manager lets you switch between them per-project or per-shell&lt;br&gt;
without reinstalling anything.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;nvm&lt;/code&gt; (Node.js), &lt;code&gt;pyenv&lt;/code&gt; (Python),&lt;br&gt;
&lt;code&gt;rustup&lt;/code&gt; (Rust &amp;ndash; also the official Rust installer),&lt;br&gt;
&lt;code&gt;sdkman&lt;/code&gt; (JVM languages), &lt;code&gt;mise&lt;/code&gt; (polyglot, handles many&lt;br&gt;
languages in one tool)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="language-runtimes-and-toolchains"&gt;Language Runtimes and Toolchains&lt;/h3&gt;
&lt;p&gt;The interpreters, compilers, and build tools for whatever&lt;br&gt;
language you are working in. Arch ships most of these in the&lt;br&gt;
official repositories.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;nodejs&lt;/code&gt;, &lt;code&gt;npm&lt;/code&gt;, &lt;code&gt;python&lt;/code&gt;, &lt;code&gt;python-pip&lt;/code&gt;, &lt;code&gt;rust&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;go&lt;/code&gt;, &lt;code&gt;deno&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="lsp-servers"&gt;LSP Servers&lt;/h3&gt;
&lt;p&gt;Language Server Protocol implementations that provide&lt;br&gt;
autocompletion, diagnostics, go-to-definition, and other IDE&lt;br&gt;
features in editors that support LSP (like Neovim). Installed&lt;br&gt;
separately per language.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: managed via &lt;code&gt;mason.nvim&lt;/code&gt; inside Neovim, or installed&lt;br&gt;
directly via the package manager&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="build-system--build-tools"&gt;Build System / Build Tools&lt;/h3&gt;
&lt;p&gt;Automates the steps required to turn source code into a runnable&lt;br&gt;
binary or deployable artifact. Handles compilation order,&lt;br&gt;
dependency linking, and running tests. Different languages use&lt;br&gt;
different build tools; &lt;code&gt;base-devel&lt;/code&gt; on Arch covers most of what&lt;br&gt;
you need to compile anything from the AUR or from source.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;cmake&lt;/code&gt;, &lt;code&gt;meson&lt;/code&gt;, &lt;code&gt;ninja&lt;/code&gt;, &lt;code&gt;gradle&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="api-testing-tool"&gt;API Testing Tool&lt;/h3&gt;
&lt;p&gt;Sends HTTP requests to an API endpoint and inspects the response.&lt;br&gt;
Used for testing and debugging REST or GraphQL APIs without&lt;br&gt;
writing code. Some are CLI tools, some are GUI applications.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; covers basic use but is not ergonomic for repeated API&lt;br&gt;
work.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;httpie&lt;/code&gt;, &lt;code&gt;xh&lt;/code&gt;, &lt;code&gt;curlie&lt;/code&gt; (CLI),&lt;br&gt;
&lt;code&gt;bruno&lt;/code&gt;, &lt;code&gt;insomnia&lt;/code&gt; (GUI, open source)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="database-client"&gt;Database Client&lt;/h3&gt;
&lt;p&gt;Connects to a running database and lets you inspect schemas,&lt;br&gt;
run queries, view data, and manage tables. Essential once you&lt;br&gt;
are working with any persistent data store.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;dbeaver&lt;/code&gt; (GUI, multi-database),&lt;br&gt;
&lt;code&gt;beekeeper-studio&lt;/code&gt; (GUI), &lt;code&gt;pgcli&lt;/code&gt; (TUI, Postgres),&lt;br&gt;
&lt;code&gt;mycli&lt;/code&gt; (TUI, MySQL)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="container-runtime"&gt;Container Runtime&lt;/h3&gt;
&lt;p&gt;Runs applications in isolated containers. Docker is the most&lt;br&gt;
common. Podman is a daemonless alternative. Incus/LXD runs full&lt;br&gt;
system containers and virtual machines.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;docker&lt;/code&gt;, &lt;code&gt;podman&lt;/code&gt;, &lt;code&gt;incus&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="virtualisation"&gt;Virtualisation&lt;/h3&gt;
&lt;p&gt;Runs full virtual machines with their own kernel. QEMU is the&lt;br&gt;
backend; virt-manager and virt-viewer are frontends.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;qemu-full&lt;/code&gt;, &lt;code&gt;virt-manager&lt;/code&gt;, &lt;code&gt;virt-viewer&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;libvirt&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="system-call-tracer--debugger"&gt;System Call Tracer / Debugger&lt;/h3&gt;
&lt;p&gt;Traces the system calls a process makes, which is how you find&lt;br&gt;
out why a program is failing when it gives you no useful error&lt;br&gt;
message. A low-level debugging tool you reach for when everything&lt;br&gt;
else fails.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;strace&lt;/code&gt;, &lt;code&gt;ltrace&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="hex-editor"&gt;Hex Editor&lt;/h3&gt;
&lt;p&gt;Opens binary files and shows their raw byte values in&lt;br&gt;
hexadecimal. Used when inspecting files that are not plain text&lt;br&gt;
&amp;ndash; compiled binaries, firmware images, corrupted files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;hexyl&lt;/code&gt; (terminal, read-only with colour),&lt;br&gt;
&lt;code&gt;bless&lt;/code&gt; (GUI, editable), &lt;code&gt;xxd&lt;/code&gt; (CLI, ships with vim)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="11-file-management"&gt;11. File Management&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="file-manager"&gt;File Manager&lt;/h3&gt;
&lt;p&gt;Browse, move, copy, rename, and delete files. TUI file managers&lt;br&gt;
are fast and integrate well with terminal workflows. GUI file&lt;br&gt;
managers provide drag-and-drop and thumbnail support.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;yazi&lt;/code&gt;, &lt;code&gt;lf&lt;/code&gt;, &lt;code&gt;nnn&lt;/code&gt; (TUI),&lt;br&gt;
&lt;code&gt;thunar&lt;/code&gt;, &lt;code&gt;dolphin&lt;/code&gt; (GUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="archive-manager"&gt;Archive Manager&lt;/h3&gt;
&lt;p&gt;Creates and extracts compressed archives &amp;ndash; zip, tar, 7z, rar,&lt;br&gt;
gz, zst. Without the right tool for a format, you cannot open it.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;7zip&lt;/code&gt;, &lt;code&gt;unzip&lt;/code&gt;, &lt;code&gt;unrar&lt;/code&gt;, &lt;code&gt;tar&lt;/code&gt; (usually already&lt;br&gt;
present), &lt;code&gt;file-roller&lt;/code&gt; (GUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="thumbnail-generator"&gt;Thumbnail Generator&lt;/h3&gt;
&lt;p&gt;Generates preview thumbnails for images, videos, and documents&lt;br&gt;
in GUI file managers. Without this, file managers show blank&lt;br&gt;
icons instead of previews.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;ffmpegthumbnailer&lt;/code&gt;, &lt;code&gt;tumbler&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="disk-usage-analyser"&gt;Disk Usage Analyser&lt;/h3&gt;
&lt;p&gt;Shows what is consuming disk space, either visually or as a&lt;br&gt;
sorted list. Useful when a drive fills up and you need to find&lt;br&gt;
the cause.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;dust&lt;/code&gt;, &lt;code&gt;ncdu&lt;/code&gt;, &lt;code&gt;duf&lt;/code&gt; (disk usage summary)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="disk--partition-management"&gt;Disk / Partition Management&lt;/h3&gt;
&lt;p&gt;Tools for creating, resizing, and managing partitions and&lt;br&gt;
partition tables. Used for setting up drives or external storage.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;gptfdisk&lt;/code&gt;, &lt;code&gt;parted&lt;/code&gt;, &lt;code&gt;gparted&lt;/code&gt; (GUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="lvm-tools"&gt;LVM Tools&lt;/h3&gt;
&lt;p&gt;If your system uses Logical Volume Management for flexible disk&lt;br&gt;
partitioning, these are required.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;lvm2&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="backup-tool"&gt;Backup Tool&lt;/h3&gt;
&lt;p&gt;Copies data to a secondary location in a way that supports&lt;br&gt;
incremental backups, deduplication, and restoration. &lt;code&gt;rsync&lt;/code&gt; is&lt;br&gt;
simple file mirroring. &lt;code&gt;restic&lt;/code&gt; and &lt;code&gt;borg&lt;/code&gt; add encryption,&lt;br&gt;
deduplication, and snapshot management.&lt;/p&gt;
&lt;p&gt;This is not optional if the data matters. A broken package&lt;br&gt;
upgrade, a full disk, or a hardware failure will eventually&lt;br&gt;
happen.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;rsync&lt;/code&gt;, &lt;code&gt;restic&lt;/code&gt;, &lt;code&gt;borgbackup&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="cloud-storage-client"&gt;Cloud Storage Client&lt;/h3&gt;
&lt;p&gt;Syncs files with a remote cloud storage service.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;filen-cli&lt;/code&gt;, &lt;code&gt;rclone&lt;/code&gt;, &lt;code&gt;syncthing&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="remote-desktop-client"&gt;Remote Desktop Client&lt;/h3&gt;
&lt;p&gt;Connects to remote machines running a graphical desktop via VNC,&lt;br&gt;
RDP, or other protocols. Useful for managing Windows machines or&lt;br&gt;
headless Linux servers that have a GUI.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;remmina&lt;/code&gt;, &lt;code&gt;tigervnc&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="12-system-utilities"&gt;12. System Utilities&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="system-monitor--resource-monitor"&gt;System Monitor / Resource Monitor&lt;/h3&gt;
&lt;p&gt;Displays live information about CPU, memory, disk I/O, network,&lt;br&gt;
and running processes. A better-looking, more informative&lt;br&gt;
replacement for &lt;code&gt;top&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;btop&lt;/code&gt;, &lt;code&gt;htop&lt;/code&gt;, &lt;code&gt;bottom&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="process-viewer"&gt;Process Viewer&lt;/h3&gt;
&lt;p&gt;A better &lt;code&gt;ps&lt;/code&gt;. Lists running processes with readable output,&lt;br&gt;
filtering, and sorting.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;procs&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="fuzzy-finder-cli"&gt;Fuzzy Finder (CLI)&lt;/h3&gt;
&lt;p&gt;An interactive filter for lists of text in the terminal.&lt;br&gt;
Integrates with the shell to search command history, files,&lt;br&gt;
processes, and anything else that outputs text.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;fzf&lt;/code&gt;, &lt;code&gt;sk&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="smart-search-file-content"&gt;Smart Search (File Content)&lt;/h3&gt;
&lt;p&gt;Searches file contents recursively. Much faster than &lt;code&gt;grep -r&lt;/code&gt;&lt;br&gt;
on large codebases.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;ripgrep&lt;/code&gt;, &lt;code&gt;silversearcher-ag&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="smart-search-file-name"&gt;Smart Search (File Name)&lt;/h3&gt;
&lt;p&gt;Finds files by name. Faster and more user-friendly than &lt;code&gt;find&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;fd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="modern-ls-replacement"&gt;Modern &lt;code&gt;ls&lt;/code&gt; Replacement&lt;/h3&gt;
&lt;p&gt;A replacement for &lt;code&gt;ls&lt;/code&gt; with colour, icons (with Nerd Fonts),&lt;br&gt;
git status integration, and human-readable sizes.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;eza&lt;/code&gt;, &lt;code&gt;lsd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="download-manager"&gt;Download Manager&lt;/h3&gt;
&lt;p&gt;Downloads files from the internet, with support for resuming&lt;br&gt;
interrupted downloads, parallel connections, and multiple&lt;br&gt;
protocols.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;aria2&lt;/code&gt;, &lt;code&gt;wget&lt;/code&gt;, &lt;code&gt;curl&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="calculator-cli"&gt;Calculator (CLI)&lt;/h3&gt;
&lt;p&gt;A command-line calculator for quick arithmetic or more complex&lt;br&gt;
expressions without opening a GUI application.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;bc&lt;/code&gt;, &lt;code&gt;qalculate&lt;/code&gt; (has a CLI mode)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="security-auditing"&gt;Security Auditing&lt;/h3&gt;
&lt;p&gt;Checks the system for known vulnerabilities in installed packages&lt;br&gt;
and configuration issues.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;arch-audit&lt;/code&gt;, &lt;code&gt;rkhunter&lt;/code&gt;, &lt;code&gt;lynis&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="duplicate-file-finder"&gt;Duplicate File Finder&lt;/h3&gt;
&lt;p&gt;Scans directories for files with identical content and lists or&lt;br&gt;
removes them. Useful for cleaning up storage.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;fdupes&lt;/code&gt;, &lt;code&gt;rmlint&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="13-applications"&gt;13. Applications&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="web-browser"&gt;Web Browser&lt;/h3&gt;
&lt;p&gt;Fetches, renders, and runs web content. Wayland-native browsers&lt;br&gt;
render noticeably smoother than those running via XWayland.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;firefox&lt;/code&gt;, &lt;code&gt;librewolf&lt;/code&gt;, &lt;code&gt;floorp&lt;/code&gt;, &lt;code&gt;brave&lt;/code&gt;, &lt;code&gt;chromium&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="email-client"&gt;Email Client&lt;/h3&gt;
&lt;p&gt;Sends and receives email. Can be a full GUI application or a&lt;br&gt;
terminal-based client.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;thunderbird&lt;/code&gt;, &lt;code&gt;tutanota-desktop&lt;/code&gt; (GUI),&lt;br&gt;
&lt;code&gt;neomutt&lt;/code&gt;, &lt;code&gt;aerc&lt;/code&gt; (TUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="document-viewer--pdf-reader"&gt;Document Viewer / PDF Reader&lt;/h3&gt;
&lt;p&gt;Opens and reads PDF, ePub, DjVu, and similar formats. A minimal&lt;br&gt;
document viewer is faster than a full office suite for just&lt;br&gt;
reading.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;zathura&lt;/code&gt; (with &lt;code&gt;zathura-pdf-mupdf&lt;/code&gt;), &lt;code&gt;evince&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;okular&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="epub--ebook-reader"&gt;ePub / eBook Reader&lt;/h3&gt;
&lt;p&gt;A dedicated reader for ePub files specifically. &lt;code&gt;zathura&lt;/code&gt; can&lt;br&gt;
handle some formats but a dedicated reader offers better&lt;br&gt;
navigation, bookmarking, and reading experience for long-form&lt;br&gt;
text.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;epr&lt;/code&gt; (terminal), &lt;code&gt;foliate&lt;/code&gt; (GUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="image-viewer"&gt;Image Viewer&lt;/h3&gt;
&lt;p&gt;Opens and browses image files. Should be Wayland-native or&lt;br&gt;
usable under XWayland.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;imv&lt;/code&gt;, &lt;code&gt;swayimg&lt;/code&gt;, &lt;code&gt;eog&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="image-manipulation-tool"&gt;Image Manipulation Tool&lt;/h3&gt;
&lt;p&gt;Edits and converts images. &lt;code&gt;imagemagick&lt;/code&gt; is a CLI tool that&lt;br&gt;
handles format conversion, resizing, and compositing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;imagemagick&lt;/code&gt; (CLI), &lt;code&gt;gimp&lt;/code&gt; (GUI raster),&lt;br&gt;
&lt;code&gt;inkscape&lt;/code&gt; (GUI SVG / vector)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="video-player"&gt;Video Player&lt;/h3&gt;
&lt;p&gt;Plays video files and streams. &lt;code&gt;mpv&lt;/code&gt; is the standard for&lt;br&gt;
terminal-first setups &amp;ndash; it is scriptable, lightweight, and&lt;br&gt;
supports virtually every format.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;mpv&lt;/code&gt;, &lt;code&gt;vlc&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="media-downloader"&gt;Media Downloader&lt;/h3&gt;
&lt;p&gt;Downloads video and audio from websites and streaming platforms&lt;br&gt;
to local files.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;yt-dlp&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="music-player-daemon"&gt;Music Player Daemon&lt;/h3&gt;
&lt;p&gt;A background daemon that manages a music library and plays audio.&lt;br&gt;
Controlled separately by a client application. Separates&lt;br&gt;
playback logic from the interface &amp;ndash; if your UI crashes, the&lt;br&gt;
music keeps playing.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;mpd&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="music-player-client"&gt;Music Player Client&lt;/h3&gt;
&lt;p&gt;The interface for a music player daemon. Controls playback,&lt;br&gt;
browsing the library, and managing the queue.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;ncmpcpp&lt;/code&gt;, &lt;code&gt;mpc&lt;/code&gt; (CLI), &lt;code&gt;cantata&lt;/code&gt; (GUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="note-taking-application"&gt;Note Taking Application&lt;/h3&gt;
&lt;p&gt;A place to write and organise notes, references, and personal&lt;br&gt;
knowledge.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;obsidian&lt;/code&gt;, &lt;code&gt;logseq&lt;/code&gt;, &lt;code&gt;zettlr&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="password-manager"&gt;Password Manager&lt;/h3&gt;
&lt;p&gt;An encrypted database of credentials. Without one you either&lt;br&gt;
reuse passwords or write them somewhere insecure.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;keepassxc&lt;/code&gt;, &lt;code&gt;bitwarden&lt;/code&gt;, &lt;code&gt;pass&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="office-suite"&gt;Office Suite&lt;/h3&gt;
&lt;p&gt;For documents, spreadsheets, and presentations in standard&lt;br&gt;
formats (ODF, DOCX, XLSX, etc.).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;libreoffice&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="spell-check-library"&gt;Spell Check Library&lt;/h3&gt;
&lt;p&gt;Provides spell checking for applications that support it &amp;ndash;&lt;br&gt;
LibreOffice, email clients, some browsers. You install the&lt;br&gt;
library and then the dictionary for your language separately.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;hunspell&lt;/code&gt;, &lt;code&gt;hunspell-en_gb&lt;/code&gt;, &lt;code&gt;hunspell-en_us&lt;/code&gt;,&lt;br&gt;
&lt;code&gt;aspell&lt;/code&gt; (some applications prefer this over hunspell)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="calculator-gui"&gt;Calculator (GUI)&lt;/h3&gt;
&lt;p&gt;A graphical calculator. Qalculate is particularly good because&lt;br&gt;
it handles unit conversion, symbolic maths, and complex&lt;br&gt;
expressions.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;qalculate&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="communication--messaging"&gt;Communication / Messaging&lt;/h3&gt;
&lt;p&gt;Applications for chat, social platforms, and real-time&lt;br&gt;
communication.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;telegram-desktop&lt;/code&gt;, &lt;code&gt;element-desktop&lt;/code&gt; (Matrix),&lt;br&gt;
&lt;code&gt;discord&lt;/code&gt;, &lt;code&gt;slack-desktop&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="fediverse--social-client"&gt;Fediverse / Social Client&lt;/h3&gt;
&lt;p&gt;TUI or GUI clients for federated social platforms &amp;ndash; Mastodon,&lt;br&gt;
Akkoma, Pleroma, Misskey. If you are on the Fediverse and want&lt;br&gt;
to interact without a browser.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;tut&lt;/code&gt; (Mastodon TUI), &lt;code&gt;toot&lt;/code&gt; (CLI),&lt;br&gt;
&lt;code&gt;kaiteki&lt;/code&gt; (GUI, multi-platform Fediverse)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="rss--feed-reader"&gt;RSS / Feed Reader&lt;/h3&gt;
&lt;p&gt;Aggregates and displays content from RSS and Atom feeds &amp;ndash; blogs,&lt;br&gt;
news, podcast listings, YouTube channels. Keeps information&lt;br&gt;
consumption terminal-side and out of the browser.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;newsboat&lt;/code&gt; (TUI), &lt;code&gt;rss-guard&lt;/code&gt; (GUI)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="torrent-client"&gt;Torrent Client&lt;/h3&gt;
&lt;p&gt;Downloads files via the BitTorrent protocol. Useful for Linux&lt;br&gt;
ISOs, large open datasets, and anything distributed without a&lt;br&gt;
central server.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;transmission-cli&lt;/code&gt; (CLI/daemon),&lt;br&gt;
&lt;code&gt;transmission-gtk&lt;/code&gt; (GUI), &lt;code&gt;qbittorrent&lt;/code&gt;, &lt;code&gt;deluge&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="fetching-tool"&gt;Fetching Tool&lt;/h3&gt;
&lt;p&gt;Displays system information alongside an ASCII or image logo.&lt;br&gt;
Purely aesthetic. Installed last, used constantly.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Examples: &lt;code&gt;fastfetch&lt;/code&gt;, &lt;code&gt;neofetch&lt;/code&gt; (unmaintained), &lt;code&gt;macchina&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="14-fonts-summary"&gt;14. Fonts Summary&lt;/h2&gt;
&lt;p&gt;Fonts deserve a consolidated note because they affect the entire&lt;br&gt;
desktop.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Example Packages&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Monospace Nerd Font&lt;/td&gt;
&lt;td&gt;Terminal, editor, status bar icons&lt;/td&gt;
&lt;td&gt;&lt;code&gt;ttf-jetbrains-mono-nerd&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sans-Serif UI Font&lt;/td&gt;
&lt;td&gt;GTK apps, notifications, launchers&lt;/td&gt;
&lt;td&gt;&lt;code&gt;inter-font&lt;/code&gt;, &lt;code&gt;noto-fonts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Emoji Font&lt;/td&gt;
&lt;td&gt;Emoji rendering everywhere&lt;/td&gt;
&lt;td&gt;&lt;code&gt;noto-fonts-emoji&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Serif Font&lt;/td&gt;
&lt;td&gt;Documents, reading&lt;/td&gt;
&lt;td&gt;&lt;code&gt;adobe-source-serif-fonts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="15-quick-checklist"&gt;15. Quick Checklist&lt;/h2&gt;
&lt;p&gt;Use this to verify nothing critical is missing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Core System&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Base system and kernel&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; CPU microcode and firmware&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Bootloader&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Man pages&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Time synchronisation&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Disk encryption (ideally set up at install time)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Display&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; GPU driver and video acceleration&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Display manager or TTY launch setup&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Compositor (Hyprland)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; XDG desktop portals (compositor-specific + GTK fallback)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; XWayland&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Display configuration tool&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Desktop Components&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Status bar&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Application launcher&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Notification daemon&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Screen lock + idle daemon&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Wallpaper setter&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Polkit agent&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Keyring&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Clipboard manager + &lt;code&gt;wl-clipboard&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Screenshot tool + region selector&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Screen annotation tool&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Color picker&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; OSD (volume / brightness feedback)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Audio&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Audio server (PipeWire + WirePlumber)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Volume control&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Networking&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Network manager + frontend&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Firewall&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; SSH client/server&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Encrypted DNS&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Network diagnostics tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Input &amp;amp; Hardware&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Brightness control&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Bluetooth (if hardware present)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Power management (if on a laptop)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Fingerprint reader (if hardware present)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Input remapper (if needed)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Smart drive monitor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Shell &amp;amp; Terminal&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Terminal emulator&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Shell + prompt&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Terminal multiplexer&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Pager&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; AUR helper&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Theming&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Fonts (monospace Nerd Font + emoji at minimum)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Icon theme + hicolor fallback&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Cursor theme&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; GTK settings manager&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Qt theming (qt5ct / qt6ct + Kvantum)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Editors &amp;amp; IDE&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Simple terminal editor (nano or micro)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Modal terminal editor (vim or neovim)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; IDE (if text editor + plugins is not sufficient)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Development&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Git + git TUI&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Language runtimes and toolchains&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Language version manager&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Build tools (base-devel covers most of this)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; LSP servers&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; API testing tool&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Database client (if working with databases)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Container runtime (docker, podman, or incus)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Virtualisation (qemu + virt-manager if needed)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Diff / merge tool&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; System call tracer (strace)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Hex editor&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;File Management&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; File manager&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Archive manager&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Disk usage analyser&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Disk / partition management tools&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Backup tool and a tested restore procedure&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Cloud storage client (if needed)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Remote desktop client (if needed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;System Utilities&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; System monitor&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Fuzzy finder (fzf)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Smart file content search (ripgrep)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Smart file name search (fd)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Modern ls replacement (eza)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Download manager&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Security auditing tools&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Applications&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Web browser&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Email client&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Document / PDF viewer&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Image viewer&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Video player&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Music player daemon + client&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Note taking application&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Password manager&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Office suite&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Spell check library + dictionaries&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Media downloader (yt-dlp)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Communication / messaging apps&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Torrent client (if needed)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; RSS reader (if needed)&lt;/li&gt;
&lt;li&gt;&lt;input disabled="" type="checkbox"&gt; Fetching tool&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;This note is a reference, not a prescription. Your actual&lt;br&gt;
package list will differ. The point is to know what each&lt;br&gt;
category does so you know what you are missing when something&lt;br&gt;
does not work.&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>