2023 is the year of the terminal
Terminal velocity
Okay, the title might be a bit click-baity, but in any case, 2023 is turning out to be my year of the terminal! In this post, I’d like to share my quest for developer productivity and how it slowly took me towards the terminal, and has allowed me to reach, indeed, terminal velocity. Pun very much intended…
Along the way, I’ll also share a bit of my setup and sources, so you can check out the tools I work with yourself! You can find my dotfiles here:
Developer productivity
When I started programming I didn’t really care about developer productivity. I guess that’s normal. At first, you’re just happy stuff works! However, I think it is natural for software developers to care about efficiency, so every programmer is bound to start looking for better, often quicker, ways to do things.
Now before I start talking about what such efficiency, or developer producitivity, means for me, I’d like to preface this by saying that it is, of course, my personal preference. Everyone is bound to have different ideas about what works best for them, and I think that is perfectly fine. I’ve written before about how I think it’s nonsense that in 2023 people are still arguing about the “best” editor, and I think this goes for all of developer productivity. So, by all means, look around and decide what’s right for you! If you don’t like doing stuff in the terminal, that’s fine by me!
Linux and shell
When I switched from my previous job to working as a developer (which is another story), I immediately got one of the best pieces of advice about software development I have ever received. I was a Windows user at the time and my CTO at the time suggested I start using Linux on my desktop/laptop. That way, I could get familiar with some shell commands, which would serve me well when I had to do some work on a server. I cannot tell how instrumental this was for me to get to where I am now as a software developer. I started with Ubuntu, but quickly switched to Linux Mint and never looked back. Having used DOS in the old days, I found it completely natural to execute commands in the terminal and also quickly started to navigate the file system from the terminal instead of a file manager.
For me, using the terminal as my natural development habitat and starting point has several advantages. For one, it’s quick. Certainly with tab completion, aliases (T for /home/tdeneire/tmp e.g.), and fuzzy finders like fzf:
Second, the terminal is text based, which means you can manipulate its output with awk (which I wrote about here) or search it with tools like grep or its re-write in Rust ripgrep
Thirdly, it leaves a trace. When working in the terminal, you can retrace your history — literally, with the history command, or with the excellent tool atuin:
Neovim
For a long time, I was happy using this setup: I had the terminal for commands and navigation, and I used VSCode as my editor/IDE. By the end of 2022, however, I started exploring Vim and Neovim. The reason for this was ergonomics, initially. I was suffering from neck and shoulder pain, especially in my right shoulder, most likely from extending my arm to use the mouse.
At first, I did not expect much from Vim though, and it seemed impossible to get used to not using the mouse, but, to my surprise, I quickly noticed that the neck and shoulder pain improved, and that Vim motions are really not that hard to master! I also completely fell in love with Neovim and configuring my editor with Lua, so after a thorough comparison of VSCode and Neovim, I switched to Neovim completely:
Apart from ergonomics and the “customizability” (if that’s even a word) of Neovim, I also like its speed, and indeed, the fact that it integrates so well with the terminal. Even before Neovim, my workflow was primarily cd’ing in and out of directories and editing files. With Neovim this is just so much quicker than with an editor like VSCode.
Lazygit
One thing I missed in Neovim, at first, was the GitLens extension, but this lead me to the very worthy alternative LazyGit, a terminal-based Git UI written in Go, which can be integrated in Neovim really easily:
Bash terminal prompt
Of course, I also use Lazygit outside of Neovim, so after a while I started seeing the idea of having git information (repo, branch, etc.) in my terminal prompt. I briefly experimented with other shells like zsh and the ohmyzsh plugin system, and also with starship :
However, after a while I realized that you don’t need all of this and just made my own custom terminal prompt with Bash only:
Now my terminal prompt looks like this:

And this has all the information that I need, without the overhead of a framework (starship) or installing a different shell (zsh) — which I don’t like because I’d like to keep my shell habits as “standard” as possible for use on different machines.
Tmux
The most recent step in my “personal development environment” or PDE, as you’ll see it called here and there, is using tmux as a terminal multiplexer:
Before, I only used tmux for persistent terminal sessions (like when executing commands on a remote server) and I had tilix for tiling terminal windows:
Now, I still use tilix (it also has excellent layout features like borderless windows and such), but just one window and I pair it with tmux, specifically because this allows me to use key bindings to switch to other windows and create new ones:

As you can see, I keep my tmux status line (marked with the red box) very minimal, only displaying an icon for the standard windows I like to fire up when starting work:
- neovim (V-icon)
- connection to a remote development server (airplane icon)
- bash terminal (#! icon)
I am able to do this with a single command, using a tmuxsession manager called tmuxinator :
It might seem like a trivial thing, but being able to jump from Neovim to a terminal (and back) with a single key binding is really important for me. So much of what I do on a daily basis involves editing some code and then running a command to check the output. And changing windows with Alt-Tab is just not the same as your browser and other applications tend to get in the way…
The journey continues
Although it seems tmuxhas now solved one of the last little things that bugged me about my workflow, I know from experience the journey towards more development productivity will always continue. Tool change and so do your habits and needs. Sometimes you start working with a new language or framework and your workflow needs to change accordingly. That’s what I like about these tools too: as most are quite small and standalone, you can easily switch them for another or add new tools to the mix.
That’s why I also like to keep up-to-date by following some good sources of information for terminal-based development environment. Here’s a list of some people’s work that I particularly enjoy:
- Alpha2phi: Medium writer and excellent Neovim tutor
- Josh Medeski: tmux wizard and PDE specialist
- Elijah Manor: a bit of everything terminal-related
- Adib Hanna: Neovim and tmux
Adib Hanna | Substack
Software Developer, Philosophy lover, Chess player, and Musician.
substack.com
Do you know any other people or channels you turn to for everything terminal-related? Let me know in the comments!
Hi! 👋 I’m Tom. I’m a software engineer, a technical writer and IT burnout coach. If you want to get in touch, check out https://tomdeneire.github.io
