My Terminal Blueprint


Hi!

I don’t know if you’ve been following DHH’s recent rekindled love affair ❤️‍🔥 with the Terminal, but it is such a joy to see a tech thought leader sharing his excitement with multiplexers, Neovim, and Terminal user interfaces!

This, along with many questions I’ve received over the past months asking about my setup, tooling, and general workflow, inspired me to create both a video (coming out today 👀) and a written blueprint that I’m sharing here:

My Terminal Blueprint

Every setup is built with layers and different components, including an emulator, a prompt, tooling, hotkeys, and more. I’ll structure it from the ground up in a way that’s easy to follow and replicate or, better yet, use as a boilerplate to make it your own.

An emulator makes all the difference

A terminal emulator is the native program giving you access to a shell prompt. DHH uses Alacritty, as you can see above. My terminal journey started with the (terrible) MacOS terminal. Then I used the popular iTerm2 for a long time. After that, I spent a year with Alacritty, tried Kitty, and finally fell in love with Wezterm.

Wezterm, to me, has everything I want in an emulator:

  • Fast
  • Minimal looks
  • Renders everything beautifully
  • Easily configurable YAML setup
  • Great documentation

One con is its poor native window management (or lack thereof), which I think most other options also struggle with.

One project to watch is Ghostty by Mitchel Hashimoto (Hashicorp’s founder).

The shell is how things are done

I’m using the popular ZSH, mainly because I started with the even more popular project - oh-my-zsh. It feels like the same relationship developers had when getting into Ruby because of Rails a decade ago…

While I do think Fish has a lot to offer, I haven’t taken the time to properly explore it, so ZSH, coupled with the prompt I love, does everything I need:

The Prompt

I covered my use of Starship in a video last year, and I’ve been LOVING it and have never looked back! Coming from oh-my-zsh, I find Starship faster, leaner, easier to set up and configure, and it does everything I need. It comes with beautifully easy-to-understand docs and is just a sweet completion to my terminal setup.

The Multiplexer

I don’t think Tmux needs an introduction. It’s my terminal Operating System, nothing less! Tmux is my terminal splitter, space manager, and it even lets me know about upcoming calendar meetings. It’s plugged with a session manager I built and tons of other configurations. So, here’s a video covering how I set it up from scratch, and another one covering my session manager!

Tmux, as you may already know, is hosting my primary shell process: Neovim!

The only editor you’ll ever need: Neovim

Vim/Nvim is another tool that needs no introduction. I’ve made so many videos about it that it’s really hard to pick just one, so here’s all of them. There’s too much to be said about the plugins I use and how I set it up, so I’ve decided to create a dedicated video coming out next month.

CLI Tooling is just BETTER

Most of my work that involves API communication, internal commands, managing files and folders, and even code management is done within the terminal. I found many modern alternatives to Unix native commands like ls, cat, dig, tree, grep, and many more. EZA is one great example, making my ls/tree look not only beautiful but also more readable, providing git status options, and even a tree structure to my files!

If I had to pick one tool, there’s a very good chance I’d go with FZF. FZF makes everything accessible via a fuzzy picker. Whether it’s files, folders, command history, bits of code, everything becomes better using FZF. Even my Tmux session manager is built on top of an FZF feature. If you’re even an occasional terminal user, I can’t recommend it enough.

TUIs are all the rage now

Lastly, it’s important to mention the growing field of TUIs - terminal user interfaces. Users are slowly discovering the fun and efficient way to move through a terminal-based application, using Vim motions and native bindings, making everything quicker and better! Notable TUIs I’m using:

  • LazyGit (covered here)
  • K9s - for all my K8s visualization needs
  • LazyDocker (from the LazyGit author)
  • Zellij - essentially a multiplexer, but more funky with some killer features (covered here)

This pretty much sums it up. While there are MANY other tools and bindings I use, not to mention a split keyboard with macros and combos for better control (more on that is coming soon!), these are the basics. These are the tools I can’t live without, that shape the way I interact with the terminal, and through them, with other systems as well.

I hope you found it useful. Please reply with any feedback or questions.

Have a great weekend!

Whenever you’re ready, here’s how I can help you:

ESPRESSO FRIDAYS

Every once in a while I send hand picked things I've learned. Kind of like your filter to the tech internet. No spam, I promise!

Read more from ESPRESSO FRIDAYS

Hi friends, Tmux is a fantastic tool for managing terminal sessions, but it has its limitations. One major drawback is the lack of a floating pane feature, which can make navigating between different panes cumbersome and inefficient. Me frustrated with Tmux lack of floating panes while Zellij is killing it... Most users workaround this by creating new Tmux windows or panes, or by using hidden splits to zoom in and out. These methods work but can be inefficient and require many keystrokes,...

My Neovim takes roughly 113ms to fire up. THIS IS FAST. However, I don’t lazy load anything. Being a Lazy.nvim user, it’s kind of a shame I’m not actually making use of my plugin manager's flagship feature. But then again, it takes 113ms for nvim to start, what is there to gain here? Let’s say I drop it to 50ms. I gained 60ms which means that if I’m going to spend 30 minutes to actually reduce it, I’d have to open Neovim 15,929 times to get my time back 🤣. With an average of probably 5 times...

Hi Friends! Curious about Nix? Me too. The past few months of exploring it were quite interesting, to say the least. And it still feels like I've barely scratched the surface. [TL;DR] That said, it's already replacing some of my old workflows and I'm really happy discovering it, even while not even using Linux for most of my local work. What’s Nix? Nix is a powerful suite of tools, including a package manager (Nixpkgs), language (Nix DSL), and operating system (NixOS). It provides a robust...