DEV Community

Alex Chen
Alex Chen

Posted on

I Replaced My Entire Dev Workflow with CLI Tools (Here's What I Use)

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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
})
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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": ...}
Enter fullscreen mode Exit fullscreen mode

Docker (when I use it): lazydocker

lazydocker                            # TUI for docker compose
# Shows containers, images, volumes, networks
# Restart/logs/stats without remembering flags
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

Week 2: Add power tools

# Install these
gh, lazygit, fzf, eza, bat (better cat), ripgrep (better grep), jq, zoxide
# Each replaces 5+ manual steps
Enter fullscreen mode Exit fullscreen mode

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!"
}
Enter fullscreen mode Exit fullscreen mode

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)