I spend most of my day in the terminal. Over the past year, I’ve replaced nearly every default Unix tool with a modern alternative. Here are the 10 that stuck.
“The terminal is the most powerful IDE — if you know the right tools.”
eza — Better lseza is a modern replacement for ls with colors, icons, git status, and tree view built in.
# Old way
ls -la
# New way
eza -la --icons --git --group-directories-first
Output comparison:
# ls -la (boring)
drwxr-xr-x 5 harshit staff 160 Apr 1 08:00 src
-rw-r--r-- 1 harshit staff 842 Apr 1 08:00 package.json
# eza -la --icons --git (beautiful)
drwxr-xr-x 5 harshit staff 160 Apr 1 08:00 src
.rw-r--r-- 1 harshit staff 842 Apr 1 08:00 M package.json
The M next to package.json means it’s modified in git. Game changer.
alias ls="eza --icons --group-directories-first"
alias ll="eza -la --icons --git --group-directories-first"
alias lt="eza --tree --level=3 --icons"
bat — Better catbat is cat with syntax highlighting, line numbers, and git diff markers.
# Old way
cat src/main.py
# New way — syntax highlighted, line numbers, git changes
bat src/main.py
It automatically detects the file type and applies the right syntax highlighting. It also shows + and - markers for lines changed in git.
Create ~/.config/bat/config:
--theme="Catppuccin Mocha"
--style="numbers,changes,header"
--italic-text=always
--map-syntax "*.astro:HTML"
ripgrep (rg) — Better grepripgrep is the fastest grep. It respects .gitignore, skips binary files, and has sane defaults.
# Old way
grep -rn "useState" --include="*.tsx" src/
# New way
rg "useState" -t tsx
| Tool | Time (large repo) |
|---|---|
grep -r | 12.4s |
ag (Silver Searcher) | 1.8s |
rg (ripgrep) | 0.3s |
That’s 41x faster than grep. On large monorepos, this matters.
# Search with context (3 lines before and after)
rg "async function" -C 3
# Search only in specific files
rg "TODO" -g "*.{ts,tsx}" --glob "!node_modules"
# Count matches per file
rg "import" --count-matches | sort -t: -k2 -rn | head -10
# Replace across files (preview)
rg "oldFunction" --replace "newFunction" --dry-run
fd — Better findfd is a simple, fast alternative to find. It’s 5x faster and has a much friendlier syntax.
# Old way
find . -name "*.tsx" -not -path "./node_modules/*"
# New way
fd -e tsx
More examples:
# Find files modified in the last 24 hours
fd --changed-within 1d
# Find and delete all .DS_Store files
fd -H .DS_Store -x rm
# Find large files (> 10MB)
fd --size +10m
# Find empty directories
fd --type d --empty
zoxide — Better cdzoxide learns your most-used directories and lets you jump to them with fuzzy matching.
# Instead of:
cd ~/Projects/work/my-company/frontend/packages/ui
# Just type:
z ui
# Or even fuzzier:
z fro ui # matches "frontend" → "ui"
It ranks directories by frequency and recency (they call it “frecency”). After a week of use, you’ll never type a full path again.
# Install
brew install zoxide
# Add to .zshrc
eval "$(zoxide init zsh)"
fzf — Fuzzy Finder for Everythingfzf is the Swiss Army knife of fuzzy finding. It transforms any list into an interactive, searchable menu.
# Fuzzy find and open a file
vim $(fzf)
# Search git branches
git checkout $(git branch | fzf)
# Search command history
history | fzf
# Kill a process interactively
kill $(ps aux | fzf | awk '{print $2}')
fzf + bat preview# Preview files while searching
fzf --preview "bat --color=always {}" --preview-window=right:60%
This gives you a live preview panel as you fuzzy-search through files. It’s like having a mini file explorer in your terminal.
delta — Better Git Diffsdelta makes git diff beautiful with syntax highlighting, line numbers, and side-by-side view.
Add to ~/.gitconfig:
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true
line-numbers = true
side-by-side = true
syntax-theme = "Catppuccin Mocha"
[merge]
conflictStyle = diff3
Now every git diff, git log -p, and git show looks gorgeous.
lazygit — Terminal Git UIlazygit is a full git TUI (terminal user interface). It gives you a visual interface for staging, committing, branching, rebasing — all without leaving the terminal.
Key shortcuts:
| Key | Action |
|---|---|
space | Stage/unstage file |
c | Commit |
p | Push |
P | Pull |
b | Branch menu |
r | Rebase menu |
? | Show all keybindings |
I use it for interactive rebasing and conflict resolution — tasks that are painful with raw git commands.
starship — Cross-Shell Promptstarship is a minimal, fast prompt that shows you what you need: git branch, Node version, Python env, Kubernetes context, and more.
# ~/.config/starship.toml
format = """
$directory\
$git_branch\
$git_status\
$nodejs\
$python\
$rust\
$character"""
[directory]
truncation_length = 3
truncation_symbol = "…/"
[git_branch]
symbol = " "
format = "[$symbol$branch]($style) "
[git_status]
format = '([$all_status$ahead_behind]($style) )'
[nodejs]
symbol = " "
format = "[$symbol($version)]($style) "
[python]
symbol = " "
format = "[$symbol($version)]($style) "
[character]
success_symbol = "[❯](green)"
error_symbol = "[❯](red)"
claude — AI in the TerminalThis one’s meta — I’m writing this blog post with Claude Code. Having AI directly in the terminal that can read your codebase, run commands, and edit files is a workflow multiplier.
# Ask about your codebase
claude "How does the authentication flow work?"
# Generate code
claude "Add a rate limiter middleware to the Express app"
# Debug errors
claude "Why is this test failing?" < test-output.log
The key insight: it has full context of your project — file structure, dependencies, git history. It’s not just generating code in a vacuum.
Here’s my complete ~/.zshrc additions for all these tools:
# Modern replacements
alias ls="eza --icons --group-directories-first"
alias ll="eza -la --icons --git --group-directories-first"
alias lt="eza --tree --level=3 --icons"
alias cat="bat --paging=never"
alias grep="rg"
alias find="fd"
alias diff="delta"
# Zoxide
eval "$(zoxide init zsh)"
# Starship prompt
eval "$(starship init zsh)"
# fzf
eval "$(fzf --zsh)"
export FZF_DEFAULT_OPTS="--height 40% --layout=reverse --border"
export FZF_DEFAULT_COMMAND="fd --type f --hidden --follow"
One command to install everything:
brew install eza bat ripgrep fd zoxide fzf git-delta lazygit starship
On Ubuntu/Debian:
# Most are available via cargo
cargo install eza bat ripgrep fd-find zoxide git-delta starship
# Or use the package manager for some
sudo apt install fzf
Each tool saves a few seconds per use. But combined, across hundreds of daily commands, they save hours per week. More importantly, they remove friction — and low friction means you stay in flow longer.
Here’s my rough estimate:
| Tool | Saves per use | Uses/day | Weekly savings |
|---|---|---|---|
rg over grep | 5s | 30 | 12 min |
zoxide over cd | 3s | 50 | 12 min |
fzf shortcuts | 10s | 20 | 16 min |
lazygit over raw git | 30s | 15 | 37 min |
bat over cat | 2s | 20 | 3 min |
| Total | ~80 min/week |
That’s almost 1.5 hours per week — or about 3 full work days per year.
What terminal tools do you use? Let me know in the comments below.
Get notified when I publish new posts. No spam, unsubscribe anytime.