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!
Whenever you’re ready, here’s how I can help you:
|
|