2026-01-17
A cat alternative with line numbers and syntax
highlighting. The --all flag is especially helpful for
showing spaces, tabs, and line endings in files. The only
configuration really needed is setting the theme and perhaps more
preferentially, an alias that also disables paging, like normal
cat output:
export BAT_THEME="base16"
alias cat="bat --paging=never"
Allows for a shell script to be run upon entering a directory. This is
particularly useful for automatically activating Python virtual
environments. Configuration consists of creating the
.envrc file that is sourced at entry, and allowing this
to happen by running direnv allow within the directory.
if [ -f ".venv/bin/activate" ]; then
source .venv/bin/activate
fi
A ls alternative that mostly provides intuitive colours
and icons. As for configuration, I found it beneficial to
trim down
some of the default output, and
configure colours
accordingly.
My Neovim configuration is based on Nvchad, and configured with my desired language servers, formatters, and plugins. The following packages are installed through Mason:
npm to be installed on the host
system.
An incredibly robust grep alternative, which I am quite
sure I do not use to its full potential. Things like omitting
directories are especially useful, and also intuitive — e.g.
rg -g '!dir/' foo.
An alternative terminal prompt to $ that has extensive
customisation and functionality regarding current working directory. I
find the virtual environment status very useful.
Counts lines of code, as well as different languages, comments, etc.
A cd alternative that auto-jumps to previously visited
directories. This turns a long
cd to/a/nested/directory/named/foo command to just
cd foo, after entering it once.
My shell-specific configuration is rather minimal:
#!/bin/zsh
export HISTFILE=~/.zsh_history
export HISTSIZE=20000
export SAVEHIST=20000
export LANG=en_GB.UTF-8
path+=(
"$HOME/.local/bin"
"$path[@]")
export PATH
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_FIND_NO_DUPS
bindkey -v
bindkey "^?" backward-delete-char
zstyle ':completion:*' completer _complete _ignored
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
zstyle :compinstall filename '~/.zshrc'
autoload -U compinit && compinit
ZSH's default Vi mode has room for improvement unfortunately, but it is usable nonetheless.
Similarly to Zoxide mentioned above, this plugin aides in running
previously long commands. Instead of typing out a cumbersome
awk command that you've run before, one can tap the
right arrow key to fill the command after typing the first few
characters.
Depending on your terminal's colour configuration, the default colour of the suggested text to fill may not be very readable. If so, set it manually at shell startup:
export ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=#C7C7C7"
Provides syntax highlighting directly to commands run in your shell. A small detail but invaluable for things like underlining a path that is valid, quoted and conditional arguments, and so on.
My non-headless Linux systems run under Wayland, so in turn, the following applications are more or less Wayland specific.
Application launcher that is incredibly easy to configure.
Screenshot tools that are boring and functional. Grim is the
screenshot utility itself, while Slurp allows for selecting a region
to capture. The combination is easily bound to Sway shortcuts to
either copy to clipboard (see
wl-clipboard), or save to $XDG_PICTURES_DIR, respectively:
bindsym $mod+p exec grim -g "$(slurp)" - | wl-copy
bindsym $mod+Shift+p exec grim -g "$(slurp)"
A GTK-based lock screen program that's useful when I'm out and about. Configuration is rather simple, and it is styled via CSS, which I find to be a perk. Also triggered from a Sway mapping:
bindsym $mod+Escape exec gtklock -d
An image viewer that supports the file formats I encounter, and even has Vim keybindings.
Notification daemon that's libnotify compatible, and easily
configured. Its daemon must be started by Sway:
exec /usr/bin/mako.
Incredibly widely used fonts, including support for CJK and Cyrillic languages, and emoji support in applications such as Discord.
Rather powerful window manager. Especially appreciate the input configuration options like easily changing trackpad behaviours and switching between languages. Things like these are challenging on X. I use swaybg to set wallpapers.
Status bar with loads of functionality. Configuration is done via a JSON-esque file and styled via CSS, which offers nearly too much opportunity.
Terminal of choice. I went back and forth between this, and st, and while fun, st lacks Wayland and macOS support. Wezterm is easily configured in Lua.
PDF viewer with Vim keybindings and commands. Allows for ample configuration of colours and fonts.
The system clock frequently falls out of sync on some of my older hardware and Chrony is a solution. Enable the system service and select a NTP pool.
On my systems, Dracut is used to generate initramfs during kernel installation, and create a bootable UKI, which omits the need for a bootloader, such as GRUB. See system-specific pages for more details.
Similar to usage of the above, efibootmgr is used to create boot entries for bootable kernel images, both in the form of UKI's or EFI Stub's. Also handy for cleaning up other entries littered around by other operating systems.
Preferred networking setup for its minimal system footprint, reliability (significantly over WPA Supplicant), and ease of use with most networks I encounter. It can be configured to use its internal DHCP client, and a DNS manager such as a resolvconf:
[General]
EnableNetworkConfiguration=true
[Network]
NameResolvingService=resolvconf
A sudo alternative that is a fraction of the size of the
traditional authentication program, and performs everything most
single-user, non-server systems would need. Configuration to allow
persistent authentication for some time after a user of the
wheel group has entered their password is straight
forward:
permit persist :wheel
Key remapping for Linux systems that's capable of reproducing much of
my QMK configuration,
which primarily includes combos, layers, home row mods, and more. This
is certainly suitable for making my laptop's keyboard usable, albeit
uncomfortable.
is
certainly straight forward as well. This file must however either live
at or be symlinked to /etc/keyd/default.conf.
Undoubtedly my preferred init system. Incredibly reliable and not built such that things like reboot depend on some other program (hint hint systemd...). Usage is also intuitive:
$ rc-status
Runlevel: default
chrony [ started ]
dbus [ started 17 day(s) 23:13:07 (0) ]
thermald [ started 17 day(s) 23:13:06 (0) ]
sshd [ started 17 day(s) 23:13:06 (0) ]
iwd [ started 3 day(s) 01:25:06 (0) ]
keyd [ started ]
tlp [ started ]
agetty.tty1 [ started 17 day(s) 23:13:05 (0) ]
Dynamic Runlevel: hotplugged
user.jack [ started 17 day(s) 23:12:47 (0) ]
The clangd language server sources a
compile_commands.json file that provides information like
where header files are found, compilation flags, etc. Clang(d) has no
built-in provision for generating this file, so bear is the tool for
the job. Usage is rather straight forward:
$ bear -- cc misc.c
$ cat compile_commands.json
[
{
"file": "misc.c",
"arguments": [
"cc",
"misc.c"
],
"directory": "/home/jack"
}
]
Running bear -- make would be appropriate for projects
that use a Makefile.
A debugger that behaves similarly to GDB, but is much more intuitive
in my opinion. This
here
extends LLDB a bit by providing some graphical features and overall
more information by default. The script lives in
~/.local/lldbinit.py and call it from
.lldbinit:
command script import ~/.local/lldbinit.py
Used to automatically configure compiler and linker flags for libraries that need them. Helpful working on projects across different systems and architectures.
Python installation and package manager. Incredibly fast and intuitive
to use, and preferable to pip and other Python utilities.
I occasionally find myself in need of some sort of basic image manipulation, like rotating, resizing, or combining images. Searching the web for "rotate image online" is silly, and imagemagick is capable of far more than just that.
I am active in a few IRC channels, however not often enough to need a fancy GUI client. Weechat is quite configurable and easy to use, with much of the shortcuts match those found in browsers and Vim.
This tool (read git wrapper) keeps track of all my system
configuration files with the ease and convenience of git. Each system
gets a branch and files I want to exclude are excluded via the
standard .gitignore. This makes setting up new systems or
undoing changes incredibly easy.