Calm slate. Living color.
Living Code for Gemini CLI: standalone custom theme files for conversational text, borders, status indicators and diff backgrounds.
|
Night Dark · full palette
|
Frost Dark · softer chroma
|
|
Paper Light · near-white slate
|
Signal Dark · teal accent
|
Select any preview to view the image at full size.
flavor=night # night, frost, paper, or signal
curl -fsSL --create-dirs -o "$HOME/.gemini/themes/living-code-$flavor.json" "https://raw.githubusercontent.com/living-code-theme/gemini-cli/main/themes/living-code-$flavor.json"
printf "%s\n" "$HOME/.gemini/themes/living-code-$flavor.json"Copy the printed absolute path into ui.theme in your existing ~/.gemini/settings.json, preserving other settings. For example:
{
"ui": {
"theme": "/home/you/.gemini/themes/living-code-night.json"
}
}Replace /home/you with your home directory and restart Gemini CLI. The theme file must stay inside your home directory.
Expand a flavor for its full-size preview and activation instructions.
Night · Dark · full palette
Set ui.theme to the absolute path of ~/.gemini/themes/living-code-night.json in your settings, then restart Gemini CLI.
Frost · Dark · softer chroma
Set ui.theme to the absolute path of ~/.gemini/themes/living-code-frost.json in your settings, then restart Gemini CLI.
Paper · Light · near-white slate
Set ui.theme to the absolute path of ~/.gemini/themes/living-code-paper.json in your settings, then restart Gemini CLI.
Signal · Dark · teal accent
Set ui.theme to the absolute path of ~/.gemini/themes/living-code-signal.json in your settings, then restart Gemini CLI.
The distributable files are standalone type: "custom" theme documents, not full settings files. As an alternative, insert a document into ui.customThemes using its name as the object key, then select it by name. A path selected through ui.theme must be removed before changing themes with /theme.
Uses the documented standalone-file custom theme API. Gemini CLI permits theme paths only within the home directory: do not point it at a clone under /tmp or a system-wide location. Text, background, diff, border, status and UI groups are provided; code highlighting follows Gemini CLI’s derived theme behavior. Tests validate the nested format, not provider access or model output.
Syntax limitation (Gemini CLI 0.47.0): custom themes derive highlight.js colors from shared UI accents. Keywords/literals share an accent, numbers/classes share another, and function titles/parameters use the main foreground; independent syntax-role overrides are not supported. These couplings cannot reproduce Neovim’s separate keyword, constant, number, type, function and parameter roles. Exact parity needs an upstream syntax-theme API; screenshots retain Gemini CLI’s genuine native rendering.
Previews are captured programmatically from the actual application in an isolated profile. See capture/app.py for the app-owned recipe and images/capture.json for runtime, palette and image provenance. No mock interface is drawn. The conversation is a labeled, repository-owned local demo, not a private session or a live model response. Recapturing needs no account, subscription or paid API call.
Found a problem? Open an issue with the app version, the flavor and a screenshot. Want Living Code somewhere else? Request a port.
Pull requests are welcome. Keep this README, port.json and images/ in sync, and use real screenshots of the app, never mockups.
🦎 One chameleon, many habitats. Part of Living Code.



