Skip to main content

Themes

XShell ships with 5 bundled themes in the repository themes/ folder and supports unlimited custom themes. Themes control prompt colours, ANSI palette, and background/foreground colours for the web terminal.

Switching themes

theme list # see all available themes with descriptions
theme info gruvbox # inspect the palette for one theme
theme set gruvbox # apply a theme immediately — no restart needed

The chosen theme is saved to ~/.xshell/config.json and restored on next launch.

Bundled themes

catppuccin

Catppuccin Mocha. Soothing pastel palette with warm cursor and muted selection.

github-dark

GitHub dark-style palette. Clean, restrained, and familiar.

gruvbox

Retro groove dark palette with warm contrast.

onedark

One Dark-inspired palette for Atom / VS Code style terminals.

tokyo-night

Cool neon-blue night palette inspired by Tokyo Night.

Fallback default

If XShell finds no theme files at all, it falls back to an internal default theme so the shell still renders correctly.

Theme file format

Every theme is a JSON file with two sections: colors and prompt.

~/.xshell/themes/mytheme.json
{
"name": "My Theme",
"description": "Optional description shown in theme list",
"colors": {
"background": "#0d1117",
"foreground": "#c9d1d9",
"prompt_user": "bright_cyan",
"prompt_host": "bright_green",
"prompt_cwd": "bright_yellow",
"prompt_git": "bright_magenta",
"error": "bright_red",
"success": "bright_green",
"info": "bright_blue",
"warning": "bright_yellow"
},
"prompt": {
"format": "{default}"
}
}

Color values

Colours can be:

  • Named ANSI: black red green yellow blue magenta cyan white (and bright_ variants)
  • Hex (web terminal only): #282a36

Prompt format

Set "format" to "{default}" to use the built-in user@host:cwd (branch)$ layout.

To customise the layout, use placeholders:

PlaceholderReplaced with
{user}Username (coloured)
{host}Hostname (coloured)
{cwd}Current directory (coloured, shortened)
{git} (branch) if in a git repo, empty otherwise
{$}Bold $ sign
"prompt": {
"format": "[{user}@{host}] {cwd}{git} {$}"
}

Where themes are loaded from

  1. Repository or bundled root: themes/*.json
  2. User overrides: ~/.xshell/themes/*.json
  3. Internal fallback theme used only when no theme files are found

Files are scanned in this order; later files override earlier ones with the same stem name.