Many engineers start their first job using the default macOS terminal with no customization. It takes an embarrassing amount of time to realize that the “fast” senior engineers are not typing faster - they have better tools.
Here are the five setups that made the biggest difference.
1. zsh + Oh My Zsh + a Good Theme
If you are still on bash and the default terminal, this is the first move. The combination of zsh (default on modern macOS, available on any Linux) with Oh My Zsh for plugin management and a fast theme changes the texture of every terminal interaction.
What actually matters in a theme: current directory, git branch, and whether the last command succeeded or failed - all visible in the prompt without any extra typing. Starship prompt (written in Rust, fast, cross-shell) is the current best recommendation over older themes like Powerlevel10k. Install it with one command:
curl -sS https://starship.rs/install.sh | sh
Add eval "$(starship init zsh)" to your .zshrc. Done.
2. zsh-autosuggestions + zsh-syntax-highlighting
These two plugins change how the terminal feels to use.
zsh-autosuggestions shows a greyed-out suggestion based on your command history as you type. Press the right arrow key to accept it. You stop retyping the same long commands and you stop making typos in familiar commands.
zsh-syntax-highlighting colors your command as you type: green if the command exists, red if it does not. You catch typos before you hit enter.
Install both via Oh My Zsh’s plugin system. Add zsh-autosuggestions zsh-syntax-highlighting to the plugins array in your .zshrc.
3. fzf for Everything
fzf is a fuzzy finder for the command line. It sounds like a niche tool until you start using it, and then you realize it belongs everywhere.
The killer feature is the history search. Press Ctrl+R in a terminal with fzf and you get an interactive fuzzy search through your entire command history. Type fragments of what you remember (“docker run my”), it finds the exact command you used three weeks ago.
It also integrates with:
cdvia thezorzoxideplugin (typez projand it cd’s to your project directory based on frequency)- File search with
Ctrl+T(fuzzy find a file path to insert into your current command) - Kill commands by name instead of PID
brew install fzf
$(brew --prefix)/opt/fzf/install
4. tmux for Session Management
If you close your terminal, you lose everything. tmux persists terminal sessions even when you disconnect. For remote servers this is critical. For local development it is still genuinely useful.
The workflow that works: create a named session per project. tmux new -s my-project. Split the window: one pane for the dev server, one for tests, one for git operations. Come back tomorrow and reattach: tmux attach -t my-project.
You no longer lose your mental context because you accidentally closed a tab.
Key bindings to learn first:
Ctrl+B D- detach (session keeps running)Ctrl+B %- vertical splitCtrl+B "- horizontal splitCtrl+B [arrow]- move between panes
The learning curve is one afternoon. The payoff is permanent.
5. Useful Aliases That Remove Friction
Aliases are shortcuts for commands you type repeatedly. Most engineers set up a few basic ones and never revisit them. Here is a more useful starting set:
# Git shortcuts
alias gs='git status'
alias ga='git add'
alias gc='git commit -m'
alias gp='git push'
alias gl='git log --oneline --graph --decorate -20'
alias gco='git checkout'
alias gd='git diff'
# Navigation
alias ..='cd ..'
alias ...='cd ../..'
alias ll='ls -lahF'
# Docker
alias dc='docker compose'
alias dps='docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"'
# Development
alias serve='python3 -m http.server 8000'
alias ports='lsof -i -P | grep LISTEN'
The pattern: take the commands you type 5+ times a day and make them shorter. Shaving 3 seconds per command across 50 uses per day is 2.5 minutes. Across a year, that is hours. And the cognitive overhead of remembering long flags is also eliminated.
Putting It Together
The order of implementation that makes sense:
- Install zsh + Starship (one afternoon, immediate visual improvement)
- Add the two plugins (30 minutes)
- Install fzf and configure history search (30 minutes)
- Install tmux and learn the basics (one afternoon)
- Build your alias file incrementally (ongoing)
None of these require you to be a shell scripting expert. Each one has good documentation and a 5-minute setup path.
Bottom Line
A good terminal setup is not about looking cool. It is about reducing the friction between thinking something and doing it. The five tools above - particularly fzf and zsh-autosuggestions - change the mechanical experience of development in ways that compound every single day. Set them up once, and they work for the rest of your career.
Comments