atriumatrium

Themes

Built-in themes, custom themes, and the theme schema.

atrium ships with 19 built-in themes and supports user-authored custom themes stored in ~/.atrium/themes/.

Built-in themes

  • atrium (default dark), atrium High Contrast, atrium Light, atrium Light High Contrast
  • Dracula, One Dark, One Light
  • Catppuccin Mocha, Catppuccin Latte
  • Solarized Light, Nord, Nord Light
  • Gruvbox Dark, Gruvbox Light
  • Tokyo Night, Tokyo Night Day
  • GitHub Light
  • Rosé Pine, Rosé Pine Dawn
  • Monokai Pro

Switching

  • UISettings → Theme and pick from the dropdown. Set to auto to follow the system light/dark preference.
  • CLIatrium theme list / atrium theme switch <name>.
  • Config — edit config.theme in ~/.atrium/config.json.
Switching themes applies live — every pane reads from atrium's CSS custom properties, so chrome, sketches, editor highlights, and overlays all repaint together without a reload.

Custom themes

Drop a JSON file in ~/.atrium/themes/ to add a custom theme. atrium watches the directory and reloads themes on change (you should see it appear in the dropdown within a second).

Schema

{
  "name": "my-theme",
  "type": "dark",
  "terminal": {
    "background": "#1e1e1e",
    "foreground": "#d9d9d9",
    "cursor": "#ffd044",
    "cursorAccent": "#000000",
    "selectionBackground": "#47474780",
    "black": "#000000",
    "red": "#f07178",
    "green": "#c3e88d",
    "yellow": "#ffd044",
    "blue": "#82aaff",
    "magenta": "#c792ea",
    "cyan": "#89ddff",
    "white": "#ffffff",
    "brightBlack": "#545454",
    "brightRed": "#f07178",
    "brightGreen": "#c3e88d",
    "brightYellow": "#ffd044",
    "brightBlue": "#82aaff",
    "brightMagenta": "#c792ea",
    "brightCyan": "#89ddff",
    "brightWhite": "#ffffff"
  },
  "chrome": {
    "surface": "#181818",
    "border": "#303030",
    "text": "#d9d9d9",
    "textMuted": "#848484",
    "accent": "#ffd044",
    "hover": "rgba(217, 217, 217, 0.1)"
  }
}

Required top-level fields:

  • name (string, unique; shown in the theme dropdown).
  • type ("dark" or "light").
  • terminal (object) — ANSI palette and base colors for terminal panes. Minimum required: background and foreground. Other keys (the 16 ANSI slots, cursor, cursorAccent, selectionBackground) are optional but recommended.
  • chrome (object) — UI chrome colors. Minimum required: surface, border, text, textMuted, accent, hover.
All color values accept any CSS color notation (#hex, rgb(), rgba(), named colors).

Saving the current theme as a custom theme

Settings → Theme → Save as custom exports the currently rendered theme (including any tweaks) to ~/.atrium/themes/<name>-custom.json. If a file of that name exists, atrium auto-increments: <name>-custom.json<name>-custom-2.json → and so on.

Deleting a custom theme

Delete the file under ~/.atrium/themes/. The theme disappears from the dropdown on the next watcher tick. Built-in themes cannot be deleted.

How themes apply

  • Terminal colors are read by xterm.js — each ANSI slot maps to its rendered color.
  • Chrome colors drive app-wide CSS custom properties (--color-surface, --color-border, --color-text, --color-accent, …). Any atrium UI that respects the theme system reads from these variables.
  • The UI scale (see Appearance) composes with the theme — themes do not set sizes, they set colors.
  • The embedded Excalidraw canvas in sketch notes inherits the active atrium theme: tool palette, canvas background, selected-tool tinting, and chrome match light, dark, and colored themes instead of always rendering Excalidraw's defaults. Sketch state is stamped with its workspace ID so a theme change is repainted without losing the drawing.

Recommendations

  • Set chrome.hover to an rgba() value derived from chrome.text, at ~10% alpha. This keeps hover states legible against both dark and light surfaces.
  • Keep terminal.foreground and chrome.text close in luminance. Very different values make long terminal output feel inconsistent next to the editor.
  • Test the theme against a terminal running ls --color, a Monaco file, the git panel, and a Markdown document — each exercises a different subset of the palette.