Here's the software I use. I've recently started to reduce my use of TUIs in favor of CLIs, for a variety of reasons. When possible, I try to use lightweight programs that can run on any machine, from a single-board computer to a giant desktop. I don't ever want to feel like I need to upgrade my hardware to do the same tasks as before: hardware upgrades should only be justified by my use-cases significantly changing, existing hardware being broken beyond repair, or upstream abandonment of security patches. ## Hardware My main computer is a 2013 HP Elitebook 840 G1. It has a dual-core Intel i5-4300U CPU (Haswell), with simultaneous multithreading disabled. ## Environment I don't currently use a prebuilt desktop environment. I assemble mine out of the following components: * Fedora: Primary OS, latest stable version. Uses Linux, Systemd, GNU libc, GNU coreutils, dnf, firewalld, and SELinux. * Sway: Dynamic Wayland compositor that focuses on tiling window management but also supports tabbed and stacking layouts. * Zsh: Login shell. POSIX-compatible and mostly Bash-compatible. Custom static build to skip checking system files and improve startup performance. * DASH: Minimal POSIX-compatible shell that I use for non-interactive purposes (e.g. shell scripts). When statically-linked, its startup time is negligible even on the most underpowered hardware. This is really important to me, since many of my most-used commands are shell-script wrappers that I expect to run in a few milliseconds. * Foot: Primary terminal emulator. Sometimes I use gnome-terminal when I'm using a screen reader. * i3status-rust: Status bar. It's more efficient to use this single program than to shell out to a dozen utilities. Given the widgets I cram into it, it's more lightweight than most alternatives. ## Basic utilities: * `$EDITOR`: Neovim * Browser: Firefox for most pages, Chromium for apps, NetSurf when I'm low on battery. * Coreutils alternatives: ripgrep, sd (better multiline regexes than sed), fd * Session manager: tmux (I don't use it for tiling, Sway handles that) * IRC client: WeeChat. Might use senpai eventually, if I can get it to play well with espeak-ng. * News: Newsboat. I'm thinking of switching to a feed-to-IMAP or Maildir setup eventually so I can get sync and use mblaze, and replace a TUI with a CLI. Ideally something that supports WebSub. * Containers: Toolbox: Creates quick mutable environments for me to mess around as root. I use Fedora Rawhide for more bleeding-edge packages in these environments. Quick mutable environments to mess around in or use different toolchains are pretty much my only use of containers. * Screen reader: Orca => https://sr.ht/~seirdy/mpd-scripts/ mpd-scripts page => https://github.com/po5/mpv_sponsorblock mpv_sponsorblock => https://sr.ht/~taiite/senpai/ senpai ## Multimedia * Music player: mpd, along with my mpd scripts * Video player: three builds of mpv, two with a PGO run on different types of video (anime and live-action-with-filmgrain). Often paired with yt-dlp and mpv_sponsorblock * Image viewer: mpv (one less program to keep track of), swayimg. Both support AVIF and JPEG-XL now. ## Mail: * Mail fetcher: mbsync * SMTP client: msmtp * routine tasks, viewing/filtering latest messages: mblaze * MUA: mostly neomutt * Viewing HTML mail: w3m-sandbox or edbrowse. => https://github.com/leahneukirchen/mblaze mblaze => https://git.sr.ht/~seirdy/bwrap-scripts/tree/trunk/item/w3m-sandbox w3m-sandbox ## Networking and pentesting: * RustScan (don't use it on max settings without permission) * q, a DNS client that supports DoH, DoH3, DoQ, and ODoH. * rnp, a ping tool that supports TCP and QUIC "pings" to estimate handshake latency. * subfinder, Project Discovery's subdomain enumeration tool * both curl and xh for HTTP testing. * kinvolk's wrk2 fork and bombardier for HTTP load-testing * ssh-auditor ## Other tools: * jq (I love writing jq programs) * fzf * z.lua * msync * wormhole-william * rdrview * Efficient Compression Tool (better than Zopfli/ZopfliPNG) * usvg and resvg * zpaqfranz * scc * Pandoc * ghq, a VCS repository manager in the style of $GOPATH * yt-dlp * rush, a faster alternative to GNU Parallel for when xargs isn't enough (e.g. for non-interleaved output) => https://github.com/psanford/wormhole-william wormhole-william => https://github.com/eafer/rdrview rdrview => https://github.com/fhanau/Efficient-Compression-Tool Efficient Compression Tool => https://github.com/boyter/scc scc ## Server-side stuff * Custom build of nginx-quic with some patches. Statically l inked against zlib-ng, BoringSSL, PCRE2, musl, headers_more, and ngx_brotli. Patched for dynamic TLS record sizing, using externally-managed OCSP stapling files, static HPACK dictionaries, removing server signatures, adding dark-mode on in-binary error pages. * certbot-ocsp-fetcher * webmentiond Webmention receiver * Agate Gemini server * searchmysite-go * Conduit matrix server ## Services * Migadu: email provider * deSEC: managed DNS name servers * Namecheap: domain registrar (not endorsed) * Digital Ocean: VPS (not endorsed) * Search My Site: search API ## What I don't use These are tools that I don't use, or avoid using. * system monitoring TUIs: I usually just run the command to view the resource I need to know about * File managers: I prefer using the shell with fzf-based tab-completion that also features preview windows