TUI theme JSON
Themes are JSON documents — no colors are hard-coded in the binary. Built-in themes ship as themes/*.json (installed to share/arbiter/themes/; copied to ~/.arbiter/themes/ on arbiter --init). Your config file is ~/.arbiter/tui.json; custom theme documents live in ~/.arbiter/themes/.
Quick start
Pick a built-in preset:
{
"preset": "nord"
}
Or point at a theme file:
{
"theme_file": "themes/mine.json"
}
Paths in theme_file are relative to ~/.arbiter/ unless absolute (or ~/…).
Create a custom theme
- Export a built-in preset as a starting point:
arbiter --export-theme onedark > ~/.arbiter/themes/mine.json
- Edit colors (
#RRGGBBhex). For a variant of an existing theme, add"preset": "nord"and only the keys you want to change; for a standalone theme, export a full file and edit it directly.
- Activate it:
{
"theme_file": "themes/mine.json"
}
Or name the file mine.json and use /theme mine / "preset": "mine" (user themes in ~/.arbiter/themes/).
arbiter --init copies all built-in theme JSON files into ~/.arbiter/themes/ (skipping files you already edited) and writes example.json as an editable copy of the default.
In-session commands
| Command | Effect |
|---|---|
/theme | Browse themes with ↑↓ live preview; Enter selects, Esc cancels. |
/theme list | Built-in presets + custom themes in ~/.arbiter/themes/ |
/theme <name> | Switch preset or custom theme; updates tui.json |
/theme save <name> | Write the current look to ~/.arbiter/themes/<name>.json |
/theme file <path> | Load a JSON file and set theme_file in tui.json |
JSON schema
Top-level keys:
| Key | Purpose |
|---|---|
preset | Built-in preset name, or basename of themes/<name>.json |
theme_file | Path to a theme JSON file (relative to ~/.arbiter/) |
bg | Pane backgrounds: base, panel, header, scroll, status, input, footer, gutter |
text | primary, muted, subtle, inverse |
accent | primary, secondary, success, warning, error, info |
border | subtle, focus, gutter, plus optional vertical / horizontal strings |
content | Markdown/scrollback: heading (array of 4), code, link, diff colors, syntax tokens, panel surfaces (code_bg, code_header_bg, code_gutter, diff_bg_*, system_fg), agent_palette (array of 12), … |
layout | Padding, column breakpoints, vertical rhythm (block_gap, panel_gap, prose_paragraph_gap), chrome density (chrome_compact_rows, scroll_pad_y, scroll_gutter_cols), show_footer, show_history_sidebar, mouse, … |
component | Prompt/footer strings |
Example partial override on a preset (in tui.json or a theme file):
{
"preset": "onedark",
"accent": { "primary": "#c678dd" },
"content": {
"heading": ["#61afef", "#c678dd", "#56b6c2", "#d19a66"]
},
"layout": {
"pane_padding_x": 1,
"input_padding_x": 2
}
}
All color values use "#RRGGBB". Settings in tui.json are merged on top of theme_file / preset (useful for small tweaks without duplicating a full theme).