Essential Terminal Extensions Every Developer Should Install: A Comprehensive Guide to Boosting Productivity
Does your terminal look plain and ordinary, not smooth or convenient to use? Why not try these extensions below to make your terminal more useful and efficient.
Here's a comprehensive list of powerful terminal extensions:
- eza: Terminal file icons, colors, git status
- yazi: Terminal file manager with preview and file operations
- btop: Terminal task manager for task monitoring
- duf: Terminal disk space viewing tool for disk information
- bat: Terminal file viewing tool with syntax highlighting
- fastfetch: Terminal system information viewing
- fzf: Terminal fuzzy finder for fuzzy matching
- fd: Terminal finder, alternative to find
- ripgrep: Terminal text search tool
- zoxide: Terminal memory path jumping, remembers typed paths for quick navigation
- lazygit: Terminal Git interface
- lazydocker: Terminal Docker interface
- zellij: Terminal multiplexer for split screens and Session management
- cmux: Terminal software with vertical tabs and notification features, suitable for AI coding agents
eza: Enhanced File Listing with Visual Indicators
When using commands like ls to view files, it's difficult to distinguish between files and directories. eza can list file lists with icons, colors, and git status.
GitHub: https://github.com/eza-community/eza
Installation
brew install ezaIntegration
Open ~/.zshrc and append these aliases to the end of the file:
# Use eza instead of traditional ls, add icons, display Git status, sort directories first
alias ls='eza --icons --git --group-directories-first'
alias ll='eza -lh --icons --git --group-directories-first'
alias lt='eza --tree --level=2 --icons' # Tree display, inspect project structureYou can also customize date and time formatting:
--time-style='default', 'iso', 'long-iso', 'full-iso', 'relative'Custom formatting example: +'%Y-%m-%d %H:%M' → '2023-09-30 13:00'
Reference: https://docs.rs/chrono/latest/chrono/format/strftime/index.html
alias ls='eza --icons --git --group-directories-first --time-style="+%Y-%m-%d %H:%M:%S %a"'
alias ll='eza -lh --icons --git --group-directories-first --time-style="+%Y-%m-%d %H:%M:%S %a"'After saving, execute source ~/.zshrc to take effect.
Usage
ls
ll
ltyazi: Full-Featured Terminal File Manager
yazi is a file manager in the terminal that allows you to browse, open, and operate files directly from the command line.
GitHub: https://github.com/sxyazi/yazi
Installation
brew install yazi ffmpeg-full sevenzip jq poppler fd ripgrep fzf zoxide resvg imagemagick-full font-symbols-only-nerd-font
brew link ffmpeg-full imagemagick-full -f --overwriteIf your Mac terminal cannot preview images when entering yazi and reports an error:
failed to spawn chaa: no such file or directoryYou need to install the following dependencies:
# macOS
brew install chafa
# Ubuntu/Debian
sudo apt-get install -y chafa ueberzugpp
# Check command
# Check terminal image protocol support
echo $TERM
# Verify image support
yazi --version | grep -i imageIntegration (Optional)
Open ~/.zshrc and append this section to the end of the file (optional):
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
command yazi "$@" --cwd-file="$tmp"
IFS= read -r -d '' cwd < "$tmp"
[ "$cwd" != "$PWD" ] && [ -d "$cwd" ] && builtin cd -- "$cwd"
rm -f -- "$tmp"
}After saving, execute source ~/.zshrc to take effect.
Then you can enter y in the terminal instead of yazi to launch Yazi.
Configuration
Yazi has three configuration files:
- yazi.toml: Regular configuration
- keymap.toml: Key binding configuration
- theme.toml: Color scheme configuration
Create file ~/.config/yazi/yazi.toml:
Show hidden files and display symlink paths after filenames:
[mgr]
show_hidden = true
show_symlink = trueCreate file ~/.config/yazi/keymap.toml:
Execute closing input and clearing filter simultaneously when pressing <Esc> key in input mode:
[[input.prepend_keymap]]
on = "<Esc>"
run = ["close", "mgr:escape --filter"]
desc = "Close input and cancel the filter"Usage
Reference: https://yazi-rs.github.io/docs/quick-start#selection
Navigation
| Binding | Alternate Key | Action |
|---|---|---|
| k | ↑ | Move cursor up |
| j | ↓ | Move cursor down |
| l | → | Enter hovered directory |
| h | ← | Leave current directory, enter parent directory |
File Operations
| Binding | Action |
|---|---|
| o | Open selected file |
| O | Open selected file interactively |
| Enter | Open selected file |
| Shift+Enter | Open selected file interactively (some terminals don't support this yet) |
| Tab | Display file information |
| y | Copy selected files |
| x | Cut selected files |
| p | Paste copied files |
| P | Paste copied files (overwrite if target location exists) |
| Y or X | Cancel yank status |
| d | Delete selected files to trash |
| D | Permanently delete selected files |
| a | Create a file (directories end with /) |
| r | Rename selected file |
| . | Toggle hidden file visibility |
Copy Paths
c⇒d means press c key first, then press another d key.
| Binding | Action |
|---|---|
| c⇒c | Copy file path |
| c⇒d | Copy directory path |
| c⇒f | Copy filename |
| c⇒n | Copy filename (without extension) |
Filter Files
| Binding | Action |
|---|---|
| f | Filter files |
Find Files
| Binding | Action |
|---|---|
| / | Find next file |
| ? | Find previous file |
| n | Go to next found |
| N | Go to previous found |
Search Files
| Binding | Action |
|---|---|
| s | Search files by name using fd |
| S | Search files by content using ripgrep |
| Ctrl+s | Cancel ongoing search |
btop: Modern and Intuitive Terminal Task Monitor
btop is a better-looking terminal task manager.
- top / htop: Old-style monitoring
- btop: More intuitive and usable + graphical
GitHub: https://github.com/aristocratos/btop
Installation
brew install btopUsage
# Default
btop
# Show/hide layouts
1 / 2 / 3 / 4
# Select process
↑ ↓
# Search process
/
# Kill process
kduf: Modern Disk Usage Analyzer
duf is a better-looking disk space viewing tool.
- df: Ordinary list information
- duf: Displays information more clearly
GitHub: https://github.com/muesli/duf
Installation
brew install dufIntegration
Open ~/.zshrc and append these aliases to the end of the file:
# Replace df
alias df='duf'After saving, execute source ~/.zshrc to take effect.
Usage
# Default
duf
# Specify device/path
duf /home
# Only view specific types
duf --only local
# Exclude certain types
duf --hide-mp /proc,/sys
# Output format
duf --json
# Sort by size
duf --sort sizebat: Enhanced Cat with Syntax Highlighting
bat is a better-looking cat file viewing tool.
- Syntax highlighting
- Git integration
- Display non-printable characters
- Automatic pagination
GitHub: https://github.com/sharkdp/bat
Installation
brew install batIntegration
Open ~/.zshrc and append these aliases to the end of the file:
# Replace cat
alias cat='bat'After saving, execute source ~/.zshrc to take effect.
Usage
# Display single file
bat [xxx]
# Display multiple files
bat [src/*.rs]
# Input reading
curl -s https://sh.rustup.rs | bat
# Input reading, explicitly specify language
yaml2json .travis.yml | json_pp | bat -l json
# Display non-printable characters
bat -A [/etc/hosts]
# No pagination output
bat --paging=never [xxx]
# View supported languages
bat --list-languagesfastfetch: Fast and Modern System Information Display
Get system information and present it in an attractive way. A faster, more modern Neofetch.
- Fastfetch: Extremely fast startup
- Neofetch: Relatively slower startup
GitHub: https://github.com/fastfetch-cli/fastfetch
Installation
brew install fastfetchUsage
fastfetchfzf: General-Purpose Command-Line Fuzzy Finder
fzf is a general command-line fuzzy finder.
GitHub: https://github.com/junegunn/fzf
Use with fd and ripgrep (rg) for more powerful functionality.
Installation
brew install fzfIntegration
Open ~/.zshrc and append this section to the end of the file:
# Set up fzf key bindings and fuzzy completion
source <(fzf --zsh)After saving, execute source ~/.zshrc to take effect.
Usage
# Select files
# Lists all files in current directory
# Enter keywords to filter → Enter to select
fzf
# Pipeline
ls | fzf
ps aux | fzf
# With fd
fd | fzf
# With rg
rg keyword | fzffd: Simple, Fast Find Alternative
fd is a simple + fast find alternative.
- Simple syntax
- More flexible searching
- Very fast speed
- Batch command execution
- Clearer results
GitHub: https://github.com/sharkdp/fd
Installation
brew install fdUsage
# Fuzzy matching (recursive search)
find [xxx]
# Case sensitive
fd -s [xxx]
# Certain file type
find -e [py]
# Regex matching
fd '^test$'
# Hidden files
fd -H [.xx]
# Directories only
fd -t d [xxx]
# Files only
fd -t f [xxx]
# Search depth
fd keyword -d 2 [xxx]
# Execute command
fd py -x python [xxx]
# Batch operations
fd log -X rm [xxx]
# With fzf
fd | fzfripgrep: Ultra-Fast Code/Text Search Tool
ripgrep (rg) is an ultra-fast code/text search tool (grep upgrade).
- Extremely fast speed (Rust)
- Recursive search
- Automatic ignoring (follows .gitignore rules)
GitHub: https://github.com/BurntSushi/ripgrep
Installation
brew install ripgrepUsage
# Search keywords
rg [xxx]
# Regex search
rg ["h.*o"]
# Search specified directory
rg [xxx] [/src]
# Ignore case
rg -i [xxx]
# File type search
rg [xxx] -g ["*.py"]
# Only show matching content
rg -o [xxx]
# Exact match
rg -w [xxx]
# Directory depth
rg [xxx] --max-depth 2
# Include hidden files
rg [xxx] --hidden
# Include gitignored files (use with caution)
rg [xxx] -uuu
# List filenames
rg -l [xxx]
# List files without matches
rg -L [xxx]
# Count matching lines
rg -c [xxx]
# With fzf
rg [xxx] | fzfzoxide: Smarter cd Command
zoxide is a smarter cd command, inspired by z and autojump.
It remembers your most frequently used directories so you can "jump" to these directories with just a few keystrokes.
- cd: Only supports "exact paths"
- zoxide: Supports fuzzy matching, supports keyword jumping
GitHub: https://github.com/ajeetdsouza/zoxide
Installation
brew install zoxideIntegration
Open ~/.zshrc and append these aliases to the end of the file:
eval "$(zoxide init zsh)"
# Replace/enhance (optional)
alias cd='z'After saving, execute source ~/.zshrc to take effect.
Usage
# Basic jump
z [directory]
# Exact path
z [~/xxx]
# View records
zoxide query
# Delete record
zoxide remove [/xxx]
# Manually update record
zoxide add [/xxx]lazygit: Simple Terminal UI for Git
A simple git command terminal interface.
- Use "interface operations" instead of typing git commands manually
- Can view commits, branches, diff, stash
- Supports commit, merge, switch branches, resolve conflicts
GitHub: https://github.com/jesseduffield/lazygit
Installation
brew install lazygitIntegration (Optional)
Open ~/.zshrc and append these aliases to the end of the file:
lg() {
export LAZYGIT_NEW_DIR_FILE=~/.lazygit/newdir
lazygit "$@"
if [ -f $LAZYGIT_NEW_DIR_FILE ]; then
cd "$(cat $LAZYGIT_NEW_DIR_FILE)"
rm -f $LAZYGIT_NEW_DIR_FILE > /dev/null
fi
}After saving, execute source ~/.zshrc to take effect.
Usage
# Launch
lazygit
lg
# Default equivalent to git status
# Add files (git add)
Use ↑ ↓ to select files
Press: space
# Commit commit
c
Enter commit message → Enter to submit
# Push / pull
P / p
# Switch branch
Enter branch panel
↑ ↓ to select branch
Press: enter
# New branch
n
# Delete branch
d
# View diff
Select file
Press: enter
# Stash
slazydocker: Terminal UI for Docker
A simple terminal user interface supporting docker and docker-compose.
- Use interface operations instead of docker commands
- Can view containers, images, logs, volumes
- Supports start / stop / delete containers
GitHub: https://github.com/jesseduffield/lazydocker
Installation
brew install lazydockerIntegration (Optional)
Open ~/.zshrc and append these aliases to the end of the file:
alias lzd='lazydocker'After saving, execute source ~/.zshrc to take effect.
Usage
# Launch
lazydocker
lzd
# Switch panels
← →
# Select containers / images
↑ ↓
# Start / stop containers
s
# Restart containers
r
# Delete containers
d
# View logs
Select container → Enter Logs panel
# Delete images
d
# Search functionality
/zellij: Modern Terminal Multiplexer
Zellij is a workspace oriented toward developers, operations personnel, and all users who love terminals. Similar programs are sometimes also called "terminal multiplexers."
- Can have multiple window split screens in one terminal
- Each pane can run different commands (like tmux)
- Supports saving sessions, disconnect recovery, layout management
- More modern and easier-to-use tmux alternative (terminal split screen tool)
GitHub: https://github.com/zellij-org/zellij
Installation
brew install zellijIntegration (Optional)
Open ~/.zshrc and append these aliases to the end of the file:
# Method 1: Normal method
eval "$(zellij setup --generate-auto-start zsh)"
# Method 2: If your computer has other terminals like Ghostty installed, only want to start zellij when opening Mac Terminal, not when opening Ghostty
if [[ "$TERM_PROGRAM" == "Apple_Terminal" ]]; then
if [[ -z "$ZELLIJ" ]]; then
eval "$(zellij setup --generate-auto-start zsh)"
fi
fiAfter saving, execute source ~/.zshrc to take effect.
Configuration
Reference: https://zellij.dev/documentation/configuration.html
Edit file ~/.config/zellij:
// Theme
theme "catppuccin-macchiato"
// Scroll buffer size
scroll_buffer_size 10000
// Rounded corners
ui {
pane_frames {
rounded_corners true
}
}Usage
# Open panel
Ctrl + p
# Bottom bar will have various command prompts
n: New panel
r: Split right
d: Split down
x: Close panel
Alt + f: Float panel
# Session
zellij -s demo
# Reopen
zellij attach demo
# Open session panel
Ctrl + O
w: Enter session managementcmux: macOS Terminal with Vertical Tabs and Notifications
A macOS terminal based on Ghostty with vertical tabs and notification features, suitable for AI coding agents.
GitHub: https://github.com/manaflow-ai/cmux
Installation
brew install --cask cmuxUsage
Command + D: Left-right split screen
Command + Shift + D: Up-down split screen
Command + W: Close split screen
Command + N: New workspaceNotifications
When using Claude to generate code in the terminal, if you don't want to wait boringly and instead switch to do other things, you won't be notified when generation is complete. cmux has a notification feature that, combined with Mac notifications, can display message notifications on screen.
Conclusion: Building Your Ultimate Terminal Environment
These terminal extensions represent the modern evolution of command-line tools. Each one addresses specific pain points that developers face daily, from file navigation to system monitoring, from version control to container management.
The key to maximizing productivity isn't installing every tool listed here but selecting those that align with your specific workflow. Start with 2-3 extensions that solve your most frequent frustrations, master them thoroughly, then gradually expand your toolkit.
Remember, the best terminal setup is highly personal. What works for one developer might not suit another. Experiment, customize, and iterate until you've built an environment that feels like a natural extension of your thinking process.
The terminal remains one of the most powerful interfaces for developers. With these modern tools, it becomes not just functional but genuinely enjoyable to use.