Skip to content

Commit f19d68e

Browse files
committed
Update cli-tools.md
1 parent c2c2ba4 commit f19d68e

File tree

1 file changed

+33
-73
lines changed

1 file changed

+33
-73
lines changed

website/developer-tools/cli-tools.md

Lines changed: 33 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,6 @@ Requirements: None (static binary). Optional: clipboard support via xclip/xsel o
104104

105105
**Trade-offs:** Slightly slower than plain cat due to syntax highlighting overhead (negligible for typical use). Requires Nerd Font or compatible font for icon support in some terminal setups. Syntax highlighter is opinionated—custom language definitions require configuration rather than built-in extensibility.
106106

107-
**vs cat:** Adds syntax highlighting and line numbers automatically without additional piping. Better for code inspection; cat remains faster for raw text piping to other commands.
108-
109-
**vs less with syntax plugins:** bat is simpler—no paging required for most files (output fits terminal), no plugin configuration needed for basic usage. Trade: less offers interactive scrolling and searching for large files where bat defaults to paging.
110-
111107
**Installation:**
112108

113109
```bash
@@ -122,6 +118,39 @@ sudo apt install bat # Debian/Ubuntu
122118
sudo pacman -S bat # Arch
123119
```
124120

121+
## Git Operations
122+
123+
### lazygit
124+
125+
![lazygit TUI showing staging, committing, and pushing workflow](https://github.com/jesseduffield/lazygit/raw/assets/demo/commit_and_push-compressed.gif)
126+
127+
[**lazygit**](https://github.com/jesseduffield/lazygit) is a Go-based Git TUI (terminal user interface) for visual branch management, interactive staging, and commit navigation. Cross-platform with extensive customization options.
128+
129+
**Key differentiators:** Visual branch tree shows repository topology without command memorization. Interactive staging supports hunk selection and individual line staging. Commit navigation browses history with inline diffs. Customizable keybindings via YAML config. Mouse support for clicking to select, scrolling through commits. Multi-worktree awareness for parallel branch development.
130+
131+
**Best suited for:** Developers managing multi-worktree workflows who need visual branch context. Engineers doing complex interactive rebases, cherry-picks, and merges. Users wanting git discoverability via menu-driven interface instead of command memorization.
132+
133+
**Trade-offs:** Performance degrades on massive repositories (Linux kernel: 57s load time, 2.6GB RAM usage). Not a replacement for all git commands—some operations faster via raw CLI. Learning curve for keybindings, though discoverable via built-in help menu.
134+
135+
**Installation:**
136+
137+
```bash
138+
# macOS
139+
brew install lazygit
140+
141+
# Go
142+
go install github.com/jesseduffield/lazygit@latest
143+
144+
# Windows
145+
scoop install lazygit
146+
147+
# Linux package managers
148+
sudo apt install lazygit # Debian/Ubuntu
149+
sudo pacman -S lazygit # Arch
150+
```
151+
152+
Requirements: git. Optional: custom config in `~/.config/lazygit/config.yml`.
153+
125154
## File Navigation
126155

127156
### eza
@@ -311,75 +340,6 @@ sudo pacman -S zellij # Arch
311340
# Others: check https://zellij.dev/documentation/installation
312341
```
313342

314-
## Shell History
315-
316-
### Atuin
317-
318-
![Atuin shell history search showing exit codes, duration, and timestamps](https://github.com/atuinsh/atuin/raw/main/demo.gif)
319-
320-
[**Atuin**](https://atuin.sh/) is a Rust-based shell history tool that replaces Ctrl+R with searchable command history backed by SQLite. Cross-platform (macOS, Linux, BSD), actively maintained, production-ready.
321-
322-
**Key differentiators:** Full-text search across command history with filtering by directory, exit code, execution duration, and session. Multi-line command support preserves complex agent invocations (cargo runs, docker commands, multi-step pipelines). Local SQLite database works completely offline—cloud sync is optional and self-hostable. Statistics command (`atuin stats`) provides command usage analytics by directory and frequency. Shell integrations (bash, zsh, fish, nushell) with configurable keybindings beyond Ctrl+R. Fuzzy searching with context preview shows command output and metadata.
323-
324-
**Best suited for:** Engineers managing multi-agent workflows who need to recall complex, multi-line invocations from previous sessions. Developers switching between directories and projects who benefit from directory-scoped history filtering. Teams wanting to share sanitized command history patterns across machines without cloud dependency.
325-
326-
**Trade-offs:** Requires database migration from shell's native history format (one-time import). Fuzzy search interface differs from traditional Ctrl+R—learning curve for muscle memory. Cloud sync adds latency on slow connections, but works perfectly offline with local SQLite—sync is entirely optional and not required for core functionality. Self-hosting option available for privacy-conscious teams.
327-
328-
**vs McFly:** Both support multi-line commands and fuzzy searching. Atuin offers better analytics (`atuin stats`) and offline-first design. McFly focused on scoring frequently used commands; Atuin balances frecency with richer filtering.
329-
330-
**vs Ctrl+R:** Interactive fuzzy search and filtering (by directory, exit code, duration) replaces linear history search. Preserves complex multi-line commands instead of truncating. Cross-machine sync optional, unlike shell history's single-machine scope.
331-
332-
**vs fzf history integration:** fzf provides general-purpose fuzzy selection; Atuin specializes in command history with shell-aware parsing and rich metadata. Atuin's database enables analytics—fzf works on flat history lists. Can use both: fzf for general file selection, Atuin for command recall.
333-
334-
**Installation:**
335-
336-
```bash
337-
# macOS
338-
brew install atuin
339-
340-
# Cargo (Rust)
341-
cargo install atuin
342-
343-
# Linux package managers
344-
sudo apt install atuin # Debian/Ubuntu
345-
sudo pacman -S atuin # Arch
346-
```
347-
348-
Requirements: Rust 1.70+ if building from source. Optional: cloud sync account for cross-machine history (local-only operation fully supported without account).
349-
350-
## Git Operations
351-
352-
### lazygit
353-
354-
![lazygit TUI showing staging, committing, and pushing workflow](https://github.com/jesseduffield/lazygit/raw/assets/demo/commit_and_push-compressed.gif)
355-
356-
[**lazygit**](https://github.com/jesseduffield/lazygit) is a Go-based Git TUI (terminal user interface) for visual branch management, interactive staging, and commit navigation. Cross-platform with extensive customization options.
357-
358-
**Key differentiators:** Visual branch tree shows repository topology without command memorization. Interactive staging supports hunk selection and individual line staging. Commit navigation browses history with inline diffs. Customizable keybindings via YAML config. Mouse support for clicking to select, scrolling through commits. Multi-worktree awareness for parallel branch development.
359-
360-
**Best suited for:** Developers managing multi-worktree workflows who need visual branch context. Engineers doing complex interactive rebases, cherry-picks, and merges. Users wanting git discoverability via menu-driven interface instead of command memorization.
361-
362-
**Trade-offs:** Performance degrades on massive repositories (Linux kernel: 57s load time, 2.6GB RAM usage). Not a replacement for all git commands—some operations faster via raw CLI. Learning curve for keybindings, though discoverable via built-in help menu.
363-
364-
**Installation:**
365-
366-
```bash
367-
# macOS
368-
brew install lazygit
369-
370-
# Go
371-
go install github.com/jesseduffield/lazygit@latest
372-
373-
# Windows
374-
scoop install lazygit
375-
376-
# Linux package managers
377-
sudo apt install lazygit # Debian/Ubuntu
378-
sudo pacman -S lazygit # Arch
379-
```
380-
381-
Requirements: git. Optional: custom config in `~/.config/lazygit/config.yml`.
382-
383343
---
384344

385345
**Related Course Content:**

0 commit comments

Comments
 (0)