Skip to content
Eric Kochen edited this page Apr 7, 2026 · 2 revisions

purple ships with 11 built-in color themes and supports custom themes via TOML files. The theme system has three color tiers that adapt to your terminal's capabilities.

Switching themes

TUI

Press m in the host list to open the theme picker. Themes apply instantly as you scroll through them (live preview). Press Enter to confirm or Esc to revert to the previous theme.

CLI

purple theme list                     # list all themes (built-in + custom)
purple theme set "Dracula"            # set and persist the active theme
purple --theme "Catppuccin Mocha"     # session-only override (not saved)

Built-in themes

Theme Accent Style
Purple (default) #9333EA Dark, purple accent
Purple Purple #9333EA Dark, deeper purple tones
Catppuccin Mocha #89B4FA Dark, pastel palette
Dracula #BD93F9 Dark, vibrant purples
Gruvbox Dark #D79921 Dark, warm retro
Nord #88C0D0 Dark, cool arctic
Tokyo Night #7AA2F7 Dark, neon blues
One Dark #61AFEF Dark, balanced blues
Catppuccin Latte #1E66F5 Light, pastel palette
Solarized Light #268BD2 Light, low contrast
No Color n/a Modifiers only (bold/dim)

The No Color theme activates automatically when the NO_COLOR environment variable is set. It uses only text modifiers (bold, dim) with no colors.

Custom themes

Place .toml files in ~/.purple/themes/. Each file defines one theme.

Minimal example

Only name is required. Missing color slots fall back to the default Purple theme.

name = "My Theme"
accent = "#89b4fa"
success = "#a6e3a1"
warning = "#f9e2af"
error = "#f38ba8"

Full example

All configurable color slots with ANSI 16 overrides:

name = "My Full Theme"

# Primary colors
accent = "#89b4fa"
accent_bg = "#89b4fa"
success = "#a6e3a1"
success_dim = "#6c9c6e"
warning = "#f9e2af"
error = "#f38ba8"

# Borders
border = "#585b70"
border_active = "#89b4fa"

# Text
fg_muted = "#6c7086"
selected_fg = "#cdd6f4"
footer_key_fg = "#1e1e2e"

# Backgrounds (used as background colors on badges and footer keys)
footer_key_bg = "#89b4fa"
badge_bg = "#89b4fa"

# Optional: ANSI 16 overrides (for terminals without truecolor)
accent_ansi = "Blue"
success_ansi = "Green"
warning_ansi = "Yellow"
error_ansi = "Red"

Color slots reference

TOML key Purpose Fallback
accent Selection highlight, active elements #9333EA
accent_bg Background color for selected rows #9333EA
success Online status, success messages #22C55E
success_dim Dimmed success (active tunnels in list) Derived from success
warning Slow ping, warning messages #EAB308
error Offline status, error messages #EF4444
border Panel and overlay borders Derived
border_active Active/focused borders, search border Derived
fg_muted Secondary text, descriptions Derived
selected_fg Text color on selected rows Derived
footer_key_fg Text on footer key badges Derived
footer_key_bg Background of footer key badges Derived
badge_bg Background of status badges Derived

Two slots are not configurable via TOML: highlight (Bold and Reversed modifiers) and fg_bold (Bold modifier). These are structural and consistent across all themes.

Color format

Hex colors (truecolor): #RRGGBB format. Requires a terminal that supports truecolor (most modern terminals). Example: accent = "#89b4fa"

ANSI 16 overrides: Append _ansi to any color key. Used when the terminal does not support truecolor. If omitted, purple automatically maps your hex color to the nearest ANSI 16 color.

Valid ANSI color names: black, red, green, yellow, blue, magenta, cyan, white, darkgray, lightred, lightgreen, lightyellow, lightblue, lightmagenta, lightcyan, gray

Underscore variants also work: dark_gray, light_red, light_green, etc.

TOML syntax notes

  • Comments start with #
  • Inline comments are supported: accent = "#89b4fa" # my accent
  • Values can be quoted or unquoted: accent = "#89b4fa" and accent = #89b4fa both work
  • Blank lines are ignored
  • Unknown keys are silently ignored
  • Duplicate keys: last value wins

Color tiers

purple detects your terminal's color support and selects the appropriate tier:

Tier Detection Behavior
Truecolor COLORTERM=truecolor or COLORTERM=24bit Full RGB hex colors
ANSI 16 Default when truecolor not detected 16 standard terminal colors
NO_COLOR NO_COLOR env var set Text modifiers only (bold/dim)

Custom themes define truecolor values via hex. ANSI 16 values are either auto-derived from the hex or explicitly set via _ansi keys.

Tips

  • Use the theme picker (m) to preview themes before committing
  • Start from a built-in theme that's close to what you want and adjust specific slots
  • Test your theme in both truecolor and ANSI 16 mode to ensure it looks good everywhere
  • Check your terminal supports truecolor: echo $COLORTERM should show truecolor or 24bit

Clone this wiki locally