Everything I explicitly installed on this Arch box, and why

The 240 packages I asked for by name, minus the plumbing nobody chooses, grouped by the reason each one exists rather than by repo section.

pacman -Qeq lists 240 packages on this machine — the ones I asked for by name, as opposed to the 1,358 that came along as dependencies. I audited the totals separately. This post is the other half: the actual list, minus the parts nobody chooses.

I've cut the plumbing — bluez, cups, gdm, networkmanager, pipewire, kernels, firmware, drivers, fonts, the default GNOME app set. Those are on every machine and carry no information. What's left is what I'd reinstall deliberately on a fresh box, grouped by the reason it exists rather than by repo section.

The shell and the things I type all day

  • `zsh` — the shell. Nothing exotic in the config; it's here for completion and history substring search.
  • `ghostty` — terminal. Fast, native, and the config is a flat key-value file rather than a Lua program.
  • `fzf` — fuzzy finder. The single highest-leverage package on this list. Ctrl-R over shell history alone justifies it.
  • `ripgrep`grep that respects .gitignore and is faster anyway. I have not typed grep -r in years.
  • `fd` — same deal for find. fd foo instead of find . -name '*foo*'.
  • `bat`cat with syntax highlighting and line numbers. Worth it for reading unfamiliar config files.
  • `jq` — JSON processor. Every API I touch returns JSON and every CLI here has a --json flag.
  • `wl-clipboard`wl-copy / wl-paste. Wayland has no clipboard without it, and every "pipe this to my clipboard" workflow depends on it.
  • `rsync`, `wget`, `socat` — the three network utilities I reach for that aren't curl.
  • `zip` — only here because something occasionally hands me a .zip and bsdtar isn't always what a tool expects.

Watching the machine

  • `btop` — the system monitor I actually leave open. Mouse support, per-core graphs, readable at a glance.
  • `htop` — still installed because muscle memory, and because it starts faster when I only need to kill one process.
  • `mission-center` and `resources` — two GTK system monitors. Redundant with each other; both are nicer than gnome-system-monitor for GPU and disk.
  • `rustnet` — network monitoring TUI with per-process attribution via eBPF. The answer to "what is talking to the internet right now".
  • `fastfetch` — yes, it's the screenshot tool. It's also the fastest way to confirm which kernel actually booted.
  • `smartmontools` — SMART data. Install it before you need it, not after the disk starts clicking.
  • `turbostat` — real per-core frequency and C-state residency. The tool that tells you whether your power tuning did anything.
  • `sysprof` — kernel-level profiler, for when a desktop stutter needs a cause rather than a guess.
  • `baobab` — graphical disk usage. Finds the 40 GiB directory you forgot about in about ten seconds.

Arch-specific survival kit

  • `paru` — AUR helper. 32 packages on this machine come from outside the official repos.
  • `pacman-contrib` — ships paccache (prune the package cache), pactree (why is this installed), and checkupdates (list updates without touching the DB). All three are essential and none ship with pacman itself.
  • `namcap` — lints a PKGBUILD or a built package. Useful the moment you package anything yourself.
  • `snapper` + `snap-pac` — Btrfs snapshots, with pacman hooks that snapshot automatically before and after every transaction. This is the reason a bad update on Arch is a five-minute inconvenience instead of a reinstall. If you run Btrfs and install nothing else from this section, install these two.
  • `archlinuxcn-keyring` — needed for the archlinuxcn repo.
  • `zram-generator` — compressed swap in RAM. Better than a swap file on an SSD, and it's one config file.
  • `tlp` + `tlp-pd` — laptop power management, integrated with power-profiles-daemon so GNOME's power modes actually do something.
  • `system76-firmware` — hardware-specific. Only relevant if you have the hardware.
  • `fwupd` — vendor firmware updates through LVFS. Worth having even if nothing you own ships updates through it yet.

Git and building things

  • `github-cli`gh pr create, gh run watch, gh api. Removes the browser from most of the GitHub loop.
  • `lazygit` — TUI for staging hunks and rewriting history. Faster than the CLI for interactive rebases, faster than a GUI for everything else.
  • `git-lfs` — needed the moment a repo you clone uses it.
  • `ccache` — caches compilations. Free speedup on any C/C++ project you rebuild more than once.
  • `lld` — LLVM linker. Noticeably faster than GNU ld on large link steps; Rust and Zig both take advantage.
  • `patchelf` — rewrites RPATH and the interpreter on an ELF. Niche until you're fixing a prebuilt binary that can't find its libraries, at which point it's the only tool.
  • `tree-sitter-cli` — for developing and testing grammars, and for tree-sitter parse when you want to see what an editor sees.
  • `namcap`, again, if you build packages.

Toolchains

  • `zig` — 0.16. Also the most convenient C cross-compiler I have (zig cc).
  • `go` — for the Go projects and for wails.
  • `rustup` — not rust. Toolchain management matters more than having one system compiler.
  • `nodejs` + `pnpm` — pnpm for the content-addressed store; node_modules deduplication is not optional at this point.
  • `bun` — fast runner and bundler. Kept alongside node rather than replacing it.
  • `uv` — Python packaging and environments, fast enough that it changed how often I bother making a venv.
  • `mise` — per-project tool versions. Overlaps with rustup and uv, which is a duplication I've accepted.
  • `luacheck` + `stylua` — lint and format for Lua, which is to say for the Neovim config.
  • `wails` — desktop apps in Go plus web frontend.
  • `podman` + `podman-compose` + `podman-docker` — rootless containers, with the docker CLI shim so instructions written for Docker work unmodified.

Editors

Eight are installed. These are the ones that are a choice rather than an accident:

  • `neovim` — primary editor.
  • `zed` — when I want a GUI editor that starts instantly.
  • `visual-studio-code-bin` — for the extensions that exist nowhere else.
  • `emacs-wayland` — native Wayland build (PGTK). Kept for org-mode.
  • `vim` — the fallback that exists on every machine, kept so my fingers don't forget the differences.

Desktop applications worth naming

  • `foliate` — GTK ebook reader. The best EPUB experience on Linux, and it isn't close.
  • `apostrophe` — distraction-free markdown editor, for writing prose rather than code.
  • `curtail` — image compression GUI, lossless and lossy. Every screenshot that ends up on this blog goes through it.
  • `pika-backup` — Borg backups with a GUI that makes restores obvious. A backup tool you find intimidating is a backup tool you don't run.
  • `gnome-boxes` — VMs, when a container isn't enough isolation.
  • `obs-studio` — recording and streaming.
  • `extension-manager` — browse and install GNOME extensions without the browser connector.
  • `adw-gtk-theme` — makes GTK3 apps match libadwaita ones. Fixes the visual split in a GNOME 50 desktop.
  • `gnome-tweaks` — the settings GNOME won't put in Settings.
  • `pins` — custom .desktop entries without hand-writing them.
  • `papers` — the PDF viewer.
  • `vlc` — plays the file when nothing else will.
  • `amberol` — local music, no library management.

Chinese input and text

  • `ibus-rime` — Rime input method. Configurable to a degree nothing else on Linux approaches.
  • `autocorrect-bin` — linter/formatter for spacing and punctuation between CJK and Latin text. Fixes the missing space between 中文 and English that no spell-checker catches.

Font setup is its own subject — 11 packages and 1.25 GiB — and I wrote it up separately.

Network and security

  • `ufw` — firewall with a CLI you can use correctly without reading a manual.
  • `cloudflare-warp-bin` — WARP client.
  • `wrangler` — Cloudflare Workers CLI. This blog deploys with it.

AI tooling

Eighteen packages, 3.81 GiB, and a whole post of its own: Auditing my Arch install. The short version is claude-code, openai-codex, gemini-cli, opencode, plus a long tail I installed to try once.

Installed on purpose, useful to nobody

  • `sl` — a steam locomotive crosses your terminal when you typo ls.
  • `cmatrix`, `asciiquarium` — screensavers from a different era.
  • `go-musicfox-git` — NetEase Cloud Music in the terminal.

I keep these. A machine you never enjoy using is a machine you maintain worse.

---

*Draft. This is the list as of today; some of it is genuinely load-bearing and some of it is here because I installed it once and never removed it. The categories are honest about which is which.*

No comments yet