dryrun

Switching to a Terminal-Based Workflow

tooling

I’ve always preferred working on a single screen: just my MacBook and no external monitors. At work I’d sometimes use a second display and saw some value in it. But largely, my setup was already leaning this way: a single screen with VS Code or Cursor in one macOS desktop, Chrome in another, terminal in a third, switching between them with Cmd+Tab or a three-finger swipe.

I’ve used Vim sparingly over the past couple years—mostly rudimentary vim motions for git commit messages at work and some curious tinkering on personal projects. I always wanted to level up to a more advanced workflow with Vim/Neovim, but the barrier felt insurmountable.

Vim on its own is tough enough, and while I’d become somewhat comfortable with it, Neovim seemed way too daunting. Every time I tried, I’d just end up crawling back to VS Code or Cursor. That changed when I finally stumbled onto the right approach during this holiday break.

The Philosophy: Why Terminal First?

You only look at one thing at a time. Multiple monitors don’t help much if your eyes can only focus on one screen. What matters is how quickly and intentionally you can switch contexts.

That’s where keyboard-driven workflows shine. Switching via keybindings is instant—no reaching for the mouse, no hunting for windows. Context switching still happens, but it’s deliberate and frictionless. You decide when to switch, and it happens immediately.

WezTerm is what makes this possible for me. It’s a true color terminal—essential for themes and syntax highlighting to actually look right. The config is written in Lua (same as Neovim) and auto-reloads when you save it, so you get instant feedback while tinkering. Out of the box it supports image rendering, split panes, and tabs with easy keyboard navigation. It’s just a joy to use.

WezTerm with 3 tabs: Neovim, OpenCode, and shell with in-built split panes functionality. Cmd+n switches tabs instantly.

The Learning Breakthrough

Vim/Neovim transitions usually fail because of the steep learning curve. You’re staring at a blank screen, expected to learn Lua, figure out configs, set up LSPs, install plugins—all from scratch. It’s a lot. My breakthrough came from two things that turned that intimidating blank screen into something I could actually explore:

1. AstroNvim: Solid Defaults Out of the Box

AstroNvim gave me a polished, IDE-like experience out of the box. No fiddling with configs for hours before getting started. It ships with sensible defaults and a curated set of plugins that just work: neo-tree for file exploration, telescope for fuzzy finding, and treesitter for syntax highlighting. It felt familiar coming from VS Code.

But the best plugin it came with was which-key. This was transformational for me. Instead of memorizing hundreds of keybindings, which-key shows you what’s possible in real-time. Hit the Space leader key and it reveals options for file searching, toggling the explorer, opening LSP tools. Start a vim motion like y and it shows you yanking options as you type. You learn by exploring, not memorizing. It’s what finally made vim motions click.

AstroNvim plugins in action: neo-tree for file navigation, telescope for fuzzy finding, and which-key revealing available motions.

2. OpenCode as the Sensei

This was the real game-changer. AstroNvim gave me solid defaults, but OpenCode helped me extend my Neovim config to everything I actually needed: LSP support for the languages I use, gitsigns, diffview, lazygit, conform for auto-formatting on save, and the OpenCode Neovim integration itself. A terminal-driven AI agent that fits the keyboard-centric philosophy—no switching to a browser, just Cmd+1 for Neovim and Cmd+2 for OpenCode. Stuck on a weird Lua config? LSP misbehaving? Ask the agent. It reads your files, suggests fixes, makes edits directly. No more doc rabbit holes.

Neovim in tab 1, OpenCode in tab 2. Cmd+1/Cmd+2 to swap—ask questions, tweak configs, repeat.

Learning by doing, getting immediate answers when stuck—that’s what finally made it click.

The Stack

Here’s what I’m running:

  • WezTerm – GPU-accelerated terminal, fast and configurable
  • Zsh – better shell experience with plugins and themes
  • Neovim with sensible defaults via *AstroNvim
  • OpenCode – terminal driven AI agent for agentic workflows
  • Git dotfiles – everything versioned so I can replicate the setup anywhere

Wrapping Up

The result? A snappy, distraction-free setup where everything is a keystroke away. Combine tools built for discoverability with an AI assistant to help when you’re stuck, and the terminal stops being scary.

I’m only a few days into this workflow but genuinely enjoying it so far. The setup will keep evolving—tmux for session management, avante.nvim for in-editor AI—but this is a solid foundation. More to come as I dig deeper.

All the configuration files for this setup are available in my dotfiles repo.