Configuration

BIOS

Enter the BIOS by tapping F10 as the computer boots. Be sure to hold the FN key because, without it, the key will be a media key instead of a function key.

BIOS manual

OS

This computer is running EndeavourOS/Arch, installed from a live ISO booted from a flash drive.

Kernel

I’ve added the LTS kernel after an unexpected hard reboot caused by video drivers after an update. The default kernel can be changed at any time by running set-default-kernel or on-demand from the boot menu on each boot. (The system will always boot into the last booted kernel.)

I set the default kernel in the boot loader config. The system uses systemd-boot, with a loader config at /efi/loader/loader.conf.

Added pcie_aspm=off to /etc/kernel/cmdline. This forces the PCIe bus to stay active, preventing hard hardware freezes caused by the Intel BE201 Wi-Fi 7 card crashing during power state transitions (ASPM). To revert, remove the parameter and run sudo reinstall-kernels.

Battery

The charge can be capped at 80% via a BIOS setting. I’m currently running it at 100% because it extends the life only by a little and gives me less capacity for the life of the computer. Not a great trade.

Keymaps

I use a powerful daemon called keyd to handle all system-wide key remapping. This setup replaced a previous implementation that used interception-tools and caps2esc. keyd is more flexible, allowing for complex mappings like layers, chords, and tap-vs-hold actions. It operates at the kernel event level, making it compatible with both Wayland and X11.

This is currently handling the Caps Lock remap to ctrl/esc, the remap of the Copilot key back to a control key, and Meta+Caps Lock to regular caps lock.

Configuration

The primary configuration is located at /etc/keyd/default.conf. This single file defines all custom behaviors.

Management and Debugging

Key management commands for when I need to make changes or fix issues.

Check the service status

sudo systemctl status keyd

Apply changes after editing the config file

sudo keyd reload

Debug key events in real-time

This is the most useful command for troubleshooting. It shows exactly what keyd is seeing when you press a key.

sudo keyd monitor

Check the logs for errors

If keyd fails to start or reload, the logs will explain why (usually a syntax error in the config).

journalctl -u keyd -n 50 --no-pager

Trackpad/Touchpad

Most of the configuration is in the standard settings panel GUI, but I did install a three-finger drag script.

Uninstalling the three-finger drag script

  1. Stop and disable the systemd user service

    systemctl --user disable --now three-finger-drag.service
  2. Remove the service file, program binary, and user configuration

    rm ~/.config/systemd/user/three-finger-drag.service
    rm -rf ~/.config/linux-3-finger-drag
    sudo rm /usr/bin/linux-3-finger-drag
  3. Remove the system rules and module configuration

    sudo rm /etc/udev/rules.d/60-uinput.rules
    sudo rm /etc/modules-load.d/uinput.conf
  4. Remove your user from the input group

    sudo gpasswd --delete $USER input
  5. Reboot to apply all permission changes

    sudo reboot

System Sounds

The default volume adjust sound was abrasive and annoying, so I swapped in my own. The files are at /usr/share/sounds/ocean/stereo/, and replacing the one just meant dropping in a new file named audio-volume-change.oga. I used a sound from freesound.org.

The old file was renamed audio-volume-change.oga.old. oga is an ogg file but with the extension changed.

Terminal/Shell

The shell is ZSH with oh-my-zsh and the Powerlevel10k prompt.

findfile

This oh-my-zsh plugin allows for creation of file aliases.

findfile <alias-name> <file-path>

After creating an alias, the file’s path can be referenced prefixed with @ (defined in ~/.zshrc as fastfile_var_prefix).

Aliases

AliasFunction
fffastfile
ffpfastfile_print
ffrmfastfile_rm
fflsfastfile_ls
ffsyncfastfile_sync

Intel GPU Acceleration (IPEX-LLM / oneAPI)

This system is configured to use the integrated Intel Arc GPU for AI/ML acceleration using Intel’s instructions. This provides a significant performance uplift over CPU-only inference. The setup involves specific driver versions and the oneAPI toolkit, which are necessary for both high-performance libraries like IPEX-LLM and more general-purpose tools like Ollama.

The key steps were:

  1. Intel Compute Packages: Installed the official Intel compute runtime packages (intel-level-zero-gpu, intel-opencl-icd, etc.) from Intel’s dedicated apt repository. These packages provide the low-level Level Zero and OpenCL libraries that applications use to communicate with the GPU.
    sudo pacman -S intel-compute-runtime level-zero-loader intel-graphics-compiler ocl-icd
  2. oneAPI Toolkit: Installed the Intel oneAPI Base Toolkit (version 2024.0). This provides the SYCL compilers and libraries (DPC++) that are essential for modern, high-performance GPU code. This toolkit is required for both building specialized llama.cpp versions and for pre-built applications like Ollama to function correctly.
    sudo pacman -S intel-oneapi-basekit
    

This setup ensures that any application compiled with SYCL or OpenCL support can fully leverage the iGPU for compute tasks. The environment can be activated in any shell session by running source /opt/intel/oneapi/setvars.sh.

Once the GPU acceleration is in place, it’s possible to install and run Intel’s custom llama.cpp build.

Login Screen

To set fractional scaling for the SDDM login screen, I created /etc/sddm.conf.d/hidpi.conf.

[General]
GreeterEnvironment=QT_SCREEN_SCALE_FACTORS=1.5,QT_FONT_DPI=144

[X11]
EnableHiDPI=true

[Wayland]
EnableHiDPI=true

Firewall

I use ufw as the firewall on this system. I have added some rules to allow for KDE to communicate: 1714:1764 TCP/UDP.

Usage

Check Status

Shows if the firewall is active and lists all current rules.

sudo ufw status

Enable Firewall

Turns the firewall on and sets it to start on system boot.

sudo ufw enable

Allow a Port

Opens a specific port for incoming traffic (replace 22 with the port you need, e.g., 80, 443, or ssh). You can allow a range of ports with : like 22:24 and you can specify the protocol after a slash like 1714:1764/udp.

sudo ufw allow 22

Allow from an IP

Allows all traffic coming from a specific IP address (useful for restricting access to your home/office IP).

sudo ufw allow from 192.168.1.50

Delete a Rule

Removes a rule. You can delete by typing the original command prefixed with delete.

sudo ufw delete allow 22

Reload

After making rule changes, reload the firewall.

sudo ufw reload

/etc/hosts

I’ve added an entry for the Dockge service that runs on the home server that will route it inside the network. The service doesn’t accept traffic outside the local network, so it doesn’t respond when the VPN connected (because then traffic is routed out across the internet instead of directly across the home network). This entry enables requests to be routed correctly, even when the VPN is connected.

This means requests will not route correctly when not connected to the home network, but that doesn’t matter because the service will not respond anyway.

Package manager mirrorlist

I believe I updated the package manager’s mirrorlist alongside a recent update. This had the unintended side effect of replacing my existing list with one with all of the mirrors commented out.

In an attempt to fix and prevent this in the future, I have installed ghostmirror and, I believe, configured it to run periodically on the mirrorlist. Here’s what I did:

  1. Ran ghostmirror -PoclLS "United States" ~/.config/ghostmirror/mirrorlist 30 state,outofdate,morerecent,ping to get a fresh list
  2. Ran ghostmirror -PoDumlsS ~/.config/ghostmirror/mirrorlist ~/.config/ghostmirror/mirrorlist light state,outofdate,morerecent,estimated,speed to test the list and start a timer
  3. Ran systemctl --user list-timers to confirm the timer

Tried the instructions on the Arch wiki’s page on Ghostmirror, but they were incorrect. I ended up using the instructions from Ghostmirror’s GitHub instead.

Software

Updates

Software updates can be handled in one shot by topgrade, either running topgrade or my upgrade alias. Topgrade was installed via Cargo because the binary shipping on the AUR is bundled with a self-upgrade that fails since the binary is installed as root, making it not modifiable by the user running Topgrade. The Cargo installation does not include this functionality since it depends on Cargo updates to also update Topgrade.

Secrets manager

I tried switched from KWallet to GNOME Keyring in KDE, but this did not work because many apps do not strictly use the bus to communicate with the secret store. Some apps cache the secret store they have begun using and continue using it. Others seem to pull the desktop environment and use that to decide which secret store to use.

In order to use other window managers without breaking everything, I will need to try to make sure they use KWallet instead of GNOME Keyring.

Distrobox

I’ve installed Distrobox for programs that need to be run via another distro. AUR has most software, but for a sensitive app like Signal, I want to install only from an official source to ensure the integrity of the app. They support installation only on Debian-based distros.

Commands

Create a New Container

Creates a new Distrobox container from a specified image. The image can be from any major registry, like ubuntu:22.04, fedora:latest, or archlinux.

distrobox-create --name <container-name> --image <image:tag>

List All Containers

Shows all of your created Distrobox containers along with their name, ID, current status (Running/Stopped), and the base image they use.

distrobox-list

Get a Shell on a Container

Opens an interactive terminal session inside the specified container. This is the primary command for using your Distrobox environment.

distrobox-enter <container-name>

Stop a Running Container

Stops a container that is currently running, freeing up system resources. The container’s data is preserved and it can be started again with distrobox-enter.

distrobox-stop <container-name>

Delete a Container

Permanently removes a container and all of its associated data. This action cannot be undone.

distrobox-rm <container-name>

Export a Graphical App

Run this command from inside a container to make a graphical application available in your host system’s main application menu.

distrobox-export --app <app-name>

Export a Command-Line Tool

Run this command from inside a container to make a binary or script available directly on your host’s terminal.

distrobox-export --bin <path-to-binary>

Run a Single Command in a Container

Executes a single, non-interactive command inside a container and then exits. This is useful for scripting or quick status checks.

distrobox-enter <container-name> -- <command>

Upgrade Distrobox Integration

Run this on the host to update the Distrobox helper scripts inside all of your containers. This is recommended after updating the Distrobox package on your host system.

distrobox-upgrade --all

Obsidian

I have installed Obsidian from the Flatpak and configured it to sync via my LiveSync server. Important note: if you do not use the LiveSync sync mode (On Events was the default), it seems to just not sync at all!

For customization sync, you must enable customization sync and select how to handle each file, but then you must also enable hidden file syncing.

Betterbird

I’m using Betterbird for email, contacts, and calendar, with a few additional customizations. First, I’ve added a plugin to minimize on close. (Betterbird can still be closed with Ctrl-q.) I’ve then set Betterbird to minimize to the tray. This will allow me to keep getting email and calendar notifications without having to have the window actually visible. Second, I’ve added tbkeys-lite to give me Vim-like keyboard shortcuts. The lite version does not support arbitrary JavaScript in shortcuts.

Espanso

I run Espanso for text expansion. Its config is at ~/.config/espanso, and that config is under version control. I have it pushed to my personal code forge at ssh://git@code.c.devon.lol:222/Devon/espanso-config.git.

As of 2025-12-21, Espanso does not support per-application settings in Wayland. It also can’t insert in Ghostty, so I have to make sure all of my triggers are obscure enough not to trigger in Ghostty so as to avoid randomly having the contents of the clipboard pasted into the terminal.

KOReader

KOReader’s ā€œkeep screen aliveā€ setting does not work, possibly because of Wayland. I have prepended systemd-inhibit to KOReader’s .desktop file in the menu so that, when it starts, it will inhibit sleep.

Directory navigation (with z)

I am using zoxide for directory navigation with z. It works differently than the previous implementation which automatically captured directories as you navigated to them. This one only captures directories if you navigate to them using it. I will likely alias it to cd so that I will just use it automatically.

zi is also available for interactive fuzzy searching of zoxide’s directory history.

Ollama (Local LLM Server)

Ollama provides a local, OpenAI-compatible API server for running large language models. It uses llama.cpp as its backend and is configured to leverage this system’s Intel Arc iGPU via the oneAPI toolkit for hardware acceleration. This allows other tools to interact with local models without needing to manage the inference process themselves.

Ollama runs as a systemd service under its own ollama user. This means models are stored in /usr/share/ollama/.ollama/models, not the home directory. All management commands must be run with sudo to interact with the service daemon. The local API is the primary way to interact with the models.

  • Service Management: sudo systemctl status|start|stop ollama
  • Model Management: ollama pull|ls|rm <model>
  • OpenAI API Base URL: http://localhost:11434/v1

Loki (AI Shell Assistant)

Loki is a command-line tool that connects to an LLM provider for various tasks, primarily acting as a shell assistant. Its main purpose on this system is to power the help shell alias, which converts natural language queries into shell commands. It was installed via Cargo (cargo install loki-ai).

Configuration is done in ~/.config/loki/config.yaml. The client is configured to point to the local Ollama instance.

I’ve added the shell integration to ~/.zshrc and a help alias at ~/.oh-my-zsh/custom/aliases.zsh.

Ollama

Ollama is running as a service to provide on-demand access to an OpenAI compatible API. The service name is simply ollama, and it may be managed with systemctl.

API

http://localhost:11434/v1

Commands

Download or update a model

ollama pull <model-name>

Browse models using Ollama Search

List installed models

ollama list

Remove an installed model

ollama rm <model-name>

Loki (CLI AI tool)

Loki has many features, including a chat interface accessed via the bare command (loki). My primary use case for it is to generate CLI commands from plain language. This is done with loki -e <description-of-command>, which I have aliased to help <description-of-command>.

The configuration is at ~/.config/loki/config.yaml. It was installed via Cargo.

Document Scanner (Simple Scan)

This app goes by two names. I have installed it and used their own post-scan OCR script to do OCR on the output. The script uses ocrmypdf with Tesseract to perform the OCR. I currently have only the English language installed, but I can install others with install tesseract-data to get paru to search for the available language data packages.

CLI and TUI apps

CLI and TUI apps on AppleKid HP Omnibook X Flip 16

I have trouble remembering which CLI apps are available to me, so this list is meant to catalog what I have and describe what they are for. The table will be consumed by a shell function that makes them easily searchable from the command line. All data outside the table is ignored by the script.

CommandTags/CategoryDescription
alsamixertuis, audio, sound, hardware, configuration, utilitiesA TUI-based sound card mixer for ALSA. Provides detailed control over volume levels, inputs, and outputs in the terminal.
aproposhelp, discovery, documentationSearches the names and descriptions of man pages for a keyword. Useful for finding a command when you only know what it does, not what it’s called.
badblocksdisks, drives, storage, diagnostics, maintenance, utilitiesA utility to scan a storage device for bad sectors. It’s a destructive-read/write test, so it’s best used on unmounted partitions.
bluetoothctlbluetooth, pairing, system, devices, audio, hardware, configurationThe interactive command-line shell for managing Bluetooth devices. Use it to scan for, pair with, and connect to peripherals like headphones or mice.
brightnessctlhardware, display, brightness, configurationA simple command-line tool to read and control device brightness. Ideal for scripting backlight adjustments on laptops or monitors.
cdaliases, navigation, paths, directoriesA ā€œsmarter cd commandā€. This is an alias for zoxide, which remembers your most frequently used directories and allows you to jump to them with just a few characters.
cfindfunctions, help, discovery, software, apps, cliAn interactive CLI command finder which can be invoked via command or by its current binding of Ctrl+Space. Searches through commands listed in a file in my knowledgebase.
chattrfiles, permissions, security, utilitiesChanges file attributes on a Linux filesystem. Can be used to make files immutable (even for root), preventing accidental deletion or modification.
checkupdatespackages, updates, archA script included with Arch Linux that safely checks for available package updates from official repositories without running a full system upgrade.
copyfileplugins, copy, clipboard, filesCopies the entire content of a specified file to the system clipboard. (From a Zsh plugin)
cryptsetupencryption, disks, partitions, securityThe command-line tool for managing LUKS encrypted partitions. Used to open (map), close, format, and resize encrypted volumes.
dignetworks, dns, diagnostics, utilitiesA command-line tool for querying DNS servers. Provides more detailed information than host or nslookup.
distroboxcontainers, podman, docker, virtualizationCreates tightly integrated containerized Linux environments using podman or docker. Allows you to run apps from any distro (e.g., Ubuntu on Arch) as if they were native.
dmidecodehardware, diagnostics, firmware, bios, utilitiesDumps a computer’s DMI (or SMBIOS) table contents in a human-readable format. Excellent for getting detailed hardware information like serial numbers or exact motherboard models.
downgradepackages, arch, maintenance, utilitiesAn Arch Linux script to downgrade one or more packages to a version in your local cache or from the Arch Linux Archive.
duftuis, disks, drives, partitions, storage, mounts, utilitiesA user-friendly disk usage/free utility that presents information in a clean, colorized, and easy-to-read table.
dyskdisks, drives, storageDisplay a customizable table of disks.
efibootmgrfirmware, boot, uefi, configuration, maintenance, utilitiesA command-line tool for managing UEFI boot entries. Used to view, create, delete, and change the boot order.
ethtoolnetworks, hardware, diagnostics, drivers, utilitiesA utility for querying and controlling network driver and hardware settings, such as link speed and duplex mode on an ethernet device.
fastfilefiles, paths, pluginsCreates an alias to a path. (From a Zsh plugin)
fastfile_lsfiles, paths, pluginsLists path aliases created with fastfile.
findfiles, search, paths, system, utilitiesA powerful utility to recursively search for files based on complex criteria (name, size, type, date, etc.). Unlike locate, it searches the filesystem in real-time, making it slower but more flexible. Can also execute commands on found items.
flatpakpackages, install, appsA package manager for sandboxed applications from repositories like Flathub. Lets you install apps that work across different Linux distributions.
galiases, programming, source-control, development, version-controlThe primary alias for git.
gaaliases, programming, source-control, development, version-controlAdds file contents to the git index. An alias for git add.
gbaliases, programming, source-control, development, version-controlLists, creates, or deletes git branches. An alias for git branch.
gcaliases, programming, source-control, development, version-controlRecords changes to the git repository. An alias for git commit --verbose.
gcoaliases, programming, source-control, development, version-controlSwitches git branches or restores working tree files. An alias for git checkout.
gdaliases, programming, source-control, development, version-controlShows changes between git commits, commit and working tree, etc. An alias for git diff.
ghostmirrorpackages, system, utilitiesCreates a mirrorlist for pacman by checking speeds of the list in the mirrorlist file. Can also build a new mirrorlist given a country name. (Currently configured to run on a systemd userspace timer.)
ghosttyterminalStarts the Ghostty terminal emulator if run bare, or with sub-commands runs actions that are helpful in configuring the emulator.
gitprogramming, source-control, development, version-controlA source control app
glaliases, programming, source-control, development, version-controlFetches from and integrates with another git repository or a local branch. An alias for git pull.
glancestuis, monitoring, performance, processes, hardware, diagnostics, utilitiesA system monitoring tool providing a comprehensive, all-in-one view of system resources.
gpaliases, programming, source-control, development, version-controlUpdates remote git refs along with associated objects. An alias for git push.
gpristinealiases, programming, source-control, development, version-controlDestructive. Discards all local changes to a git project, including untracked files, to restore a pristine working directory. An alias for git reset --hard && git clean --force -dfx.
gstaliases, programming, source-control, development, version-controlShows the git working tree status. An alias for git status.
helpaliases, help, cliAn alias for loki’s loki -e command writer.
hwinfohardware, listings, diagnostics, utilitiesA comprehensive hardware detection tool that can report on nearly every component in the system in great detail.
installaliases, packages, install, aur, archAlias for paru. Safely installs packages without running a full system upgrade.
inxihardware, listings, diagnostics, reports, utilitiesA powerful command-line system information script. It can generate highly detailed and readable reports about all aspects of a system’s hardware and software configuration.
iwctlnetworks, wifi, wireless, configuration, utilitiesThe interactive command-line client for iwd, a modern wireless daemon for Linux. Used to scan for and connect to Wi-Fi networks.
jqjson, processors, parsers, pipes, filters, scripting, data-transformations, utilitiesA command-line JSON processor, often described as ā€˜sed for JSON’. Essential for parsing, filtering, and transforming structured data from APIs or configuration files. Also used for pretty-printing.
kdeconnect-clikde, phones, devices, transfers, pairingA command-line tool to interact with KDE Connect. Allows for scripting actions like sending files, sharing the clipboard, or finding your phone from the terminal.
keydkeyboard, macros, input, system, utilities, configuration, hardwareA powerful key remapping daemon, independent of X11 or Wayland. Used to create complex custom layouts, layers (like on QMK keyboards), and macros through simple config files.
lazygittuis, version-control, development, programming, source-controlAn interactive terminal UI for git that simplifies common workflows. Provides a fast, visual way to manage commits, branches, and diffs without memorizing complex commands.
locatefiles, search, paths, system, utilitiesFinds files and directories by instantly searching a pre-built system database. It is an extremely fast alternative to find for name-based searches, but relies on its database being current (updated with updatedb).
lokillms, ai, cli, helpCLI for interacting with local LLMs. Can be used for chat or to ask for help constructing shell commands.
lsblkdisks, drives, partitions, storage, block-devices, mounts, filesystems, hardware, listings, system, utilitiesLists block devices like hard drives and partitions. Shows a tree-like view of storage devices, their mount points, and sizes.
lscpucpus, processors, hardware, listings, system, utilitiesDisplays detailed information about the CPU architecture, including number of cores, threads, cache sizes, and model name.
lsmodmodules, drivers, kernel, listings, diagnostics, system, utilitiesLists all currently loaded Linux kernel modules. Used for checking which drivers are active and troubleshooting hardware support issues.
lsoffiles, processes, sockets, ports, networks, listings, diagnostics, debugging, system, utilitiesLists open files and the processes that opened them. An incredibly powerful diagnostic tool for figuring out which process is using a specific file, port, or socket.
lspcipci, devices, peripherals, hardware, listings, diagnostics, gpu, system, utilitiesLists all PCI devices and buses. Crucial for identifying graphics cards, network adapters, and other internal hardware components.
lsusbusb, devices, peripherals, hardware, listings, diagnostics, system, utilitiesLists all USB devices currently connected to the system. Essential for identifying hardware, checking vendor/product IDs, and troubleshooting peripherals.
miseversions, environments, runtimes, dev-envs, programming, developmentA fast, polyglot tool version manager that replaces tools like asdf and direnv. It manages project-specific runtimes (Node, Python, etc.) and environment variables from a single configuration file.
mkfsfilesystems, formatting, partitions, disks, utilitiesA family of commands (e.g., mkfs.ext4, mkfs.btrfs) used to create a new filesystem on a storage device or partition, effectively formatting it.
navidiscovery, software, apps, helpAn interactive cheat sheet for CLI apps.
ncnetworks, diagnostics, utilitiesFunctions as a ā€œSwiss Army knifeā€ for network testing, port scanning, file transfers, and creating network tunnels. Essential for verifying port accessibility (nc -zv your.ip <port>).
nmclinetworks, configuration, wifi, ethernet, connections, utilitiesThe primary command-line interface for NetworkManager. Essential for managing and scripting all aspects of network connections from the terminal.
nmtuituis, networks, configuration, wifi, ethernet, connections, utilitiesA simple and intuitive TUI for NetworkManager. Provides an easy, curse-based interface for managing network connections.
ollamallms, ai, apisA tool for running and serving large language models (like Llama 2, Mistral) on your local machine. It provides a simple CLI to pull, run, and chat with models, and exposes a REST API for other applications to use.
paccachepackages, maintenance, arch, cache, utilitiesA script from the pacman-contrib package used to clean the pacman package cache, for example by keeping only the last 3 versions of each package.
pacdiffconfiguration, maintenance, arch, utilitiesA script to manage .pacnew, .pacsave, and .pacorig files. It provides an interactive prompt to view, merge, or delete configuration file updates.
pactreepackages, dependencies, archShows the dependency tree of a given package. Extremely useful for understanding why a package is installed or for finding reverse dependencies.
pastelcolors, graphics, artColor generation and manipulation.
pclsaliases, containers, docker, virtualization, dev-envs, developmentLists all running Podman containers. An alias for podman container ls.
pclsaaliases, containers, docker, virtualization, dev-envs, developmentLists all Podman containers, including stopped ones. An alias for podman container ls --all.
pilsaliases, containers, docker, virtualization, dev-envs, developmentLists all local Podman container images. An alias for podman image ls.
plocatefiles, search, pathsA much faster reimplementation of locate. It creates an index of all files on the system and uses it to provide instantaneous search results.
podmancontainers, docker, virtualization, dev-envs, developmentA daemonless container engine for running OCI containers, images, and pods. Often used as a direct replacement for the Docker daemon, offering a compatible command-line interface without a central service.
powerprofilesctlpower, performance, laptops, configuration, utilitiesA command-line tool to query and control the system’s power profile (e.g., balanced, power-saver, performance).
praliases, containers, docker, virtualization, dev-envs, developmentRuns a command in a new Podman container. An alias for podman container run.
pritaliases, containers, docker, virtualization, dev-envs, developmentRuns a command in a new Podman container in interactive TTY mode. An alias for podman container run --interactive --tty.
prmaliases, containers, docker, virtualization, dev-envs, developmentRemoves one or more stopped Podman containers. An alias for podman container rm.
profunctions, paths, navigationNavigates to the projects directory. Add arguments to specify a directory to change to within projects.
pstpaliases, containers, docker, virtualization, dev-envs, developmentStops one or more running Podman containers. An alias for podman container stop.
pvpipes, monitoring, progress, transfersPipe Viewer. A terminal utility for monitoring the progress of data through a pipe. Invaluable for long-running commands like dd or tar.
pxcitaliases, containers, docker, virtualization, dev-envs, developmentExecutes a command inside a running Podman container in interactive TTY mode. An alias for podman container exec --interactive --tty.
reflectornetworks, packages, arch, maintenanceA script that can test the latest Arch Linux mirrors, filter them by speed and country, and overwrite your mirrorlist file.
rsyncfiles, backup, transfer, synchronizationA utility for synchronizing files and directories, both locally and remotely over the network. It is extremely efficient for backups and mirroring because it uses a delta-transfer algorithm to copy only the differences between source and destination.
set-default-kernelfunctions, system, configuration, kernelAllows for easy toggling of the default kernel between LTS and the standard Arch kernel.
smartctldisks, drives, storage, health, diagnostics, maintenance, utilitiesThe command-line utility for controlling and monitoring S.M.A.R.T. data on hard drives and SSDs. Essential for checking drive health.
startprojectfunctions, development, programmingLeverages mise to bootstrap a new app or script using the chosen platform. Keeps me from having to remember how to start a new project.
timeshiftbackup, snapshots, restore, maintenanceA system restore utility that takes snapshots of the filesystem. It can use rsync or native BTRFS snapshots on the backend.
tldrhelp, docs, cheatsheetSimplified, example-driven man pages.
topgradeupdates, maintenance, packagesA tool that finds all the package managers you use and runs their respective update commands. A single command to upgrade everything.
typsttypesetting, documents, compilersA compiler for creating scientific and technical documents using Typst’s markup language.
ufwfirewalls, security, networks, configurationA user-friendly command-line interface for managing a netfilter firewall. It provides a simple way to configure iptables by allowing or denying traffic on specific ports or from certain sources.
uninstallfunctions, packages, install, aur, arch, maintenanceRecursively removes a package, its unneeded dependencies, and its configuration files. Will uninstall a package by a command name in the package if you don’t know the package name.
updatealiases, updates, maintenance, packagesUpgrades all system packages using a variety of package managers. An alias for topgrade.
updatedbfiles, search, maintenanceThe command used to create or update the database for locate and plocate. Run this periodically to ensure search results are current.
valiases, tuis, editors, text, programming, developmentStarts the LazyVim Neovim configuration. An alias for lazyvim, which is a script that runs nvim with the NVIM_APPNAME env var set for lazyvim.
wgetnetworks, downloads, files, transfers, internetA non-interactive command-line tool for downloading files from the web. It supports HTTP, HTTPS, and FTP protocols and can handle recursive downloads.
whatishelp, discovery, documentationDisplays a very brief, one-line description of a command from its man page.
which-commandaliases, shell, paths, discoveryShows the source of a command, indicating if it’s an alias, function, or binary. An alias for Zsh’s powerful whence built-in.
winewindows, compatibility, applications, apps, virtualization, gamingA compatibility layer that allows you to run Windows applications on Linux. Used for everything from games to productivity software.
wl-copyclipboard, pipes, system, utilitiesCopies data from standard input to the Wayland clipboard. The modern equivalent of xclip for Wayland systems. Often used by piping data into it.
wl-pasteclipboard, pipes, system, utilitiesPastes data from the Wayland clipboard to standard output. The modern equivalent of xclip for Wayland systems. Output can be redirected or piped.
wpctlaudio, pipewire, hardware, configuration, diagnostics, utilitiesThe command-line control and introspection tool for PipeWire. Used to inspect, select, and configure audio and video devices.
xrandrdisplay, monitors, resolution, configuration, x11A command-line tool for configuring screen resolution, rotation, and multi-monitor setups in X11. Essential for display scripting.
zoxidenavigation, paths, directories, shell, productivityA ā€œsmarter cd commandā€ that remembers your most frequently used directories. Allows you to jump to a directory with just a few characters of its name.
Link to original

Programming

Containers

I have installed Podman for containers because it offers rootless mode (although I am not using it currently) and does not require a daemon.

Neovim

Neovim was installed with pacman. I’m using a lazyvim config, which is at ~/.config/lazyvim. I created a shell script at /home/raddevon/.local/bin/lazyvim which runs nvim setting the env var NVIM_APPNAME to use the lazyvim config. That same script is aliased to v for convenience and is set to EDITOR and VISUAL.

Editing Protected Files

It’s common to need to edit a non-user file… and especially to open that file without thinking about it! The suda.vim plugin handles this without exiting the editor. Save a file with sudo using Space + W.

Mise (for tool version management)

mise manages tool versions (like Node, Python) and environment variables per-directory.

  • Installation: Installed from the Arch Linux extras repo (sudo pacman -S mise).
  • Activation: Activated using the mise plugin in Oh My Zsh (~/.zshrc).

Usage

1. Managing Global (Default) Versions

This sets the default tool version to use when not inside a specific project. If the version isn’t installed, mise will install it for you.

Example: Set the default version for Node and Python.

mise use --global node@22
mise use --global python@3.12

This updates the global config file at ~/.config/mise/config.toml.

2. Project-Specific Settings (.mise.toml)

Create a .mise.toml file in a project’s root directory. When you cd into that directory, mise automatically activates these settings.

Example .mise.toml:

# File: ./my-project/.mise.toml
 
[tools]
node = "20"
python = "3.11"
 
[env]
DATABASE_URL = "postgres://user:pass@localhost/project_db"
NODE_ENV = "development"

3. Running One-off Commands

Use mise exec to run a command with a specific tool version, without changing your global or project settings.

Example: Run a command with Node v22.

mise exec node@22 -- node -v
# v22.x.x

Example: Start a Python 3 REPL.

mise exec python@3 -- python
# Python 3.13.2
# >>> ...

4. Installing Tools from Other Sources (Backends)

Use the backend:package syntax to install tools from package managers like npm or pipx, or directly from GitHub.

Example: Make prettier, black, and ripgrep globally available.

# Install from npm
mise use --global npm:prettier
 
# Install from pipx
mise use --global pipx:black
 
# Install from a GitHub repo
mise use --global github:BurntSushi/ripgrep

Now you can run prettier, black, and rg directly in your terminal.

Git

Configuration

1. General & UI Enhancements

These settings improve the general user experience.

  • interactive.singleKey = true

    • Purpose: Enables single-key responses for interactive commands.
    • Benefit: Avoids needing to press Enter after y, n, etc., in commands like git add -p.
  • color.ui = auto

    • Purpose: Enables colored command-line output.
    • Benefit: Drastically improves readability of status, log, diff, and other commands.

2. Command Aliases

These aliases serve as shortcuts for common or complex commands.

  • co = checkout: For switching branches or restoring files.
  • ci = commit: For saving changes to the repository.
  • st = status -s: Provides a short, compact status view. Much cleaner than the default.
  • br = branch: A simple shortcut for branch operations.
  • unstage = reset HEAD --: A convenient way to unstage a file (the opposite of git add).
  • last = log -1 HEAD: Quickly shows the details of the most recent commit.
  • hist = log --pretty=format:[...] --graph: A powerful, custom log format.
    • Benefit: Displays commit history as a colored graph, showing branches and merges clearly. It provides a concise, readable summary of each commit (hash, date, author, message).

3. Workflow Defaults

These settings enforce modern, clean workflows.

  • init.defaultBranch = main

    • Purpose: Sets the default branch name for new repositories to main.
    • Benefit: Aligns with the modern industry standard, moving away from master.
  • pull.rebase = true

    • Purpose: Performs a rebase instead of a merge when running git pull.
    • Benefit: Keeps the project history linear and clean by avoiding unnecessary ā€œmerge bubbleā€ commits. This is a common best practice for team workflows.
  • push.autoSetupRemote = true

    • Purpose: Automatically configures the upstream tracking branch on the first push of a new branch.
    • Benefit: Eliminates the need to run the long git push --set-upstream origin <branch-name> command.

Configuration Management & Future Changes

All global settings described here are stored in a plain text file located at ~/.gitconfig in the user’s home directory.

This configuration can be managed in two ways:

  1. Directly editing the file: Open ~/.gitconfig in a text editor to view, add, or remove settings.
  2. Using the git config command: This is the recommended method for making changes.

Codeforges

I have generated an SSH key on this machine at ~/.ssh/id_ed25519. I have added the public key to GitHub and to my self-hosted codeforge

Resources

Manuals

Issues