English

Themes

gori ships twenty-six built-in colour themes: goridark (the default), goriday, latte, espresso, tokyonight, gruvbox, nord, dracula, solarized_light, rosepine_dawn, catppuccin_mocha, monokai, everforest, onedark, kanagawa, github_dark, zenburn, synthwave84, cyberpunk, matrix, cobalt2, high_contrast, github_light, gruvbox_light, one_light, and ayu_light.

Switching Themes

Open Preferences with Ctrl-, (or the βš™ chip in the top bar), go to Appearance, and press ↡ on the Theme row. The row previews the current theme inline: its name and a small swatch of its palette. Ctrl-P β†’ settings:theme opens the same picker in one step.

The picker is a vertical, scrollable list; each row shows a small swatch of the theme's own palette, and selecting a row previews it live. Enter applies and persists the choice, Esc reverts.

Ctrl-, works in the project picker too, so you can set your theme on first launch before opening a project. Theme is the only section editable there; the rest need a project open.

The same History view across four of the built-ins:

Custom Themes

You can add your own themes as JSON files, dropped into:

~/.gori/themes/<name>.json

(~/.gori is the gori home directory; override it with $GORI_HOME.) The file name is the theme name. ocean.json becomes the theme ocean. Custom themes appear in the picker after the built-ins, in file-name order. gori loads them at startup and again each time you open the theme picker, so you can drop a file in and reopen it without restarting.

Format

A theme is a JSON object mapping palette fields to #rrggbb hex colours. Use the optional "base" key to inherit every colour you don't override from a built-in theme, so a theme can be as small as one accent tweak:

{
  "base": "goridark",
  "accent": "#ff33cc",
  "syn_header": "#33ccff"
}

Without "base", the default (goridark) supplies any omitted colour.

A Full Theme

Every field, all inheriting from base when omitted:

{
  "base": "goridark",

  "bg":            "#0a0a0b",
  "panel":         "#141417",
  "elevated":      "#1b1b1f",
  "border":        "#2a2a30",
  "border_focus":  "#3a3a42",
  "focus_gold":    "#c2a05a",
  "accent":        "#fafafa",
  "accent_bg":     "#26262c",
  "selection_dim": "#19191c",
  "text":          "#c8c8cc",
  "text_bright":   "#fafafa",
  "muted":         "#6e6e76",
  "green":         "#52c77a",
  "yellow":        "#d6a13a",
  "red":           "#e5534b",
  "orange":        "#d9813f",
  "syn_header":    "#82a8c4",
  "syn_string":    "#8fb87a",
  "syn_number":    "#ca9b6a",
  "syn_literal":   "#b08ec2"
}
Field Used For
bg The canvas (main background)
panel Top bar, status bar, overlays
elevated Header bands, active segments
border Resting hairline dividers
border_focus The outline of an active modal card
focus_gold The focused body pane's outline
accent The highlight colour (selection marker, emphasis)
accent_bg The selection band in the focused pane
selection_dim The selection band in an unfocused pane
text Body text
text_bright Emphasised / active text
muted Secondary / dimmed text
green 2xx status
yellow 4xx status
red 5xx status / errors
orange Accent for warnings
syn_header Header/field names, JSON keys, tag names
syn_string Quoted strings
syn_number Numbers, tag attribute names
syn_literal true / false / null

Notes

Next Steps