INTRO TO SOME TERMINAL TOOLS

$

Modern CLI replacements for a faster, prettier terminal
← → navigate ESC overview
$ cat about_mithun.md
# Hi! I'm Mithun!!
Mithun Srinivasan · Chennai, India
FOSS/Linux Enthusiast · Ambiverted Nerdy Techie
$ eza --icons -l --git
eza
Modern ls — successor to exa · icons, colors, git status
$ eza --icons -l --git
.rw-r--r── main 12KB file.rs
.rw-r--r── main 4KB README.md
drwxr-x── main — src/
$ eza -T --icons
Tree view with directory nesting
$ eza --sort newest
Sort files by modification time
$ eza --only-dirs
List directories only
$ eza --git-ignore
Hide files ignored by git
AliasCommandAction lseza --iconsList files lleza -lah --iconsDetailed list lteza -T --iconsTree view
$ zoxide init
zoxide
Smarter cd — ranks dirs by frecency (frequent + recent)
$ eval "$(zoxide init bash)"
Hook into bash (zsh / fish / pwsh also supported)
$ z dotfiles
~/dev/dotfiles
$ zi
Interactive jump — pairs with fzf
$ zoxide query -l
List everything zoxide has learned
$ zoxide add ~/projects
Manually add a path to the database
Replaces:cd Jump:z · interactive: zi
$ spf
superfile
TUI file manager — dual pane, preview, copy/move without flags
┌─ superfile ──────────────────────────┐
│ 📁 projects/ │ 📄 README.md │
│ 📁 src/ │ 📄 main.rs │
│ ────────────── ──────────────────── │
│ Tab: pane │ Space: select │
│ y: copy │ p: paste │
│ r: rename │ d: delete │
│ /: search │ .: toggle hidden │
└──────────────────────────────────────┘
$ spf
Launch in the current directory
$ spf ~/projects
Open a specific path
Replaces:ranger / midnight commander Launch:spf · yorukot/superfile
$ rg TODO
ripgrep (rg)
Recursive content search — skips .gitignore / binaries by default
$ rg TODO
src/app.js:42 // TODO: handle edge case
$ rg -i hello
Case-insensitive search across all files
$ rg "Scanner" *.java
Search only .java files for a pattern
$ rg -c function
Count matches per file
$ rg -l error --type py
List only filenames with matches (Python files)
Replaces:grep -r Install:brew/winget: ripgrep
$ fd .java
fd
Find by name — color, regex, respects .gitignore
$ fd .java
./src/main/App.java
./src/test/AppTest.java
$ fd --type d
Find only directories
$ fd --hidden config
Include hidden files and directories
$ fd --extension py
Find all Python files by extension
$ fd --exec wc -l
Run a command on each result
Replaces:find Pattern:fd [pattern] [path]
$ fzf
fzf — fuzzy finder
Interactive filter — pipe anything in, pick a line
$ Ctrl+R
Fuzzy-search command history
$ Get-ChildItem -Directory | fzf
Pipe directory list into fzf
$ code (fzf)
Select a file with fzf, open in VS Code
$ rg "TODO" | fzf
Pipe rg results into fzf for interactive filtering
$ Ctrl+T  /  Alt+C
Fuzzy files · fuzzy cd (after fzf key bindings)
Pairs with:fd · rg · zoxide zi · bat preview Install:brew install fzf
$ git config --global core.pager delta
delta
Syntax-highlighted pager for git diff / show / log -p
$ git show HEAD
Renders with:
• Syntax-highlighted code
• Side-by-side diff view
• Line numbers + word-level changes
$ git diff
Delta renders staged/unstaged diffs automatically
$ delta --side-by-side
Force side-by-side view
$ git config --global delta.side-by-side true
Make side-by-side the default
Replaces:plain git diff Package:git-delta · dandavison/delta
$ lazygit
lazygit
Full git TUI — no more memorizing flags
┌─ lazygit ───────────────────────────┐
│ Status │ Branch: main │
│ ──────── │ ───────────────────── │
│ ● M src/ │ ↑ feat/header │
│ ● M docs │ ● main │
│ ■ U new │ ↓ fix/footer │
│ ──────── │ ───────────────────── │
│ [1-5] panels │ space to stage │
└──────────────────────────────────────┘
$ lazygit
Launch in the current repo
$ ?   space   c   p
Help · stage · commit · push
Replaces:git add / commit / branch / stash Panels:1–5 · Status, Branch, Commit, Stash
$ glow README.md
glow
Render Markdown in the terminal — beautifully
$ glow README.md
# Project Title ← rendered header
Description here... ← rendered body
- List item ← rendered list
$ glow
Browse all .md files in the current folder
$ glow -p README.md
Render with a pager for long files
$ glow --style light
Use a light color scheme
Replaces:cat for .md files Style:Headers, bold, tables, code blocks
$ bat Demo.java
bat
cat clone with syntax highlighting + line numbers
$ bat Demo.java
1 │ public class Demo {
2 │ public static void main(String[] args) {
3 │ System.out.println("Hello");
4 │ }
5 │ }
$ bat --list-themes
Preview all available color themes
$ bat --line-range 10:20 file.py
Show only specific line range
$ bat --language rust file.py
Force syntax highlighting language
Alias:cat → bat Also:git markers · pager · bat -p (plain)
$ btop4win
btop4win
Windows port of btop — CPU, RAM, disks, processes
┌─ btop4win ───────────────────────────────────┐
│ CPU ████████░░░░ 68% 2.4 GHz │
│ MEM ██████░░░░░░ 52% 8.3 GB / 16 GB │
│ SWP ██░░░░░░░░░░ 12% 1.2 GB / 10 GB │
│ ─────────────────────────────────────────── │
│ PID │ CPU │ MEM │ COMMAND │
│ 142 │ 2.1 │ 4.5 │ code.exe │
│ 203 │ 1.8 │ 2.1 │ firefox.exe │
└──────────────────────────────────────────────┘
$ btop4win
Launch the system monitor
$ btop
Same app on Linux / macOS (aristocratos/btop)
Replaces:Task Manager / htop / top Keys:↑↓ select · k kill · t tree
$ kew
kew
Terminal music player for a local library (ravachol/kew)
┌─ kew ───────────────────────────────────┐
│ ▶ Now Playing │
│ ─────────────────────────────────────── │
│ 🎵 Midnight Dreams │
│ 👤 Artist │
│ ⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤⏤ │
│ ⏮ ⏸ ⏭ ♥ 🔁 │
│ ─────────────────────────────────────── │
│ Library │ Playlists │ Search │
└──────────────────────────────────────────┘
$ kew
Launch the music player TUI
$ kew path/to/album
Play a folder of local audio files
Plays:local files · no streaming account Type:Keyboard-driven TUI
$ hx
Helix
Kakoune-style modal editor — tree-sitter + LSP, zero plugin setup
┌─ helix ─────────────────────────────┐
│ NOR main.rs ● LSP: rust-analyzer │
│ ────────────────────────────────── │
│ fn main() { │
│ println!("hello helix"); │
│ } │
│ ────────────────────────────────── │
│ space f: files │ gd: go to def │
└──────────────────────────────────────┘
$ hx file.rs
Open a file in Helix
$ hx --health
Check LSP / highlighter status
$ hx --tutor
Interactive tutorial inside the editor
Launch:hx · brew/winget: helix Model:select first, then act
$ vim
Vim
Classic modal terminal editor — everywhere, forever
$ vim file.txt
Open (or create) a file
$ i
Insert mode — start typing
$ Esc
Back to Normal mode
$ :w  /  :q  /  :wq
Write, quit, or write-and-quit
$ vimtutor
Built-in lesson for the core motions
Modes:Normal · Insert · Visual Motions:hjkl · w · dd · yy
$ nvim
Neovim
Modern Vim fork — Lua config, LSP, and plugins
$ nvim file.rs
Open a file in Neovim
$ nvim ~/.config/nvim/init.lua
Edit Lua config instead of vimrc
$ :Lazy
Plugin manager UI — if you installed Lazy.nvim
$ :LspInfo
Inspect LSP clients (nvim-lspconfig / built-in)
$ :checkhealth
Diagnose plugins, LSP, and providers
Launch:nvim · drop-in Vim motions Config:~/.config/nvim/init.lua + LSP
$ gittype
gittype
Typing practice from real git repositories
┌─ gittype ───────────────────────────┐
│ Type this snippet: │
│ ────────────────────────────────── │
│ fn main() { println!("hello"); } │
│ ████████░░░░░░░░ WPM 72 ACC 96% │
└──────────────────────────────────────┘
$ gittype
Practice on the current repo's source code
$ gittype --repo clap-rs/clap
Clone a GitHub repo and type its code
$ gittype --langs rust
Filter snippets by language
$ gittype trending
Practice on trending GitHub repos
Category:Typing trainer Source:Real git repos / source code
$ serie
serie
Rich git graph via terminal image protocols (not ASCII)
┌─ serie ─────────────────────────────┐
│ * a1b2c3 feat: add helix slide │
│ |\ │
│ | * d4e5f6 fix: pager on Windows │
│ |/ │
│ * 789abc docs: update README │
│ * 012def init: terminal tools │
└──────────────────────────────────────┘
$ serie
Open an interactive commit graph
$ serie --order chrono
Chronological commit order (or topo)
$ git log --graph --oneline
The plain-git version serie improves on
Needs:Kitty / iTerm2 / WezTerm / Ghostty Note:Windows not officially supported
$ jq .
jq
JSON processor — query, filter, and transform
$ cat data.json | jq .
Pretty-print JSON
$ jq '.users[].name' data.json
Extract a nested field from every item
$ jq '.[] | select(.active == true)'
Filter objects by a condition
$ jq '{name, id}' data.json
Build a smaller object from selected keys
$ curl -s api/users | jq -r '.[0].name'
Raw string output (no JSON quotes)
Replaces:python -m json.tool Pattern:jq -r 'filter' file.json
$ ./qa --session
QUESTIONS & ANSWERS
Any questions about the tools we covered?
$ echo "Ask away!"
$
Intro to Some Terminal Tools · 23 slides
ezazoxidesuperfileripgrepfdfzf deltalazygitglowbatbtop4winkew helixvimneovimgittypeseriejq
Press or to restart
mithun@terminal:~/tools $
0% 01 / 23