Themes¶
Roost ships with a small set of bundled color themes. Pick one with theme = NAME in config.conf. Themes control colors only; font choice stays on font_family / font_size.
The setting takes effect on the next launch (themes are not hot-reloaded today). Unknown names fall back to roost-dark with a warning logged at startup.
Bundled themes¶
| Name | Style |
|---|---|
roost-dark |
The default. Roost's built-in dark palette (cmux-derived). |
0x96f |
Muted dark with vivid accents. |
Atom |
The classic Atom editor palette. |
Atom One Dark |
Atom editor's familiar dark scheme. |
Ayu Mirage |
Ayu's muted mid-dark variant. |
Catppuccin Frappe |
Catppuccin's softer mid-dark flavor. |
Catppuccin Macchiato |
Catppuccin's deeper mid-dark flavor. |
Catppuccin Mocha |
Pastel dark; the darkest Catppuccin flavor. |
Dracula |
The original Dracula palette. |
Dracula+ |
Higher-contrast Dracula variant. |
Everforest Dark Hard |
Warm, low-saturation forest greens. |
GitHub Dark Default |
GitHub's current dark UI palette. |
Gruvbox Dark |
Warm retro palette, medium contrast. |
Gruvbox Dark Hard |
Warm, high-contrast retro palette. |
Kanagawa Wave |
Muted indigo/teal inspired by Hokusai. |
Material Ocean |
Very dark blue-black with soft Material accents. |
Monokai Pro |
Warm grey base; vibrant pink/green/yellow/purple. |
Monokai Remastered |
Near-black Monokai; high-contrast saturated accents. |
Nord |
Cool, desaturated arctic blues. |
One Half Dark |
The One Half dark scheme. |
Oxocarbon |
IBM Carbon dark; cool cyan/blue/magenta accents. |
Rose Pine |
Soft rosy mauves on deep base. |
Solarized Dark Patched |
Solarized Dark with the common ANSI patch. |
Synthwave |
Pure-black base with neon retro accents. |
TokyoNight |
Cool blues + softer accent colors. |
TokyoNight Storm |
TokyoNight on a slightly lighter base. |
Every theme other than roost-dark is a byte-identical copy of a file from Ghostty's bundled set. If you want a Ghostty theme that's not on this list, it usually parses cleanly in roost — see File format below. The bundled set is dark-only by design; light-background Ghostty themes still load if you add one, but they render a light terminal area inside Roost's dark window chrome.
File format¶
Theme files are plain key=value text with # comments — the same syntax as config.conf (and as Ghostty's themes). Roost starts from the built-in roost-dark palette and overlays whatever keys a file sets; any key a file omits keeps its roost-dark value. Nothing is required — a file with only palette lines is valid. Roost honors:
| Key | Effect |
|---|---|
background |
Default background color. |
foreground |
Default foreground color. |
palette = N=#RRGGBB |
One of the 16 ANSI colors (N in 0..15). Indices 16–255 are computed (xterm 6×6×6 cube + 24-step gray ramp). |
cursor-color |
Cursor block fill. |
bold-color |
Color for bold text drawn with the default foreground. Bold-with-explicit-color (e.g. bold red) is unaffected. |
selection-background |
Selection overlay color (rendered at 35% alpha). |
selection-foreground |
Parsed but currently unused (see Limitations). |
Any other key — including Ghostty's cursor-text, link-color, and palette-generate — is silently ignored. A theme file is typically ~22 lines.
Example (the bundled Dracula+):
palette = 0=#21222c
palette = 1=#ff5555
palette = 2=#50fa7b
# ... palette = 3..14 ...
palette = 15=#f8f8f2
background = #212121
foreground = #f8f8f2
cursor-color = #eceff4
cursor-text = #282828
selection-background = #f8f8f2
selection-foreground = #545454
Limitations¶
- No user override directory. Only the bundled themes are loadable. To use a theme that isn't bundled, add the file to the bundled set and rebuild (see below) — themes are embedded into the binary at compile time.
- No hot-reload. Theme is loaded once when each tab is created. To switch, edit
config.confand restart roost. selection-foregroundis parsed but not yet rendered. Roost's selection is currently a 35%-alpha overlay over the existing text; honoringselection-foregroundrequires switching to opaque selection + re-rendering glyphs, which is a render-order change tracked separately.- Indices 16–255 of the palette are not customizable — they're filled by the standard xterm formula. Bundled themes only set indices 0–15, matching every Ghostty theme.
Trying a Ghostty theme that isn't bundled¶
The format is identical, so you can add one to the bundled set. Themes
live in two byte-identical trees — the Rust crate (Linux UI) and the Mac
SwiftPM bundle — kept in sync by make themes-check:
# Run from your roost checkout. Copy into BOTH trees.
SRC="/Applications/Ghostty.app/Contents/Resources/ghostty/themes/Solarized Osaka Night"
cp "$SRC" crates/roost-linux/src/resources/themes/
cp "$SRC" mac/Sources/Roost/Resources/themes/
The Mac UI discovers themes by listing its bundle directory, so it picks
the new file up automatically. The Linux UI embeds them explicitly: add a
matching entry to the BUNDLED_THEMES array in
crates/roost-linux/src/theme.rs. Then rebuild (cargo build /
swift build) and set theme = Solarized Osaka Night in config.conf.
If the theme uses keys roost doesn't honor (e.g. palette-generate),
they're silently dropped — the rest still works.