Color themes
Configure audited color palettes and font decoration across the aibox terminal toolchain.
Color themes#
aibox themes are coordinated semantic systems, not a terminal-background setting. One selection controls terminal chrome, syntax, diffs, status states, prompts, file managers, Git tools, pagers, and supported AI TUIs.
Open the complete 76-variant screenshot gallery.
Configure a theme#
Choose a family, light or dark mode, an optional family variant, and a font-decoration level:
[customization]
theme = "projectious"
mode = "dark" # auto | light | dark
variant = "deep" # optional; family-specific
emphasis = "auto" # auto | full | standard | minimal | noneRun aibox apply after editing. mode = "auto" follows the host appearance when aibox can detect it and otherwise resolves to dark. Containers do not receive host appearance changes live, so apply again after changing the host setting.
Legacy concrete names such as catppuccin-mocha still parse, but the family form is canonical.
Font decoration#
Color is only one information channel. emphasis carries meaning through bold, italic, dim, underline, and strikethrough where the target tool supports them.
| Value | Decorations | Intended use |
|---|---|---|
auto | Capability detection, then graceful degradation | Recommended default |
full | Bold, italic, dim, underline, strikethrough | Terminals and fonts with complete style support |
standard | Bold, italic, dim | Normal capable terminals |
minimal | Bold, dim | Fonts without a true italic face |
none | No font decoration | Color-only compatibility mode |
NO_COLOR makes auto resolve to none. When terminfo is available, aibox checks italic and dim capabilities; an inconclusive probe assumes standard.
Unsupported attributes degrade to another channel: italic becomes dim, underline becomes bold, and strikethrough becomes dim. Bold is retained. Mono and high-contrast variants require at least the standard typography channel; max requires explicit emphasis = "full" because several semantic roles intentionally share a color.
Override individual semantic roles when a project needs a stronger cue:
[customization.emphasis_overrides]
code_comment = "italic dim"
status_error = "bold underline"Keys are semantic roles rather than tool-specific settings. Values may contain bold, italic, dim, underline, and strikethrough; aibox validates them, clamps them to the selected level, and degrades unsupported attributes per tool. An explicit emphasis = "none" still disables overrides.

Families and variants#
Set the value in the Variant column with variant = "…". Leave it unset for the default shown first.
Single-mode families reject an incompatible explicit mode, and every family rejects unknown or mode-incompatible variants with a message listing its available choices.
| Family | Dark | Light | Variants |
|---|---|---|---|
andromeeda | default | — | — |
aurora-x | default | — | — |
ayu | default, mirage | default | mirage |
borland | optimized, classic | — | optimized, classic |
catppuccin | mocha, macchiato, frappe | latte | macchiato, frappe |
contrast | high, max | high, max | max |
contrast-mono | high, max | high, max | max |
dracula | default, soft | — | soft |
everforest | default | default | — |
github | default, dimmed, high contrast | default, high contrast | dimmed, high-contrast-dark, high-contrast-light |
gruvbox | default | default | — |
houston | default | — | — |
kanagawa | wave, dragon | lotus | dragon |
laserwave | default | — | — |
material | default, ocean, palenight, darker | lighter | ocean, palenight, darker |
min | default | default | — |
mono | default | default | — |
monokai | default | — | — |
moonlight | default | — | — |
night-owl | default | default | — |
nord | default | — | — |
norton | optimized, classic | — | optimized, classic |
one-dark | pro | one light | — |
plastic | default | — | — |
poimandres | default | — | — |
phosphor | optimized, classic | — | optimized, classic |
projectious | navy, deep, high contrast | default, high contrast | deep, high-contrast-dark, high-contrast-light |
red | default | — | — |
rose-pine | default, moon | dawn | moon |
slack | default | ochin | ochin |
snazzy | — | default | — |
solarized | default | default | — |
synthwave-84 | default | — | — |
tokyo-night | default, storm | day | storm |
vesper | default | — | — |
vitesse | default, black | default | black |
vscode | Dark+ | Light+ | — |
Accessibility families#
mono is a practical grayscale theme with a 4.5:1 text floor. contrast keeps distinct hues while raising every text role to at least 7:1 in high and 12:1 in max. contrast-mono combines those floors with grayscale and therefore depends most strongly on font decoration.


Period terminal families#
borland, norton, and phosphor recreate characteristic DOS-era terminal palettes. Their classic variants prioritize historical fidelity; Borland and Norton therefore retain the original low-contrast red and brown-orange slots. The default optimized variants preserve the family identity while lifting text roles for sustained modern use. Phosphor relies on font emphasis as a second semantic channel because several roles intentionally share the same green intensity.
Projectious#
Projectious is now a five-variant brand family. Navy is the default dark page, deep preserves the older code-panel depth, and both modes have high-contrast alternatives. Selection colors use a stronger midnight step so short selected ranges remain visible.

Semantic colors#
Every concrete variant authors or derives the following roles:
- Base text: background, foreground, comments/metadata, accent, green, red, yellow, orange, cyan, and magenta.
- Chrome: surface, active and inactive borders, active-tab ink, inactive-pane foreground/background, cursor and cursor text.
- Interaction: selection foreground/background and search states.
- Diffs: add, delete, change, word-level emphasis, headers, and hunks.
- Syntax: plain text, comments, operators, keywords, types, functions, strings, numbers, decorators/macros, invalid, and deprecated code.
- Status and Git: success, information, warning, error, disabled, modified, staged, untracked, ignored, and conflicted.
The shipped audit enforces a 7:1 floor for normal foreground text, 4.5:1 for colored text roles, 3:1 for non-text borders, and a visible surface/selection step.
Governed tools#
| Surface | Generated configuration |
|---|---|
| tmux and PowerKit | Pane borders, active/inactive tabs and titles, status surfaces and states |
| Vim | Complete generated syntax/UI colorscheme, selection, search, diff, and decorations |
| Yazi | Manager, tabs, modes, status, pickers, Git states, and file types |
| Starship | Prompt palette and supported style attributes |
| LazyGit | Borders, search, state colors, and supported emphasis |
| bat and delta | Shared generated TextMate syntax theme plus audited diff backgrounds |
| fzf | Selection, prompts, matches, borders, disabled state, and attributes |
| eza | File types, Git states, metadata, and ANSI attributes |
| less and man | Heading, option, search, and status capabilities |
| lnav | Generated native theme definition for text, selection, status, warnings, and errors |
| OpenCode | Exact generated JSON palette for UI, Markdown, diffs, and syntax |
| Codex | Exact generated TextMate palette at .codex/themes/aibox.tmTheme; tui.theme = "aibox" selects it |
| Claude Code | Built-in dark/light modes; mono and contrast families use the ANSI modes |
| Gemini CLI | Closest supported built-in Gemini theme |
| Aider | Light/dark mode plus the closest supported Pygments code theme |
| Tau, Hermes, Copilot, Continue, Cursor | Terminal/tmux inheritance; these harnesses currently have no aibox-generated native palette |
Generated files live below .aibox-home/ and are refreshed by aibox apply or the theme-switch command. Running TUI processes may need a restart.
Switch without rebuilding#
aibox set theme.name projectious
aibox set theme.mode dark
aibox applyTo recreate the data-driven theme catalogue after changing audited data:
node scripts/generate-theme-catalog.mjs