When I need a tool for a task, these are my default choices.
Editor #
Neovim - For everything text-related. See Neovim Configuration
Fallback: Helix Editor for quick edits when neovim config is broken.
Terminal #
kitty - Primary terminal. See kitty Terminal
Fallback: WezTerm when I need better cross-platform consistency.
Shell #
zsh - With autosuggestions, syntax highlighting, and starship prompt. See zsh Configuration
Multiplexer #
tmux - For persistent sessions and popup workflows. See tmux Configuration
Fallback: Zellij when I want built-in multiplexer without external tool.
Version Control #
git - With delta for diffs and gitui for UI. See Git Configuration
Tool Management #
mise - For all language runtimes and dev tools. See mise Tool Management
Replaced: pyenv, nvm, rbenv, and friends.
Fuzzy Finder #
fzf - Integrated with shell and editor. See fzf
File Manager #
lf - Fast terminal file manager. See lf
yazi - Alternative with async I/O. See Yazi
Fallback: Standard shell commands for simple operations.
Window Manager #
Hyprland - Wayland compositor on main machine. See Hyprland Window Manager
Fallback: Awesome Window Manager when I need X11.
Browser #
Brave - Primary browser with good privacy defaults.
Fallback: Firefox for testing and sites that break on Brave.
Search #
ripgrep (rg) - For code search
fd - For file finding
Both integrated with fzf.
Notes #
Plain markdown files in git repos.
Todo: tmux Configuration todo session with backlog/doing/done files.
Communication #
- Email: Fastmail
- Chat: Signal, occasionally Discord
- Video: Jitsi, Zoom when required
Operating System #
Arch Linux - Main development machine
Ubuntu - For servers and containers
Why Defaults Matter #
Having defaults reduces decision fatigue. When I reach for a tool, I already know what to use. This lets me focus on the actual problem instead of evaluating options.