tools

Themes

Switch between 44 builtin terminal themes with live preview, or build custom JSON themes that hot-reload as you edit, plus transparency and opacity controls.

Copy & share

Loading sections…

Connect MCP or install the Empryo skill

Section exports contain only that heading’s content. Markdown and text links fetch the selected content directly, without the rest of the page.

Quick start

Press /theme or Ctrl+K → search "theme" to open the theme picker. Themes preview live as you navigate.

Default: proxysoul-undertow

Out of the box Empryo wears ProxySoul Undertow on every surface. Pick system to follow the OS appearance instead — it resolves to proxysoul-undertow on a dark system and proxysoul-undertow-light on a light one, across every surface (TUI and desktop). Appearance is detected from the terminal's actual background (OSC 11 query, COLORFGBG) first, then the OS preference (macOS appearance, Windows app theme, GNOME color-scheme). Force it with EMPRYO_APPEARANCE=dark or EMPRYO_APPEARANCE=light. Picking any concrete theme opts out.

Builtin themes

Dark

ThemeDescription
proxysoul-undertowProxySoul Undertow — monochrome night tide, sea-glass & dusty rose (the default)
proxysoul-mainProxySoul — deep violet night with a hot-pink pulse
proxysoul-coffeeProxySoul Coffee — warm umber, amber & burnt orange
proxysoul-waterProxySoul Water — blue-black, cyan & teal
proxysoul-crimsonProxySoul Crimson — plum-black lit by a crimson glow
proxysoul-empryoEmpryo brand theme (formerly proxy-empryo — the old id still works)
solarized-darkEthan Schoonover's classic
catppuccinCatppuccin Mocha
catppuccin-frappeCatppuccin Frappe
catppuccin-macchiatoCatppuccin Macchiato
gruvbox-darkRetro groove
tokyo-nightTokyo Night
tokyonight-stormTokyo Night Storm
draculaDracula
nordArctic, north-bluish
one-darkAtom One Dark
rose-pineAll natural pine
kanagawaInspired by Katsushika Hokusai
github-darkGitHub Dark
everforest-darkComfortable green
ayu-darkAyu Dark
nightfoxNightfox
cyberdreamCyberdream
oxocarbonOxocarbon
sonokaiSonokai
moonflyMoonfly
melangeMelange
solarized-osakaSolarized Osaka
bambooBamboo
nordicNordic
synthwaveSynthwave
icebergIceberg
emberEmber
vesperVesper

Light

ThemeDescription
proxysoul-undertow-lightUndertow Light — overcast noon tide: slate, sea-glass & rose (system on a light OS)
proxysoul-main-lightProxySoul Light — lilac paper with violet & pink ink
proxysoul-coffee-lightCoffee Light — cream paper, espresso & amber ink
proxysoul-water-lightWater Light — sea-fog paper, deep teal ink
proxysoul-crimson-lightCrimson Light — blush paper lit by a wine-red glow
proxysoul-empryo-lightEmpryo Light — paper white, forest-green ink
catppuccin-latteCatppuccin Latte
one-lightAtom One Light
github-lightGitHub Light

The retired ids dark, light, pastel-dusk and pastel-dawn still resolve — to the Undertow pair — so a saved config keeps working.

Config

Theme is saved globally in ~/.empryo/config.json:

{
  "theme": {
    "name": "catppuccin",
    "transparent": true,
    "userMessageOpacity": 70,
    "diffOpacity": 30,
    "borderStrength": "strong"
  }
}
FieldDescription
nameTheme ID (builtin or custom)
transparentMake background transparent (terminal background bleed-through)
userMessageOpacityUser message background opacity when transparent: 0 (clear), 30 (dim), 70 (subtle), 100 (solid)
diffOpacityDiff background opacity when transparent: 0 (clear), 30 (dim), 70 (subtle), 100 (solid)
borderStrengthBorder visibility: "default", "strong", or "op"

Theme picker controls

KeyAction
/ Navigate themes (live preview)
EnterApply selected theme
TabToggle transparent mode
MCycle message background opacity
DCycle diff background opacity
BCycle border strength

Custom themes

Create your own theme by adding a JSON file to ~/.empryo/themes/:

mkdir -p ~/.empryo/themes

Example

~/.empryo/themes/my-theme.json:

{
  "_extends": "dark",
  "_label": "My Theme",
  "_description": "A custom dark theme",
  "_variant": "dark",
  "brand": "#ff6600",
  "brand-secondary": "#ff0040",
  "bg-primary": "#1a1a2e",
  "bg-elevated": "#16213e",
  "text-primary": "#e0e0e0",
  "success": "#00ff88",
  "error": "#ff4444"
}

The file name (minus .json) becomes the theme ID.

Metadata fields

FieldDescription
_extendsInherit from a builtin theme (default: dark, i.e. proxysoul-undertow). Only override the tokens you want to change.
_labelDisplay name in the theme picker
_descriptionDescription shown in the picker
_variant"dark" or "light" - controls the indicator in the picker

Token reference

Tokens use kebab-case in JSON files (auto-converted to camelCase internally):

  • Brand: brand, brand-secondary, brand-dim, brand-alt
  • Text: text-primary, text-secondary, text-muted, text-dim, text-faint, text-subtle
  • Backgrounds: bg-app, bg-primary, bg-secondary, bg-elevated, bg-popup, bg-popup-highlight, bg-overlay, bg-input, bg-banner, bg-banner-error, bg-user
  • Borders: border, border-focused, border-active, border-slash
  • Status: success, error, warning, info, amber
  • Diff: diff-added-bg, diff-removed-bg, diff-added-sign, diff-removed-sign
  • Accents: accent-user, accent-assistant, accent-system

Legacy format

You can also define multiple themes in ~/.empryo/themes.json:

{
  "my-theme": {
    "_extends": "dark",
    "brand": "#ff6600"
  },
  "another-theme": {
    "_extends": "light",
    "brand": "#0066ff"
  }
}

Hot reload

Theme files are watched for changes. Edit a custom theme file and the UI updates instantly - no restart needed.

Documentation