ports · Terminals
SP Night for Ghostty
The full 16-colour ANSI mapping, plus cursor, selection and split dividers.
the repository ↗ Ghostty ↗ ghostty.tmpl ↗
Preview
All three are dark, by decision. The previews below are synthetic — drawn from the palette itself, so they can never drift from what you install.
Install
~/.config/ghostty/themes/sp_night_noite ~/.config/ghostty/themes/sp_night_garoa ~/.config/ghostty/themes/sp_night_jaragua theme = sp_night_noite theme = sp_night_garoa theme = sp_night_jaragua Those are the paths for the flavour selected in the header — switch it and they follow.
Ghostty resolves theme = <name> against ~/.config/ghostty/themes/ by exact
file name — which is why the theme files deliberately have no extension.
Grab the flavour you want (or all three):
mkdir -p ~/.config/ghostty/themes
curl -Lo ~/.config/ghostty/themes/sp_night_noite \
https://raw.githubusercontent.com/sp-night/ghostty/main/themes/sp_night_noite Then enable it in ~/.config/ghostty/config:
theme = sp_night_noite Reload the configuration (ctrl+shift+, on Linux, cmd+shift+, on macOS) or
open a new window.
Prefer a checkout? Clone and copy — the files are plain text, there is no build:
git clone https://github.com/sp-night/ghostty.git
cp ghostty/themes/* ~/.config/ghostty/themes/ What gets themed
| Ghostty key | role | what it is |
|---|---|---|
palette = 0…15 | ansi.* | the full 16-colour ANSI mapping |
background / foreground | ui.bg / ui.fg | laje under the main text |
cursor-color / cursor-text | ui.cursor / ui.on_accent | the sódio cursor, dark text inside it |
selection-background / -foreground | ui.selection / ui.fg | vidro, glass reflecting the street |
split-divider-color | ui.border | fiação, overhead wiring cutting the sky |
unfocused-split-fill | ui.bg_deep | vão, the deepest recess |
ghostty.tmpl is the full record of which ghostty key means which
role — the table above in complete form. The files in
themes/ are what it resolves to, one per flavour.
You never need it to use the theme: the shipped files are plain text and final.
It is here so the mapping survives, and so a retuned palette can be rolled
through this port without anyone re-deciding what cursor-color means.
Where the colours come from
No hex in this repo was picked by hand. Every value comes from the
SP Night palette through its role layer,
both published as data:
palette.json and
roles.json. The contrast floors those
colours have to clear are written down in the spec
and enforced in CI.