How I Setup Terminal On My Mac To Make It Amazing


How I Setup Terminal On My Mac To Make It Amazing

I often get asked about my "terminal setup", and I try to throw tips but it's never enough.
This answer took a long time to compile but I'm glad to share it: A terminal setup from scratch (literal white screen terminal) to multiplexing, color output, auto-completion, history manager, fonts, nerd fonts etc etc etc...

I learned that the journey to a “perfect” terminal setup is a personal one, built from years of small, incremental improvements.
For me, it started with the realization that the default tools are holding me back.
The real magic isn’t in one single app, but in a combination of modern, fast, and intelligent utilities that work together to save you time and mental energy.
It’s about building a system where you’re not fighting the tools, but the tools are anticipating your next move.

To put these learnings into action, you don’t need to scrap everything and start over.
Begin with one small change that addresses a specific frustration (or an excitement 😉).
Each addition should make your workflow faster and more fluid.


The Problem with the Default Terminal

We start with a terminal that feels like it’s from another era.
It’s a plain, featureless black box.
Most people might install a slightly better terminal emulator and maybe a popular framework.
But this often doesn’t solve the core issue.
These popular frameworks can be bloated and slow, and people rarely customize them to fit their actual needs.
They’re still navigating directories by repeatedly typing:

cd ../../..

# feels familiar?

Smarter, Faster Way: The Modern Toolkit

My approach is built on a philosophy of speed and structured data.
I like to remove friction and I enjoy slick, easy tools that make sense in my daily workflow.

The Foundation: Emulator and Aesthetics

Before you even type a command, the underlying emulator you’re looking at matters.
A good terminal emulator is fast, configurable, and easy on the eyes.

  • Ghostty & WezTerm: These are modern, GPU-accelerated terminal emulators. They are incredibly fast and highly customizable through simple configuration files. I use both interchangeably.
  • Catppuccin: A soothing, pastel color scheme that has ports for over 430 applications.
    A consistent, beautiful theme reduces cognitive load and makes staring at the screen all day much more pleasant. I use it on Tmux, Neovim, Zellij, and pretty much anywhere that offers the option.
  • Font preference: JetBrains Mono.
    A free and open-source font designed specifically for developers.
    Its characters are clear, have increased height for readability, and include ligatures that combine common character pairs (like => or !=).

A Shell That Works for You

The shell is the engine of your terminal.
While most people stick with Bash or ZSH, there are more powerful, modern options available.
A word of warning (and naturally why most won't go down this route) - my shell isn't POSIX compliant. It can be a deal breaker, I 100$% understand why. Nevertheless, this is my choice:

  • Nushell: Unlike traditional shells that treat everything as text, Nushell treats command output as structured data (like tables).
    This lets you sort, filter, and query data from commands like ls or ps with simple, intuitive syntax, without needing complex tools like awk or jq.
    It’s a paradigm shift for the command line, and for those who use a lot of structured (or unstructured) data during their day.
  • VI Mode: This isn’t a tool, but a feature available in most shells (including Nushell, ZSH, and Bash). It lets you edit your command line using Vim’s powerful and efficient keyboard shortcuts. Instead of holding the arrow key to move back, you can jump words or to specific characters in an instant.
    This is a must-have for terminal productivity, especially if you're a Vim person.

Multiplexing!

A terminal multiplexer lets you create multiple panes and windows within a single terminal window, manage different sessions, and even detach from a session and reattach later from another computer.

  • TMUX: The tried-and-true terminal multiplexer. It’s incredibly powerful and scriptable.
    I use it with plugins managed by TPM (TMUX Plugin Manager) to enhance its functionality.
  • Zellij: A modern alternative to TMUX, written in Rust.
    Its key feature is being self-explanatory, with visible keybindings and a more user friendly OOTB experience.

Essential Utilities

These are the small tools that once integrated into your workflow, you can’t live without.

  • Starship: A sleek, fast, and highly customizable cross shell prompt.
    It replaces the basic $ prompt with useful, context aware information like your Git branch, status and other funky option, your Kubernetes context, or AWS profile. You can set features to show based on a variety of rules and it works FANTASTIC without slowing things down.
  • Carapace: An amazing CLI completion utility. It provides rich, colorful, and descriptive auto-completion for hundreds of commands, making it much easier to discover and use command options.
  • EZA: A modern replacement for the standard ls command. It adds colors, icons, a tree view, and better filtering, making directory listings far more informative.
    TBH, as a Nushell user, I don't have much eza use, but I still keep it around when I need trees, git status and permissions next to my files lists.
  • FZF: A general purpose, CLI fuzzy finder. It’s the engine behind many other tools. You can pipe any list into it to interactively search and select an item. It’s like Spotlight Search for your terminal.
  • zoxide: A smarter cd command. It remembers the directories you visit most frequently and lets you jump to them with just a few keystrokes, no matter where you are in the filesystem.
  • Atuin: A replacement for your shell history. It stores your command history in a local database, makes it searchable with a fuzzy finder, and can even sync it across your different machines. It ensures you never forget any command ever again.

This is a long list of tools and options we just went through, so I won't keep this any longer.
I am curious however if you found something useful, changed your mind, or would like to change mine?

Feel free to reply directly with any question or feedback.
Thank you for reading.

Have a great weekend!

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

Stop Renting SaaS. Build Your Own Cloud. This issue is brought to you by: Security, Performance, Simplicity. Pick Three. Twingate delivers an identity-based access for users, services, and AI agents that deploys in minutes, scales to every resource, and finally lets you retire your VPN. Try Twingate - it's FREE! -> Why pay cloud companies when you can just… not? I’ve recently started running my own services at home, because.. honestly? I’m tired of paying cloud providers for things I can run...

This Tool Replaced 7 CLIs (and killed my opensource) This issue is brought to you by: Depot: Build faster. Waste less time. Accelerate your Docker image builds and GitHub Actions workflows. Easily integrate with your existing CI provider and dev workflows to save hours of build time. Get started for free -> I’ve been in the terminal for 12 years. I don’t get surprised often. Then I found Television, and I was wrong about it before I even opened it. The friction of endless pipes ||| There’s a...

My Opencode Workflow As A Senior Engineer This issue is brought to you by: Descope: Drag & Drop Your Auth Your engineers are building at warp speed, so why should auth be left behind? Descope provides no / low code workflows that decouple auth, access control, and user management from your app’s codebase so your teams can focus on the core product. Signup and Get Started Now Everyone's trying to replace themselves. I'm just trying to ship faster. 11 months ago, Dario Amodei said "AI would be...