Documentación
Themes
Tonal Slate, theme switching and ANSI remapping.
En esta página
One palette, every surface
A TDE theme is a semantic palette, not a colour scheme file. Components never
ask for a hex value; they ask for a role — accent, danger, surface,
border, input_bg — and the active theme answers. That is why changing the
theme restyles the whole desktop, chrome and apps alike, in one step.
The built-in palettes
Sixteen palettes ship in the binary. tonal-slate is the product default; the
Appearance picker exposes the same canonical catalog used by configuration,
the UI Demo and the capture pipeline.
| Name | Notes |
|---|---|
tonal-slate | Default. Cool slate surfaces, frost text and a soft green accent. |
editorial-paper | Warm e-paper presentation; aliases include eink and paper. |
editorial-ink | Dark editorial palette; aliases include midnight and dark. |
tonal-porcelain | Light tonal UI. |
tonal-graphite | Dark graphite tonal UI. |
tonal-sand | Warm light tonal UI. |
macos | Light macOS-inspired palette. |
macos-dark | Dark macOS-inspired palette. |
ubuntu | Ubuntu-inspired dark palette. |
windows-xp | Windows XP-inspired light palette. |
dracula | Dracula editor palette. |
nord | Nord editor palette. |
gruvbox | Gruvbox dark palette. |
solarized-dark | Solarized Dark palette. |
catppuccin-mocha | Catppuccin Mocha palette. |
monokai | Monokai editor palette. |
You select one either as a mode or by name:
[theme]
mode = "tonal-slate" # product default
# name = "gruvbox" # takes precedence over modemode is the stable three-palette cycle. tonal-slate accepts slate and
default; editorial-paper accepts eink, e-ink, paper and kaleido;
editorial-ink accepts midnight, dark and tde. name accepts any of the
sixteen canonical ids, their labels and aliases, or a custom file at
~/.config/tde/themes/<name>.toml. A theme that fails to load prints a warning
and falls back to mode rather than refusing to start.
Slashes, backslashes and .. in a theme name are rejected, so name can never
read a file outside the themes directory.
Switching
Three ways, all live — no restart:
- Control Center → Appearance. Lists every built-in plus every file in your
themes directory. Arrows and
Enter, or a click. The selection is persisted. Alt+Shift+E. Cycles Tonal Slate → Editorial Paper → Editorial Ink → Tonal Slate, clears any named override and persists the new mode.Shiftis part of the shortcut so plainAlt+Estays free for apps.config.toml. Edit[theme]and restart.
e-Ink is a rendering mode, not just colours
Every theme carries an eink flag. When it is set, TDE runs a post-process pass
over the entire final frame — its own chrome and every hosted terminal app —
and collapses each cell's foreground and background onto a warm paper-to-ink
ramp.
Low-chroma colours are mapped by luminance onto five paper tones; anything with real colour in it snaps to the nearest entry on a small colour ramp. Terminal default colours resolve to paper for backgrounds and ink for foregrounds.
The practical effect: a third-party TUI that paints its own aggressive truecolor palette still reads as e-paper inside TDE, without that app knowing anything about themes. On Tonal Slate and every other non-e-Ink palette the pass is a no-op and colours pass through untouched.
Custom themes
Drop a file in ~/.config/tde/themes/. The stem is the name you put in
theme.name, so office.toml becomes name = "office".
A custom theme inherits every role it does not set from a base palette, so a five-line file is a complete, valid theme:
base = "tonal-slate" # omitted base also inherits Tonal Slate
[colors]
accent = "#3b5bdb"
accent_fg = "#ffffff"
surface = "#f7f5ee"
warn = "#b46b00"
danger = "#b3261e"Colour spellings
Anywhere a colour is accepted, four forms work:
| Form | Example |
|---|---|
| Hex | "#7aa2f7" |
| Truecolor RGB | "122,162,247" |
| Palette index | "4" or "idx:4" |
| Basic name | "blue" |
An unparsable colour is an error, not a silent fallback.
The [colors] roles
| Role | Used for |
|---|---|
bg, fg | Window content background and body text. |
dim, bright | Muted labels and hints; headings and focused values. |
accent, accent_fg | The primary action colour and the text drawn on it. |
sel_bg, sel_fg | Selected rows. |
surface | Panels, window frame fill, menus. |
backdrop | The desktop behind all windows. |
menu_bg | Menus and popovers. |
success, warn, danger | Status colours. |
icon | A secondary decorative accent for glyphs and tags. |
input_bg, input_fg | Editable fields. |
border_on, border_off | Focused and unfocused window borders. |
title_on, title_off | Focused and unfocused window titles. |
btn_off, btn_bg | Inactive button glyphs and idle chip fill. |
shadow | Window drop shadows. |
pill_on, pill_off | The toolbar pill behind the window buttons. |
Setting accent without accent_fg re-derives a readable foreground rather than
inheriting a clashing pair from the base palette.
Per-app themes
A few apps carry their own theme override — TDE Code and AI Chat resolve a theme name for their own window without touching the desktop palette. Everything else follows the one global theme.
Related
- Configuration — the
[theme]table and theme files in the config reference. - Control Center — the Appearance panel.
- Terminal graphics — what your terminal contributes to how all of this looks.
- Design system — how components consume the palette.