Starship + Ghostty: Turbocharge Your Mac Terminal Setup
Set up Starship + Ghostty on macOS in minutes: install Ghostty, apply a Starship preset, tune your prompt, and add zoxide & eza for a faster Mac terminal.
Updated Published 19 min read

This guide walks through setting up Starship and Ghostty on your Mac. Together they make a solid Mac terminal setup: a GPU-accelerated terminal plus a prompt that shows Git status, language versions, and command duration. I’ll start with a Ghostty config, apply a Starship preset (Tokyo Night or Catppuccin Powerline), tune the prompt with a few lines of TOML, then add practical tools like zoxide and eza. I’ll also show you how to edit your ~/.zshrc without accidentally duplicating init lines, how to fix the failures that actually happen, and how to undo the whole thing cleanly.
If you want a Ghostty-first overview covering features, the inspector, and multiplexer vs tmux, check out Ghostty Terminal: A Complete Setup Guide for Modern Mac Development.
If you are going beyond prompt tweaks and want a terminal layout built around AI coding agents, browser automation, and notifications, I also wrote a dedicated guide to cmux Terminal.
TL;DR: Quick setup (copy/paste)
This is the fastest Mac terminal setup path: three brew commands, two lines in your shell config, one preset. Run these, then follow the sections below for the “why” and the optional upgrades:
brew install --cask ghostty
brew install starship zoxide eza
brew install font-meslo-lg-nerd-fontAdd Starship and zoxide once to your ~/.zshrc:
open -e ~/.zshrcAdd:
eval "$(starship init zsh)"
eval "$(zoxide init zsh)"Pick a Starship preset:
mkdir -p ~/.config
starship preset tokyo-night -o ~/.config/starship.toml
# or:
# starship preset catppuccin-powerline -o ~/.config/starship.tomlIf a preset name errors out, run starship preset list to see the valid names for your installed Starship version. Names occasionally change between releases, and this is the most common failure in this whole guide.
Reload:
source ~/.zshrcVerify: open a new Ghostty tab. If you see a themed powerline prompt, you’re done. If icons render as boxes, jump to Step 2 for the font fix. For everything else, keep reading.
Prerequisites
What you need before starting:
- A Mac on macOS with Zsh as your shell (default since Catalina). Check with
echo $SHELL. - Homebrew installed. If not, the bootstrap command below takes about two minutes.
- Admin rights for the Homebrew install. macOS will prompt for Xcode Command Line Tools if they’re missing.
- Apple Silicon or Intel both work. The Homebrew install path differs (
/opt/homebrewvs/usr/local), which matters later in the troubleshooting section.
If Homebrew isn’t installed yet:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"Cost note: every tool in this guide is free and open source, runs locally, and costs $0/month. No server, no subscription.
Why Ghostty and Starship?
Ghostty is a terminal emulator written in Zig. It uses GPU acceleration, works natively on macOS, and has a straightforward config system. You can learn more at ghostty.org.
Starship works with Zsh (the default macOS shell since Catalina) and other shells. It draws the prompt: Git status, directory paths, programming language versions, command duration. Presets and configuration live at starship.rs.
The pieces stack like this:
Each layer only talks to its neighbors. Ghostty runs Zsh, Zsh calls Starship to render each prompt, and the plugins and tools hook into Zsh directly. That separation is why this setup survives upgrades well: you can swap the terminal or the prompt without touching the rest.
If you’re comparing terminals before committing, we also have a WezTerm setup on Mac with tmux and zoxide. And if you later decide you want Ghostty-style rendering plus vertical workspaces, agent notifications, and a built-in browser, have a look at cmux.
Step 1: Install Ghostty on your Mac
Install Ghostty using Homebrew (see Prerequisites if you don’t have it yet):
brew install --cask ghosttyThis installs Ghostty into your Applications folder.
Verify:
ghostty +versionYou want a version string. If you get command not found, the Homebrew bin directory isn’t on your PATH (covered in Troubleshooting below).
Launch Ghostty from Applications or type ghostty in your current terminal. GPU acceleration makes it noticeably faster than older terminals. For other installation methods, visit ghostty.org/download.
Step 2: Install a Nerd Font
Starship’s powerline arrows and file icons use glyphs that stock macOS fonts don’t ship. Meslo Nerd Font works well and has clear icons.
Install it via Homebrew:
brew install font-meslo-lg-nerd-fontCheck the font’s installation in Font Book by searching for “Meslo.” For other options, see nerdfonts.com.
Get the exact font family name right
The family name you put in Ghostty’s config must match what the font installed as. Run:
ghostty +list-fonts | grep -i mesloYou should see MesloLGS Nerd Font Mono in the output. A mismatched family string is the number one cause of broken icons later, so copy the name from this output exactly.
Step 3: Configure Ghostty
Create the config directory first (Ghostty won’t read a file that doesn’t exist):
mkdir -p ~/.config/ghostty
touch ~/.config/ghostty/config
open -e ~/.config/ghostty/configAdd this configuration:
font-family = MesloLGS Nerd Font Mono
font-size = 16
background-opacity = 0.85
theme = ArgonautThis sets MesloLGS Nerd Font Mono so powerline icons render cleanly, uses 16pt for readability, applies 85% background opacity, and selects the Argonaut theme. Two useful checks while you’re here:
ghostty +list-themes
ghostty +list-fontsThe first lists every theme name you can drop into the theme line. The second lists exact font family names.
Verify: press Cmd+Shift+, in Ghostty to reload the config without restarting. If something looks off, quit and reopen Ghostty; a full restart always applies the file.
Step 4: Install Starship
Starship adds contextual information to your prompt. Install it with Homebrew:
brew install starshipIntegrate Starship with Zsh by adding it to your ~/.zshrc.
Instead of blindly appending with echo ... >> (which creates duplicates when you run the command twice), open your config and add the init line once:
open -e ~/.zshrcAdd:
eval "$(starship init zsh)"Then reload:
source ~/.zshrcVerify:
starship --versionThe prompt also changes on reload, though it may look plain until you apply a preset in the next step. That’s expected. If you suspect you ran the init line more than once, check with grep -n starship ~/.zshrc and delete the extras. Duplicate init lines cause doubled prompts and a slower shell.
For other shells, see Starship’s installation guide.
Step 5: Apply a Starship preset
Presets are ready-made starship.toml files. Two popular options are Tokyo Night and Catppuccin Powerline. Browse all of them at starship.rs/presets.
Presets overwrite your config
Running a preset with -o ~/.config/starship.toml overwrites your current starship.toml. If you already customized it, back it up first:
cp ~/.config/starship.toml ~/.config/starship.toml.bakTokyo Night
A dark theme with purples and blues.
mkdir -p ~/.config
starship preset tokyo-night -o ~/.config/starship.tomlInspect what it wrote:
open -e ~/.config/starship.tomlCatppuccin Powerline
A softer, pastel color scheme with a powerline-style prompt.
mkdir -p ~/.config
starship preset catppuccin-powerline -o ~/.config/starship.tomlReload your shell with source ~/.zshrc to apply it.
If the preset command errors with an unknown name, run starship preset list for the valid names on your installed Starship version, then re-run the command with the corrected name.
Verify: your prompt should now show angled powerline segments with Git and directory info. If icons render as boxes instead, that’s a font problem, not a Starship problem. Go back to Step 2.
Step 6: Tweak your Starship config (starship.toml)
Presets are a good start, but a couple of changes usually make the prompt more practical: shorter paths, optional timestamps, and command duration for slow commands.
Open the config file:
open -e ~/.config/starship.tomlPaste these additions at the end. They work with both Tokyo Night and Catppuccin.
Recommended baseline tweaks
# Keep the prompt responsive if anything external is slow
command_timeout = 1000
[directory]
truncation_length = 3
truncate_to_repo = true
[cmd_duration]
min_time = 500
format = "took [$duration]($style) "
style = "yellow bold"Reload:
source ~/.zshrcWhat these do: command_timeout stops a slow module from hanging your prompt, truncation_length keeps deep paths to the last three directories, and cmd_duration shows how long any command over half a second took.
Optional: show time (useful in SSH sessions)
[time]
disabled = false
format = "[$time]($style) "
time_format = "%R"Optional: show battery (laptops)
[battery]
disabled = falseOptional: Git status styling
If you want clearer Git signals:
[git_status]
style = "bold purple"Optional: language versions
Enable Node.js when doing Node work:
[nodejs]
disabled = falseFor the full list of modules and options, see Starship’s configuration documentation. Add modules one at a time to keep the prompt fast and readable.
When the prompt feels slow
Starship ships two diagnostic commands worth knowing:
starship timings
starship explainstarship timings shows how many milliseconds each module costs. starship explain shows what’s currently rendered and why. If one module dominates, disable it with a [module] section set to disabled = true, keep command_timeout set, and re-run starship timings to confirm.
Step 7: Install zoxide
zoxide learns your most frequently used directories and lets you jump to them with z instead of cd.
Install it:
brew install zoxideAdd it to your ~/.zshrc (open and edit, same rule as Starship: once, not appended):
open -e ~/.zshrcAdd:
eval "$(zoxide init zsh)"Reload:
source ~/.zshrcUse z instead of cd. For example, z proj jumps to your ~/Projects directory if you use it often. Zoxide ranks directories by frequency and recency, so it gets better the more you use it. For flags, shell init details, and advanced usage, see the complete Zoxide guide.
Step 8: Replace ls with eza
Note: eza is the modern replacement for ls (what people mean when they reference “exa” in older tutorials).
Swap the default ls command for eza to get colorized listings with file-type icons.
Install it:
brew install ezaAdd aliases to your ~/.zshrc (add these once, don’t repeatedly append them):
open -e ~/.zshrcAdd:
alias ls="eza --icons"
alias ll="eza -l --icons"
alias la="eza -la --icons"Reload:
source ~/.zshrcThese aliases:
ls: Lists files with icons for file typesll: Shows a detailed list with iconsla: Includes hidden files in the detailed list
Explore eza’s features at eza’s website.
Step 9: Add custom aliases
Aliases are worth adding for anything you type several times a day. These live in your ~/.zshrc.
Add these to ~/.zshrc:
# Quick edit configuration files
alias editstarship="vim ~/.config/starship.toml"
alias editghost="vim ~/.config/ghostty/config"
# Git shortcuts
alias gs="git status"
alias ga="git add"
alias gc="git commit -m"
alias gp="git push"
# Quick directory navigation
alias dev="cd ~/Development"
alias docs="cd ~/Documents"Apply:
source ~/.zshrcThese aliases:
- Let you quickly edit Starship and Ghostty configs (
editstarship,editghost) - Simplify Git commands (
gs,ga,gc,gp) - Provide fast navigation to common directories (
dev,docs)
Step 10: Add zsh-autosuggestions and zsh-syntax-highlighting
Add zsh-autosuggestions and zsh-syntax-highlighting for better command input and error detection.
Install:
brew install zsh-autosuggestions zsh-syntax-highlightingAdd to your ~/.zshrc (place syntax-highlighting near the end of the file, after other plugins, so it can color the suggestions too):
open -e ~/.zshrcAdd:
source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
source $(brew --prefix)/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zshReload:
source ~/.zshrc- zsh-autosuggestions: Suggests commands based on your history (gray text). Accept with the right arrow key.
- zsh-syntax-highlighting: Highlights valid commands in green and invalid ones in red, catching errors before execution.
For detailed setup, see Enable Command Autocomplete in Zsh and Enable Syntax Highlighting in Zsh. Want more? See our roundup of the best Oh My Zsh plugins.
Troubleshooting: common failure modes
These are the failures that actually come up with this stack, in the order you’re likely to hit them.
‘xterm-ghostty’: unknown terminal type
Some tools, mostly on remote servers, don’t recognize Ghostty’s terminal type. Fix it for the current session:
export TERM=xterm-256colorFor a permanent solution, set this only for SSH so you don’t change behavior locally.
Set TERM for SSH only
Don’t export TERM=xterm-256color globally. You’d downgrade your local Ghostty features to match old servers. The SSH_CONNECTION guard below only applies the fix where it’s needed.
Add to your ~/.zshrc:
# Some servers don't know about Ghostty's TERM entry
if [[ -n "$SSH_CONNECTION" ]]; then
export TERM=xterm-256color
fiReload:
source ~/.zshrcDuplicated prompt or a slow shell
Symptom: the prompt renders twice, or every keystroke lags. Cause: multiple eval init lines, usually from re-running setup commands with >>.
Check:
grep -nE "starship|zoxide" ~/.zshrcFix: keep exactly one eval "$(starship init zsh)" and one eval "$(zoxide init zsh)", delete the rest, then source ~/.zshrc.
command not found: starship (or zoxide, or eza)
Cause: Homebrew’s bin directory isn’t on your PATH. Common on Apple Silicon, where Homebrew lives under /opt/homebrew.
Check:
which brewIf that prints nothing or points somewhere unexpected, make sure your ~/.zshrc contains:
eval "$(/opt/homebrew/bin/brew shellenv)"Intel Macs use /usr/local/bin/brew shellenv instead. This line must sit above the Starship and zoxide eval lines in the file.
Boxes instead of icons
Cause: the font-family string in your Ghostty config doesn’t match the installed font name.
Fix: run ghostty +list-fonts | grep -i meslo, copy the exact family name into font-family, then reload with Cmd+Shift+,. MesloLGS Nerd Font and MesloLGS Nerd Font Mono are both valid but different families; either works, as long as the string matches.
Preset command errors or your prompt looks default
Two causes. First, a preset name your Starship version doesn’t know: run starship preset list and use a name from that output. Second, the config file was never written: check with ls -la ~/.config/starship.toml. If it’s missing, re-run the preset command from Step 5. If the file exists but nothing changes, confirm eval "$(starship init zsh)" appears exactly once in ~/.zshrc.
Rollback: undo the whole setup
Nothing here is a one-way door. Tear it down in reverse order:
- Remove the shell init lines. Open
~/.zshrcand delete theevallines for Starship and zoxide, the pluginsourcelines, and any aliases you added:
open -e ~/.zshrc- Delete the config files:
rm ~/.config/starship.toml
rm -rf ~/.config/ghosttyIf you made the backup in Step 5, keep starship.toml.bak.
- Uninstall the packages. Ghostty and the font are casks, the rest are formulae, so two commands:
brew uninstall --cask ghostty font-meslo-lg-nerd-font
brew uninstall starship zoxide eza zsh-autosuggestions zsh-syntax-highlightingOne note: zoxide’s directory database lives at ~/.local/share/zoxide and survives uninstall. Leave it if you might come back, or delete it for a fully clean slate.
Verify: open a new terminal window. You should see the default macOS prompt and a clean startup with no errors.
FAQ
Starship vs Powerlevel10k: which should you use?
Starship works across multiple shells and machines with minimal setup. Powerlevel10k is great if you’re using only Zsh and want deep Zsh-native customization.
Do you still need tmux if Ghostty has multiplexing?
For local workflows, Ghostty’s built-in multiplexing works well. Tmux is still useful if you need to detach/attach remote sessions, run long jobs on servers, or need a mature ecosystem and portability. If you decide you still want tmux, our guide to installing tmux on macOS covers the basics.
My prompt icons look broken. What's wrong?
Check the font. Make sure Ghostty is set to a Nerd Font (like MesloLGS Nerd Font Mono) and restart the terminal. The exact family string matters: verify it with ghostty +list-fonts | grep -i meslo.
Why do some remote servers show 'unknown terminal type'?
Some environments don’t ship Ghostty’s terminfo entry. Setting TERM=xterm-256color for SSH sessions fixes this.
How do I keep Ghostty and Starship updated?
Run brew upgrade for the CLI tools and brew upgrade --cask --greedy for casks like Ghostty and the Nerd Font. Ghostty can also auto-update itself on macOS. After a major Starship upgrade, re-run starship preset list: preset names occasionally change between releases.
Conclusion
Your Mac terminal now has Ghostty and Starship, a Starship preset you like, minimal tweaks, and practical tools like zoxide, eza, and sensible aliases. Total cost: $0/month, all local.
Next steps:
- Explore Ghostty capabilities (themes, inspector, shaders) in Ghostty Terminal: A Complete Setup Guide for Modern Mac Development
- Keep your Starship config lean by adding modules only when you need them
- Browse Starship’s preset gallery when you want a different look
If you’re interested in using Starship with Fish Shell instead of Zsh, I have a dedicated guide: How to set up Starship prompt with Fish Shell. Also see Fish Shell vs Zsh if you’re considering switching shells.
And if you record your terminal for tutorials or demos, I use Screen Studio for polished macOS screen recordings.
Read the full Ghostty guide

