An agent spends a surprising amount of its working life searching file names, scanning text, slicing logs, checking diffs, installing dependencies, and rerunning the same proof. Make those loops cheap and the whole machine feels more intelligent—even though the model did not change.
Install a small, composable baseline; preserve the operator's existing configuration; and finish with a command-level receipt. A tool that is merely installed but not discoverable on PATH is not part of the workstation.
Start with the loops, not the brands
Discover
rg, fd, and fzf shrink repository navigation into fast, composable queries.
Inspect
bat, eza, jq, and delta make source, trees, JSON, and diffs easier to parse.
Measure
hyperfine replaces “this feels faster” with repeatable timing and warmup runs.
Build
Bun and uv speed common JavaScript and Python dependency loops; mold and sccache help Rust/C++ compilation.
The focused Ubuntu baseline
sudo apt-get update
sudo apt-get install -y \
ripgrep fd-find fzf bat eza jq git-delta zoxide hyperfine \
shellcheck shfmt just mold sccache gh
# Ubuntu names the binaries fdfind and batcat.
mkdir -p "$HOME/.local/bin"
ln -s /usr/bin/fdfind "$HOME/.local/bin/fd" 2>/dev/null || true
ln -s /usr/bin/batcat "$HOME/.local/bin/bat" 2>/dev/null || true
# Keep Bun user-scoped.
curl -fsSL https://bun.sh/install | bash
This machine already had modern ripgrep, jq, uv, Node, and GitHub authentication. The setup preserved them, added the missing focused tools through Ubuntu packages, and installed Bun under the desktop user's home. No distro upgrade, shell replacement, or language-manager takeover was needed.
Why these tools earn their place
rg respects Git ignores and searches in parallel.find expressionsfd gives concise syntax and ignore-aware parallel traversal.fzf turns command output into a fuzzy selection surface.time runhyperfine adds warmups, repeated runs, and comparisons.shellcheck plus shfmt catch and normalize scripts.The receipt matters more than the installer
The repository now carries a reusable setup-linux-dev-speed skill with an idempotent scripts/setup.sh. Its check mode resolves every command and fails when the baseline is incomplete. That makes workstation setup reviewable and rerunnable instead of tribal memory.
skills/setup-linux-dev-speed/scripts/setup.sh --check
hyperfine --warmup 3 'rg -n "workflow_dispatch" .github'
Use benchmark results locally: filesystem caches, repository size, and query shape matter. The correct public claim is that the tools reduce common loop overhead and provide a measurement path—not that every command is always faster.
Small configuration choices compound
- Preserve identity: do not overwrite Git name, email, remotes, credentials, or SSH material.
- Prefer stable packages: let apt own machine-wide binaries; keep fast-moving Bun user-scoped.
- Expose canonical names: bridge Ubuntu's
fdfind/batcatnames through user-local links. - Measure the real repo: benchmark the query or build that dominates the task, not a toy command.
- Keep recovery boring: a fresh shell plus the check receipt should reveal every missing path.
Sources
- ripgrep: recursive search with Git-ignore and parallel traversal support
- fd: a user-friendly, parallel alternative to find
- fzf: general-purpose command-line fuzzy finder
- hyperfine: warmup-aware command benchmarking
- uv documentation: Python project and package workflows
- Bun installation documentation