I have been using GUI editors for over 20 years. Atom, Sublime Text, PyCharm, WebStorm, VSCode, Zed, and many others. I also used Vim for years, but only for basic things like editing config files on desktop and servers. I always wanted to learn it properly, but I never did. I even tried NeoVim distributions like LazyVim, but it never clicked. Too much configuration, too many plugins, too much to learn.
WebStorm was my favorite for a long time. I could install it, open any project, and start coding right away. Everything was ready. No configuration needed. That was exactly what I wanted.
But this year, something changed.
The problem: AI changed everything
I think it started with AI. I have been using AI coding tools more and more, and I realized that I have more projects open at the same time than ever before. AI works on tasks in multiple projects. Every project has a dev server, Claude Code, Codex, Docker, linters, tests, documentation site, Storybook, and more.
I started drowning in windows and panels.
At some point, I had WebStorm open with multiple projects, a separate terminal (Ghostty) with many tabs, Claude Desktop, Codex Desktop, and more windows on top of that. Switching between all of this on macOS was not easy. I was doing more work, faster, on multiple tasks at the same time, and my old flow could not keep up anymore.
Too many windows. Too many apps. Too many panels.
Searching for a better way
I started experimenting.
SoloTerm. I found this tool that can automatically run processes for you. It was nice, but running a code editor inside it did not work well. I used it for a couple of days and moved on.
Back to WebStorm. I tried to move everything into WebStorm. I configured it to display only one panel at a time. When I clicked on the code, the terminal would hide. When I opened the terminal, other panels would close. It worked for two or three days. But when I had multiple WebStorm projects open and I switched between them, the panels would close. I would go back to a project and my terminal was gone. I could not find a good way to manage everything in WebStorm.
VSCode and Zed. I tried them again. Same problems. Too many panels, too many windows, no good way to organize everything across multiple projects.
cmux. I also found cmux, a native macOS terminal built on the same engine as Ghostty. It has workspaces, vertical tabs, split panes, and an embedded browser. All built in, no tmux needed. I tried it, but at the time it had some bugs that made it hard to use for real work. It could be a great tool in the future.
The tools I found
I wanted something like Vim, but without spending weeks on configuration. After a lot of experimenting, I settled on a set of tools that each do one job well.
Helix is my code editor. It is a terminal-based editor similar to NeoVim, but it comes with everything built in. No plugins needed. LSP support, file tree, fuzzy file search, syntax highlighting, auto-formatting, code actions. I configured it in about 15 minutes and started coding. What I really like is the built-in help. When I press Space, it shows available shortcuts. After a few days, muscle memory kicked in.
tmux handles session and window management. Each project gets its own session, each process gets its own window. I switch between projects and processes with keyboard shortcuts. When I close the terminal, everything stays alive and I can reattach later.
lazygit replaced the Git panel I used in WebStorm. It is a terminal UI for Git that shows branches, commits, diffs, and staging in a single interface. I can stage hunks, interactive rebase, cherry-pick, and do everything I need without leaving the terminal.
just with fzf runs project commands on demand. Every project has a justfile with all the commands I use daily. I type j, a fuzzy finder shows all available commands, I pick one, and it runs. No need to remember long commands or start everything at once.
Ghostty is my terminal emulator. It is fast, renders well on macOS, and has a simple config. I do not use Ghostty tabs or splits because tmux handles all of that.
I also set up Caps Lock as a super key using hidutil and Hammerspoon. One tap sends Escape (great for Helix and lazygit), double tap toggles Caps Lock, and holding it switches apps or acts as Ctrl inside the terminal.
For backing up all these configs, I use a bare Git repo. No symlinks, no extra tools, just Git tracking my dotfiles across $HOME.
The workflow
My entire development environment is a single Ghostty window with tmux running inside. A typical project session looks like this:
- helix - Helix editor with the project open
- claude - Claude Code working on a task
- dev - dev server running
- docker - docker compose up
- lint - linter running in watch mode
- tests - tests running in watch mode
- shell - a free terminal for quick commands
I do not start everything at once. I open what I need, when I need it. The starting point is simple:
ts myprojectto create or switch to a project sessiont devto open a new tmux window called “dev”jto pick a command from the list
Every tmux window has a name and a purpose. I switch between projects with Option+H / Option+L and between windows with Option+1/2/3. Everything is one or two keystrokes away.
If you want to automate the session startup, tmuxinator lets you define a YAML config that opens all windows and runs all commands with a single command. I use it for some projects, but not all of them. Sometimes I just want to check some code or ask AI a quick question without starting everything.
I can also generate commit messages with AI directly in lazygit. I stage changes, press a key, and Claude writes the commit message based on the diff.
What surprised me
Learning was easier than expected. I was afraid of learning all the shortcuts for Helix, tmux, and lazygit. But after a few days, muscle memory kicked in. Now I navigate without thinking about it.
Memory usage dropped. When I was using WebStorm with multiple projects, it consumed 6 to 9 gigabytes of RAM. Now, with the same projects open, the entire terminal setup uses about 1 gigabyte. Everything feels faster and lighter.
I do not miss the IDE. I thought I would need WebStorm for refactoring, debugging, and advanced features. But honestly, I was already doing most of that in the terminal. The editor was just for writing code, and Helix does that well enough.
One window for everything. The biggest improvement is that I went from juggling multiple app windows (WebStorm, Ghostty tabs, Claude Desktop, Codex Desktop) to a single Ghostty window. Everything lives inside tmux. No more switching between apps. Everything is two keystrokes away instead of scattered across multiple desktops.
Is this for everyone?
Probably not. If you work on one project at a time and your IDE handles everything well, there is no reason to switch. WebStorm is still a great tool.
But if you find yourself drowning in windows, if AI tools are multiplying the number of processes you need to run, and if you already use the terminal for most things anyway, then maybe it is time to reconsider your flow.
I wish I had started sooner. If you want to try it, start with one tool. Try lazygit instead of your IDE Git panel. Try Helix for a day. See how it feels.
All posts in this series
- Helix: a code editor that just works - my editor setup with config and LSP
- Helix cheatsheet - keyboard shortcut reference
- My tmux setup - session and window management with full config
- tmux cheatsheet - keyboard shortcut reference
- lazygit: a better way to use Git - terminal Git client with delta
- lazygit cheatsheet - keyboard shortcut reference
- just: a simple command runner - project commands with fuzzy search
- Caps Lock as a super key on macOS - one key for Escape, Ctrl, and app switching
- Automate tmux sessions with tmuxinator - one command to start your workspace
- AI commit messages in lazygit - Claude generates commit messages from diffs
- Dotfiles backup with a bare Git repo - back up configs without symlinks