Terminal themes
Themes control the terminal viewport’s color scheme: the 16 ANSI slots plus cursor, selection, and background/foreground. Distinct from skins, which restyle the surrounding app chrome. A profile picks one theme for its terminal; the rest of the app stays on whatever skin is active.
File location
Section titled “File location”Custom themes live under the user config dir:
- macOS:
~/Library/Application Support/Baudrun/themes/<id>.json - Windows:
%APPDATA%\Baudrun\themes\<id>.json - Linux:
$XDG_CONFIG_HOME/Baudrun/themes/<id>.json(usually~/.config/Baudrun/themes/)
Two ways to add a custom theme:
- Import
.itermcolorsvia Settings → Installed Themes → Import .itermcolors…. Runs a native file-picker; the app parses iTerm2’s XML plist format and writes a normalized JSON copy into the themes directory. - Drop a raw JSON file into the themes directory. On next launch (or re-open of Settings), the theme appears in the picker. There is no UI importer for JSON; hand-editing is a feature, not a workflow.
Deleting a user theme from Settings also removes its file.
Built-in themes
Section titled “Built-in themes”| ID | Name | Pairs nicely with skin |
|---|---|---|
baudrun | Baudrun | Baudrun (default) |
dracula | Dracula | any dark skin |
solarized-dark | Solarized Dark | any dark skin |
solarized-light | Solarized Light | any light skin |
nord | Nord | any dark skin |
one-dark | One Dark | any dark skin |
monokai | Monokai | any dark skin |
gruvbox-dark | Gruvbox Dark | any dark skin |
tomorrow-night | Tomorrow Night | any dark skin |
colorblind-safe | Colorblind Safe | any skin (see note) |
crt-phosphor | CRT Phosphor (Green) | CRT skin |
synthwave | Synthwave | Cyberpunk skin |
brogrammer | Brogrammer | any dark skin |
molten | Molten | Foundry skin |
tokyo-night | Tokyo Night | Tokyo Night skin |
Colorblind Safe uses Bang Wong’s palette
(Nature Methods, 2011).
Red and green slots are vermillion and bluish-green, perpendicular to
the protan/deutan confusion axis, so up vs. down output stays
distinguishable for the ~6% of men with red-green colorblindness.
CRT Phosphor is monochrome green: every ANSI slot is a shade of green, so status distinctions read as luminance rather than hue. Pairs with the CRT skin for a matched single-hue aesthetic.
Synthwave is a neon palette (hot-pink magenta, electric cyan, acid yellow) over a near-black canvas. Status colors hit hard for contrast against a busy Cyberpunk skin.
Molten is the terminal half of the Foundry pair: a deep amber
ground with a warm-biased ANSI set — hot reds and oranges, amber
yellows, desaturated steel blues and teals that don’t fight the
warm background. The 16 slots stay semantically readable (red is
still red, green still green) since network gear colors output by
meaning. Its background matches the Foundry skin’s --bg-terminal,
so the viewport blends into the chrome.
Tokyo Night is the bit-exact canonical Tokyo Night Night
palette — same hex values folke/tokyonight.nvim,
enkia/tokyo-night-vscode-theme,
and every alacritty/kitty/WezTerm port ship. Deep #1a1b26
background, soft #c0caf5 foreground, blue #7aa2f7 /
cyan #7dcfff / magenta #bb9af7 accents. Pairs with the
Tokyo Night skin (whose --bg-terminal matches the theme’s
background, so the viewport blends into the chrome the same way
Foundry / Molten do).
JSON schema
Section titled “JSON schema”{ "id": "my-theme", "name": "My Theme", "source": "user", "background": "#0b0b0d", "foreground": "#e4e4e7", "cursor": "#ffffff", "cursorAccent": "#0b0b0d", "selection": "#1a3a5c", "selectionForeground": "#ffffff", "black": "#1e1e22", "red": "#ff6961", "green": "#7cd992", "yellow": "#f5d76e", "blue": "#6cb6ff", "magenta": "#d794ff", "cyan": "#7ce0e0", "white": "#d4d4d8", "brightBlack": "#4a4a52", "brightRed": "#ff8a80", "brightGreen": "#a2e5b3", "brightYellow": "#fce488", "brightBlue": "#94ccff", "brightMagenta": "#e5b6ff", "brightCyan": "#a6ecec", "brightWhite": "#ffffff"}Fields
Section titled “Fields”| Field | Required | Purpose |
|---|---|---|
id | no | Stable slug. Omitted IDs are derived from name; clashes get a numeric suffix on import. |
name | yes | Display name in the theme picker. |
source | no | Written automatically; importer sets "user" on import. |
background | yes | Terminal viewport background. |
foreground | yes | Default text color. |
cursor | yes | Cursor block fill. |
cursorAccent | no | Character color under the cursor. Defaults to background if unset. |
selection | yes | Selection highlight background. |
selectionForeground | no | Text color inside the selection. Unset leaves the renderer in its “use foreground” default. |
black … brightWhite | yes | The 16 ANSI slots (indexes 0-15). Devices pick these via SGR codes 30-37, 40-47, 90-97, 100-107. |
All color values accept the same shorthand the iTerm2 / Alacritty
theme files use: #rrggbb, #rgb, rgb(), rgba(), or CSS
named colors.
Variable meaning (ANSI palette)
Section titled “Variable meaning (ANSI palette)”| Index | JSON key | Common SGR usage |
|---|---|---|
| 0 | black | Foreground 30 / background 40 |
| 1 | red | 31 / 41 (errors, down, failed in highlighter) |
| 2 | green | 32 / 42 (up, ok, active in highlighter) |
| 3 | yellow | 33 / 43 (warnings) |
| 4 | blue | 34 / 44 (interface names in highlighter) |
| 5 | magenta | 35 / 45 (MAC addresses in highlighter) |
| 6 | cyan | 36 / 46 (IPv4/IPv6 in highlighter) |
| 7 | white | 37 / 47 |
| 8 | brightBlack | 90 / 100 (dim gray; timestamps/dates in highlighter) |
| 9-14 | brightRed…brightCyan | 91-96 / 101-106 (bright variants) |
| 15 | brightWhite | 97 / 107 |
Baudrun’s syntax highlighter uses the ANSI slots by name. If
you change red you change what down looks like. Device-sourced
SGR colors in the 0–15 range (30–37, 40–47, 90–97,
100–107) map to the same slots, so a theme recolors highlighter
output and raw 16-color device output together.
256-color and truecolor
Section titled “256-color and truecolor”The 16 slots above are the only colors a theme defines. Devices can also emit two wider color spaces, and Baudrun renders both — they’re just not theme-controlled:
- 256-color (
38;5;N/48;5;N). Indices 0–15 are the theme slots. Indices 16–231 are the standard 6×6×6 color cube and 232–255 the 24-step grayscale ramp — both computed to the canonical xterm values, identical under every theme. A device that asks for index 200 gets the same color whether you’re on Dracula or Foundry. - 24-bit truecolor (
38;2;R;G;B/48;2;R;G;B). Rendered as the exact RGB the device specifies, untouched.
This is deliberate: indices 16–255 and truecolor are explicit, absolute color choices the device made, so Baudrun paints them as-is — no contrast nudging, no remapping — and gradient ramps and color-cube output look the way the device intended. Only the 16 named slots are yours to restyle.
Previewing
Section titled “Previewing”Settings → Installed Themes → Preview opens a modal with a canned RuggedCom-style output sample (prompts, interface status, MAC addresses, IPs, timestamps, warnings, errors). Shows the palette applied through the highlighter against realistic network-gear text so you can judge a theme without switching and reconnecting.
Picking a theme
Section titled “Picking a theme”- Global default. Settings → Default Theme. Applied to any profile that doesn’t set its own.
- Per-profile override. Each profile’s form has its own theme dropdown. Choose “Default” there to fall back to the global.
A profile’s theme wins over the global default; skins never interact with theme selection.
Annotated reference theme
Section titled “Annotated reference theme”For a complete working theme with every color slot set and a per-field comment on what it does, see:
docs-next/public/examples/theme.example.jsonc: annotated version, for reading and learning. Not directly importable (Baudrun’s JSON parser doesn’t accept comments).docs-next/public/examples/theme.example.json: stripped version with the same values, importable by dropping into the themes directory.
The annotated file is the recommended starting point: read it,
copy the stripped version, rename the id and name, and tweak
the colors you care about.
Creating a custom theme
Section titled “Creating a custom theme”From .itermcolors
Section titled “From .itermcolors”The fastest path. iTerm2’s color-scheme ecosystem has thousands of
themes at iterm2colorschemes.com,
Gogh, and plenty of individual
gists. Grab an .itermcolors file and use Settings → Import.
The importer parses the plist format via howett.net/plist, maps
ANSI 0-15 to black-brightWhite, and uses the file basename
(minus .itermcolors) as the display name and ID slug.
From scratch (JSON)
Section titled “From scratch (JSON)”Drop a JSON file matching the schema above into the themes directory. Re-open Settings (no restart needed) and it appears in the picker. All 22 color fields should be set; missing ANSI slots render as empty strings and xterm falls back to its built-in defaults, which almost certainly clash.
Where .itermcolors themes come from
Section titled “Where .itermcolors themes come from”- iterm2colorschemes.com: hundreds of curated themes, preview images included.
- mbadolato/iTerm2-Color-Schemes:
the GitHub repo many of the above draw from. Contains
.itermcolorssources plus exports for other terminals. - Gogh: curated set, primarily
distributed as shell scripts for other terminals; the repo includes
.itermcolorswhere available.
- Background contrast with your skin. If the skin’s
--bg-mainand the theme’sbackgroundare close in hue/lightness, the terminal edge blends into the rest of the UI. Either pick a theme with a distinct background or set--bg-terminalin your skin to match the theme. - Bright vs. normal slots. Devices use bright when bold attribute
is active. Low contrast between normal and bright kills
show versionreadability on most network gear. - Check the highlighter.
up,down, and interface names get colored by the highlighter usinggreen,red, andblue. If any of those are hard to read on your background, the highlighter turns into visual noise. - Test on real output. A theme that looks great on
ls --colormight struggle on a Ciscoshow interfacewall of text. Preview is a good start; a real session reveals the rest.
Sharing
Section titled “Sharing”Themes are plain JSON. Export path: the user themes directory. Drop
the file where recipients can find it. There is no registry and no
server. For broader distribution, publish the .itermcolors source
and link to one of the ecosystems above.