Ghostty Light and Dark Themes: Automatic Switching and Theme Picks

Light and dark terminal panels connected by a theme-switching loop

Make Ghostty follow your system’s light and dark appearance with one setting. Find matching themes, preview them, and fix common configuration problems.

Ghostty is a terminal emulator for macOS and Linux. Its built-in theme pairing can follow your desktop appearance without a separate switching script. This guide checks the official documentation and the installed Ghostty 1.4.0 theme names and configuration syntax as of 2026-10-29. OS switching was not tested across desktop environments. (About Ghostty)

1. Start with one theme setting

Open Ghostty’s configuration, add this line, and save:

theme = light:Catppuccin Latte,dark:Catppuccin Frappe

Both light: and dark: are required for automatic pairing. Their order does not matter. The names select palettes; Ghostty chooses between them using the desktop’s light/dark preference. (Theme reference)

Then reload the configuration:

PlatformDefault Reload Config shortcut
macOSCmd+Shift+,
LinuxCtrl+Shift+,

Treat editing the file and changing system appearance as two separate events: reload after editing; once the pair is loaded, system appearance changes trigger the switch. Do not rely on saving the file alone to apply edits. (Configuration and reload)

On macOS, change Appearance in System Settings to test Light and Dark, then choose Auto if you want scheduled OS switching. On Linux, use your desktop’s light/dark preference; a custom GTK color theme alone may not change that preference. If nothing happens, work through section 6.

Ghostty documentation showing separate light and dark theme names and automatic switching

Captured public Ghostty documentation: the paired setting follows system appearance. (Source: Ghostty, captured 2026-10-29)

2. Edit the file Ghostty actually loads

On macOS, Cmd+, opens the configuration in the OS editor with the default binding. The current filename is config.ghostty; older config files are still supported.

LocationPath
macOS and Linux, standard XDG location~/.config/ghostty/config.ghostty
If XDG_CONFIG_HOME is set$XDG_CONFIG_HOME/ghostty/config.ghostty
Additional macOS location~/Library/Application Support/com.mitchellh.ghostty/config.ghostty

Avoid creating competing files. Legacy config files are also loaded, and on macOS the macOS-specific files load after the XDG files, overriding conflicting settings. The official file-location rules explain the order.

This tutorial covers the native macOS and Linux app. A %APPDATA% path is not a documented native Windows configuration location for that app.

If your shell cannot find ghostty on macOS, the standard app installation also exposes the CLI here:

/Applications/Ghostty.app/Contents/MacOS/ghostty +list-themes

Adjust that path if you installed the app elsewhere. The following examples assume ghostty is available in your shell.

3. Browse the themes installed on your machine

Run this inside Ghostty:

ghostty +list-themes

The interactive preview supports Up/Down to browse, / to search, F1 for help, and Esc to exit. Previewing does not by itself replace your paired setting. To keep an automatic pair, copy the two names into the configuration from section 1.

For a text list, or to filter light and dark candidates in Ghostty 1.4.0:

ghostty +list-themes --plain
ghostty +list-themes --color=light
ghostty +list-themes --color=dark

Piping the output also produces a text list. ghostty +list-themes --help documents the flags available in your version. The preview implementation describes its controls and filters.

Ghostty bundles hundreds of themes from iTerm2-Color-Schemes. Its online gallery is useful for browsing, while your installed list is the reliable source for names your version can load. (Built-in themes)

4. Theme pairs worth trying

These names are present in the installed Ghostty 1.4.0 resources. The descriptions are visual starting points, not rankings or promises of better readability.

LookLight themeDark theme
Soft pastel accentsCatppuccin LatteCatppuccin Frappe
Pastels with a deeper dark baseCatppuccin LatteCatppuccin Mocha
Muted rose and purpleRose Pine DawnRose Pine
Cool blue and purpleTokyoNight DayTokyoNight
Restrained cool tonesNord LightNord
Warm, earthy colorsGruvbox LightGruvbox Dark
Classic Solarized paletteiTerm2 Solarized LightiTerm2 Solarized Dark
Familiar GitHub stylingGitHub Light DefaultGitHub Dark Default

For example, replace the earlier line with:

theme = light:Rose Pine Dawn,dark:Rose Pine

Copy names exactly, including spaces and capitalization. Do not assume names from another terminal or editor are identical: Nord and TokyoNight are the names checked here.

The upstream previews below show the difference between the first pair’s dark and light palettes. They are captures of the upstream gallery’s terminal examples, not Ghostty application screenshots.

Catppuccin Frappe’s dark background and pastel terminal color palette in the upstream gallery

Catppuccin Frappe preview on the public upstream gallery. (Source: iTerm2-Color-Schemes, captured 2026-10-29)

Catppuccin Latte’s light background and darker terminal text in the upstream gallery

Catppuccin Latte preview on the same public gallery. Open either image for a larger view. (Source: iTerm2-Color-Schemes, captured 2026-10-29)

Before settling on a pair, check comments, error text, selection, and your actual shell prompt in both modes. Those are more useful checks than an attractive empty terminal.

5. Use custom themes without fragile paths

Create a user theme directory:

mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/ghostty/themes"

Save two complete Ghostty theme files there as my-light.ghostty and my-dark.ghostty. A practical starting point is a copy of a bundled theme, whose location you can find with:

ghostty +list-themes --plain --path

Edit the copies rather than the app’s resource files, which an update can replace. Reference the exact filenames:

theme = light:my-light.ghostty,dark:my-dark.ghostty

For files elsewhere, use real absolute paths. Replace /Users/yourname in this macOS example:

theme = light:/Users/yourname/themes/my-light.ghostty,dark:/Users/yourname/themes/my-dark.ghostty

Named lookup checks the user theme directory before bundled resources. Using names avoids relying on ~ expansion inside a theme value. Theme files use Ghostty configuration syntax and can affect more than colors; inspect downloaded files before using them. The official custom-theme guide lists the palette and selection fields.

6. Fix the common “it did not switch” cases

SymptomWhat to check
File edits have no effectSave, reload, and check for another configuration file overriding the value.
Theme cannot be foundCompare the exact filename/name against +list-themes; check that a custom file exists.
Background stays fixedLook for explicit background, foreground, or palette values in your main configuration. They override theme colors.
Window frame changes but terminal colors do notwindow-theme controls window appearance. Check the paired theme setting separately.
Linux desktop changes but Ghostty does notCheck the desktop’s light/dark preference, then test a simple built-in pair and an updated Ghostty version.
An editor or prompt keeps its old colorsThat program may use its own theme or explicit RGB colors. Configure it separately.

The theme and window options distinguish terminal colors from window styling. Validate an edited file before investigating further:

ghostty +validate-config --config-file="$HOME/.config/ghostty/config.ghostty"

Replace the path with the file you actually edited. With no --config-file, the command validates the default configuration locations instead.

7. Will Neovim, tmux, and the prompt follow too?

Ghostty changes the terminal palette and supports light/dark notifications. Each program still decides whether to use that palette or respond to the notification. A theme name in Ghostty does not install the matching editor theme.

For Neovim, check its terminal UI documentation and the selected colorscheme’s behavior. The background option tells Neovim which background type to target; it does not change Ghostty’s background. (Neovim option reference)

If a program follows appearance directly in Ghostty but stops doing so inside tmux, compare the same program outside tmux first. This isolates the extra layer before you change multiple configurations. For a broader setup walkthrough, see Ghostty with Claude Code and tmux.

Start with the built-in pair, reload, and verify both OS appearances. Add custom themes or editor synchronization only after that basic switch behaves as expected.