TUI font & theme picker for Ghostty. Browse every font Ghostty sees with rendered specimens (code sample, ligatures, weights) drawn inline via the Kitty graphics protocol, preview all built-in themes, and apply either with one key — the config is written and Ghostty live-reloads instantly.
A full Ghosttype session with the font list, Fonts/Themes navigation, and the rendered specimen preview:
Terminals can't mix fonts in one screen, so comparing fonts normally means editing the config and reloading over and over. ghosttype renders real specimens of each font as images and shows them inline, then applies your pick and reloads Ghostty in place — no restart, no manual editing.
- macOS with Ghostty ≥ 1.2 (
ghosttyon PATH) - Bun ≥ 1.1
brew install sergio-prog/tap/ghosttype
ghosttypeor run from source:
git clone https://github.com/Sergio-prog/ghosttype
cd ghosttype
bun install
bun start| key | action |
|---|---|
↑ ↓ pgup pgdn |
navigate |
tab |
switch Fonts / Themes |
| type | filter list |
enter |
apply + live reload |
ctrl+r |
reload Ghostty config |
esc |
clear filter / quit |
- fonts come from
ghostty +list-fonts, themes from Ghostty'sthemesresource dirs (built-in +~/.config/ghostty/themes) - specimens are rendered to PNG with
@napi-rs/canvasusing the palette of your active theme, sized to the preview pane via a terminal cell-size query (CSI 16t), and displayed with the Kitty graphics protocol - applying edits
font-family/themein your Ghostty config, then sendsSIGUSR2to the Ghostty app process, which reloads the config in place
Before the first write of a session, your config is backed up to config.ghosttype-bak next to it. Only the font-family and theme lines are touched; everything else is preserved as-is.
- macOS only for now (font discovery, config path, and the reload signal are wired for the Ghostty macOS app; Linux PRs welcome — reload there is
systemctl reload --user app-com.mitchellh.ghostty.service) - nerd-font symbols may render as boxes inside specimens when the canvas fallback chain lacks them; the terminal itself is unaffected
Issues and PRs are welcome. Keep it small and focused; run bun run typecheck before submitting. Conventional commit messages, please.
