Tools

10 Terminal Tools That Changed My Workflow in 2026

Harshit Rathod
#terminal#productivity#devtools#cli

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.”

A modern terminal setup with multiple panes showing code and system monitoring


1. eza — Better ls

eza 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.

My aliases

alias ls="eza --icons --group-directories-first"
alias ll="eza -la --icons --git --group-directories-first"
alias lt="eza --tree --level=3 --icons"

2. bat — Better cat

bat 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.

Configuration

Create ~/.config/bat/config:

--theme="Catppuccin Mocha"
--style="numbers,changes,header"
--italic-text=always
--map-syntax "*.astro:HTML"

3. ripgrep (rg) — Better grep

ripgrep 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

Speed comparison

ToolTime (large repo)
grep -r12.4s
ag (Silver Searcher)1.8s
rg (ripgrep)0.3s

That’s 41x faster than grep. On large monorepos, this matters.

Advanced usage

# 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

4. fd — Better find

fd 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

Close-up of a developer's hands typing on a keyboard with terminal visible on screen

5. zoxide — Better cd

zoxide 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.

Setup

# Install
brew install zoxide

# Add to .zshrc
eval "$(zoxide init zsh)"

6. fzf — Fuzzy Finder for Everything

fzf 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}')

Power combo: 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.

7. delta — Better Git Diffs

delta 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.

8. lazygit — Terminal Git UI

lazygit 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:

KeyAction
spaceStage/unstage file
cCommit
pPush
PPull
bBranch menu
rRebase menu
?Show all keybindings

I use it for interactive rebasing and conflict resolution — tasks that are painful with raw git commands.

9. starship — Cross-Shell Prompt

starship 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)"

10. claude — AI in the Terminal

This 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.


My Full Setup

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"

Installation (macOS)

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

A clean desk setup with an ultrawide monitor showing a terminal environment

The Compound Effect

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:

ToolSaves per useUses/dayWeekly savings
rg over grep5s3012 min
zoxide over cd3s5012 min
fzf shortcuts10s2016 min
lazygit over raw git30s1537 min
bat over cat2s203 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.

← Back to Blog

Subscribe to the Newsletter

Get notified when I publish new posts. No spam, unsubscribe anytime.