I Replaced My Entire Dev Workflow with CLI Tools (Here's What I Use)
GUIs are slow. Keyboards are fast. Here's my terminal-first development setup.
Why CLI-First?
Two reasons:
1. Speed
GUI: Move mouse → Click menu → Find option → Click → Wait
CLI: Type command → Enter → Done
For operations I do hundreds of times a day, those seconds add up to hours per week.
2. Automation
GUI actions are hard to script. CLI commands are trivially composable:
# One-liner that tests, builds, and deploys
npm test && npm run build && rsync -avz dist/ user@server:/app/ && ssh user@server "pm2 restart app"
Try doing THAT with click-click-click.
My Essential CLI Toolkit
Code Editing: Neovim (with lazy.nvim)
Yes, I use a terminal editor. No, I'm not crazy.
-- ~/.config/nvim/init.lua (minimal config)
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
vim.opt.rtp:prepend(lazypath)
require("lazy").setup({
"nvim-treesitter/nvim-treesitter", -- Syntax highlighting
"neovim/lspconfig", -- LSP support
"hrsh7th/nvim-cmp", -- Autocomplete
"lewis6991/gitsigns.nvim", -- Git blame in gutter
"nvim-telescope/telescope.nvim", -- Fuzzy finder
"folke/trouble.nvim", -- Diagnostics panel
})
Why not VS Code? I use VS Code Remote for complex debugging. But for day-to-day editing, Neovim is faster once you learn it.
Git: Lazygit (TUI)
# Install
brew install lazygit # or apt install lazygit
# Run in any repo
lazygit
Shows staged/unstaged files, commit history, branch graph, stashes — all in one terminal UI.
Game changer: Interactive rebase with visual commit selection. No more git rebase -i anxiety.
GitHub: gh CLI
# PR workflow
gh pr create --title "Fix auth middleware" --body "Closes #123"
gh pr status # See all your open PRs
gh pr checks 456 # Check CI status
gh pr review 456 --approve # Approve a PR
gh issue create --title "Bug: ..." --body "..."
# Repo management
gh repo clone owner/repo --depth 1 # Shallow clone
gh release create v1.0.0 ./dist.zip # Create release
gh api repos/owner/repo/contents/path # Raw API access
# Search
gh search issues "is:open label:bug" --limit 20
gh search commits "author:@me after:2026-05-01"
Pro tip: gh auth login with GitHub OAuth token = no password entry ever.
File Management: eza + zoxide + fzf
# Better ls
eza --long --header --git # Colorful, git-aware listing
# Smart cd
zoxide init bash >> ~/.bashrc # Remembers frequently used dirs
z proj # Jumps to /root/data/disk/projects/
# Fuzzy finding
fzf # Fuzzy-find anything from stdin
Ctrl+R in terminal # Fuzzy-search command history
cd **<fzf> # Fuzzy-find directories (with zoxide)
Process Monitoring: htop + jq
htop # Interactive process viewer
# Press F5 for tree view, F6 for sorting
# JSON processing (essential for API work)
echo '{"name":"test","value":42}' | jq '.value'
# → 42
curl -s https://api.github.com/user | jq '{login, name, public_repos}'
# → {"login": "armorbreak001", "name": "Alex Chen", "public_repos": ...}
Docker (when I use it): lazydocker
lazydocker # TUI for docker compose
# Shows containers, images, volumes, networks
# Restart/logs/stats without remembering flags
My Daily Workflow (Terminal Only)
Morning Startup
# Open terminal → tmux session
tmux new-session -d -s work
# Window 1: Main project
send-keys 'cd ~/projects/main' Enter
send-keys 'lazygit' Enter
# Window 2: Logs
tmux new-window -t work:2
send-keys 'tail -f logs/*.log' Enter
# Window 3: Server status
tmux new-window -t work:3
send-keys 'htop' Enter
# Attach
tmux attach-session -t work
During Development
# Edit file
nvim src/index.js
# Test (split pane)
# Ctrl+B then % (horizontal split)
npm test
# Check git status (another split)
lazygit
# Deploy (when ready)
./deploy.sh
Debugging Production Issues
# SSH into server
ssh myserver
# Check service status
systemctl status myapp
# View recent logs
journalctl -u myapp -n 100 --no-pager
# Real-time log tailing
journalctl -u myapp -f
# Resource check
free -h && df -h && ss -tlnp
# Quick fix + restart
nvim /opt/myapp/config.json
systemctl restart myapp
All without leaving the terminal.
GUI Tools I Still Use (And Why)
| Tool | When I Use It |
|---|---|
| Chrome/DevTools | DOM inspection, network analysis |
| VS Code (Remote) | Complex multi-file debugging |
| Postman | API testing (sometimes) |
| Draw.io | Architecture diagrams |
| Figma (browser) | UI mockups (rarely) |
The pattern: Use GUI when it provides UNIQUE value that CLI can't match. For everything else, stay in the terminal.
Getting Started Yourself
If you want to go CLI-first:
Week 1: Master the basics
# Learn these 10 commands deeply
cd, ls, grep, find, awk, sed, xargs, tee, watch, tmux
# That's 80% of daily terminal usage
Week 2: Add power tools
# Install these
gh, lazygit, fzf, eza, bat (better cat), ripgrep (better grep), jq, zoxide
# Each replaces 5+ manual steps
Week 3: Customize your shell
# Add aliases for frequent operations
alias gs="git status"
alias gp="git push"
alias dc="docker compose"
alias n="nvim"
# Add functions for complex workflows
deploy() {
npm test && npm run build &&
rsync -avz dist/ user@server:/app/ &&
ssh user@server "pm2 restart app" &&
echo "✅ Deployed!"
}
Week 4: Learn one terminal editor
Neovim or Helix. Just enough to edit configs and make quick code changes without leaving the terminal.
The Learning Curve Is Real (But Worth It)
Week 1 will feel SLOWER than your GUI tools. You'll forget keybindings. You'll Google everything.
By week 4, you'll be faster.
By month 3, you'll wonder how you lived without it.
The investment pays compound returns. Every shortcut you learn, every alias you create, every workflow you automate — they all save time forever.
What's your must-have CLI tool? Drop your essentials in the comments — I'm always looking for new additions to my toolkit.
Follow @armorbreak for more developer productivity content.
Top comments (0)