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 eza

Integration

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 structure

You 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
lt

yazi: 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 --overwrite

If your Mac terminal cannot preview images when entering yazi and reports an error:

failed to spawn chaa: no such file or directory

You 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 image

Integration (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 = true

Create 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

BindingAlternate KeyAction
kMove cursor up
jMove cursor down
lEnter hovered directory
hLeave current directory, enter parent directory

File Operations

BindingAction
oOpen selected file
OOpen selected file interactively
EnterOpen selected file
Shift+EnterOpen selected file interactively (some terminals don't support this yet)
TabDisplay file information
yCopy selected files
xCut selected files
pPaste copied files
PPaste copied files (overwrite if target location exists)
Y or XCancel yank status
dDelete selected files to trash
DPermanently delete selected files
aCreate a file (directories end with /)
rRename selected file
.Toggle hidden file visibility

Copy Paths

c⇒d means press c key first, then press another d key.

BindingAction
c⇒cCopy file path
c⇒dCopy directory path
c⇒fCopy filename
c⇒nCopy filename (without extension)

Filter Files

BindingAction
fFilter files

Find Files

BindingAction
/Find next file
?Find previous file
nGo to next found
NGo to previous found

Search Files

BindingAction
sSearch files by name using fd
SSearch files by content using ripgrep
Ctrl+sCancel 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 btop

Usage

# Default
btop

# Show/hide layouts
1 / 2 / 3 / 4

# Select process
↑ ↓

# Search process
/

# Kill process
k

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

Integration

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 size

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

Integration

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-languages

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

Usage

fastfetch

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

Integration

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 | fzf

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

Usage

# 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 | fzf

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

Usage

# 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] | fzf

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

Integration

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 lazygit

Integration (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
s

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

Integration (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 zellij

Integration (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
fi

After 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 management

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

Usage

Command + D: Left-right split screen
Command + Shift + D: Up-down split screen
Command + W: Close split screen
Command + N: New workspace

Notifications

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.