Back to blog

February 22, 2026

The Perfect Terminal: Fish, Starship & Snazzy on macOS, Linux, and Windows

How I set up Fish shell, Starship prompt, and the Snazzy colour scheme in Ghostty on macOS, GNOME Terminal on Fedora, and Windows Terminal — so every machine feels like home.

terminalfishstarshipsnazzyghosttywindows-terminalfedora

I spend most of my day in a terminal. Across three operating systems — macOS, Fedora Linux, and Windows WSL Debian — I've settled on a setup that looks identical everywhere: Fish shell, Starship prompt, and the Snazzy colour scheme. This post walks through how to get there on each platform.


Why Snazzy?

Snazzy is a terminal theme by Sindre Sorhus, originally for Hyper. Its palette is bold but not distracting — a dark near-black background (#282a36), soft white foreground, and accent colours that pop just enough: magenta (#ff6ac1), green (#5af78e), yellow (#f3f99d), and cyan (#9aedfe).

It's been my daily driver for years, and it's the palette this very site is built on.


macOS — Ghostty + Fish + Starship

Ghostty is the terminal emulator I use on macOS and Linux. It's fast, native, and supports themes out of the box.

Install Ghostty

Download the latest release from ghostty.org and move it to /Applications. Then open it once to allow macOS to trust the binary.

Apply Snazzy theme

Ghostty ships Snazzy as a built-in theme. Add this to ~/.config/ghostty/config:

theme = Snazzy
font-family = JetBrains Mono
font-size = 13

Install Fish

brew install fish

Set it as your default shell:

echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/fish

Install Starship

brew install starship

Add to ~/.config/fish/config.fish:

starship init fish | source

Restart Ghostty. You'll have a clean, instant prompt that adapts to every project type.


Linux (Fedora) — GNOME Terminal + Fish + Starship

On Fedora, I use GNOME Terminal with a manually applied Snazzy palette.

Apply Snazzy to GNOME Terminal

Install gogh, the terminal colour scheme installer:

bash -c "$(wget -qO- https://git.io/vQgMr)"

Search for Snazzy in the list and select it. Alternatively, set the colours manually via Preferences → Profile → Colours:

RoleHex
Background#282a36
Foreground#eff0eb
Black#282a36
Red#ff5c57
Green#5af78e
Yellow#f3f99d
Blue#57c7ff
Magenta#ff6ac1
Cyan#9aedfe
White#f1f1f0

Install Fish on Fedora

sudo dnf install fish
chsh -s /usr/bin/fish

Install Starship on Fedora

curl -sS https://starship.rs/install.sh | sh

Add to ~/.config/fish/config.fish:

starship init fish | source

Windows — Windows Terminal + Fish (WSL2) + Starship

On Windows I run Fish inside WSL2 (Ubuntu or Fedora). Windows Terminal handles the colours.

Apply Snazzy to Windows Terminal

Open Windows Terminal settings (Ctrl+,), go to Open JSON file, and add this to the schemes array:

{
  "name": "Snazzy",
  "background": "#282A36",
  "foreground": "#EFF0EB",
  "black": "#282A36",
  "red": "#FF5C57",
  "green": "#5AF78E",
  "yellow": "#F3F99D",
  "blue": "#57C7FF",
  "purple": "#FF6AC1",
  "cyan": "#9AEDFE",
  "white": "#F1F1F0",
  "brightBlack": "#686868",
  "brightRed": "#FF5C57",
  "brightGreen": "#5AF78E",
  "brightYellow": "#F3F99D",
  "brightBlue": "#57C7FF",
  "brightPurple": "#FF6AC1",
  "brightCyan": "#9AEDFE",
  "brightWhite": "#F1F1F0",
  "cursorColor": "#97979B",
  "selectionBackground": "#3E404A"
}

Then in your WSL2 profile, set "colorScheme": "Snazzy".

Install Fish inside WSL2

sudo apt install fish   # Ubuntu
# or
sudo dnf install fish   # Fedora Remix
chsh -s /usr/bin/fish

Install Starship inside WSL2

curl -sS https://starship.rs/install.sh | sh

Add to ~/.config/fish/config.fish:

starship init fish | source

Shared Starship config

I keep a single ~/.config/starship.toml synced across machines (via a dotfiles repo). Here's the core of it — minimal, Snazzy-coloured:

format = """
$directory\
$git_branch\
$git_status\
$cmd_duration\
$line_break\
$character"""

[directory]
style = "bold #ff6ac1"
truncation_length = 3
truncate_to_repo = true

[git_branch]
symbol = " "
style = "#5af78e"
format = "on [$symbol$branch]($style) "

[git_status]
style = "#f3f99d"
format = "([$all_status$ahead_behind]($style) )"

[character]
success_symbol = "[❯](bold #5af78e)"
error_symbol = "[❯](bold #ff5c57)"

[cmd_duration]
min_time = 2_000
format = "took [$duration](#9aedfe) "

The colours map directly to the Snazzy palette — prompt character in green, branch in green, git status in yellow, directory in magenta.


End result

Every terminal I open, on any machine, greets me with the same dark background, the same colours, the same prompt shape. It's a small thing, but consistency across environments genuinely reduces cognitive load.

If you're not already version-controlling your dotfiles, this is the perfect excuse to start. I use a bare git repo — one git clone and a handful of symlinks, and a new machine is home in minutes.