Skip to content

Themes

gitoui ships 10 built-in themes, and lets you drop your own as a TOML file under ~/.config/gitoui/themes/. Both are addressed by name through the core.option.theme config key.

NameVibe
Tokyo NightDefault, dark blue / purple.
DraculaIconic purple / pink / green dark.
Catppuccin MochaPastel dark.
Catppuccin LattePastel light.
Gruvbox DarkWarm earthy dark.
NordCold Scandinavian.
Solarized DarkClassic dark.
Solarized LightClassic light.
One DarkAtom-derived.
Monokai ProVivid contrast.

Pick one from the Configuration view (p from the list, then ←/→ on the “theme” row) or set it in config.toml:

[core.option]
theme = "Dracula"

2×5 grid, the same commit-list view rendered with each built-in theme

Each named theme bundles a matching syntax theme (the syntect theme used for diff highlighting), that’s why setting theme = "Dracula" also changes the syntax highlighter to Dracula. You can override the syntax pick on its own with syntax_theme = "...".

  • Directory~/.config/gitoui/
    • config.toml
    • Directorythemes/
      • MySuperTheme.toml your custom theme file
      • Sunset.toml as many as you like

The name you set in core.option.theme must match the file stem (without .toml).

  1. Create the theme file at ~/.config/gitoui/themes/MySuperTheme.toml (start from the full template below).

  2. Set it in config.toml:

    [core.option]
    theme = "MySuperTheme"
  3. Restart gitoui, or use the Configuration view’s / cycler on the theme row to switch live without restart.

Live theme cycling, Configuration view, ← / → cycles built-ins, UI repaints on each press

base = "Tokyo Night" starts from the Tokyo Night palette; any token you don’t mention keeps its base value. Omit base to start from defaults (roughly Tokyo Night anyway, but a few greys are slightly different).

This is the recommended way to customise: pick the closest built-in as base, then override only the 3 – 10 tokens you want to change.

If you don’t set syntax_theme, gitoui auto-picks one based on the resolved bg luminance:

  • Dark bgbase16-ocean.dark
  • Light bgInspiredGitHub

Set syntax_theme = "Dracula" (or any other syntect theme name) to force a specific one. This overrides both the base’s syntax theme and the auto-pick.

Every color token accepts the full ratatui Color syntax:

fg = "#abcdef" # hex string (recommended)
bg = "black" # ANSI named
list_match_fg = "bright-white"
list_match_bg = "11" # xterm 256 indexed
detail_label_fg = { Rgb = [100, 100, 100] } # legacy struct form

Hex strings are the recommended form, they round-trip cleanly across terminals and are unambiguous.

gitoui exposes ~45 color tokens grouped by the UI surface they paint. The full source is src/color.rs::ColorTheme.

The fallback foreground / background used everywhere a more specific token isn’t defined.

TokenPaints
fgDefault foreground for body text.
bgDefault background of the whole UI.
TokenPaints
list_selected_fgForeground of the focused commit row.
list_selected_bgBackground of the focused commit row.
list_compare_marked_fgForeground of a commit marked as endpoint A in the 2-commit compare flow (Space / Ctrl+click).
list_compare_marked_bgBackground of the marked endpoint, picks a more saturated, theme-coherent accent.
list_ref_paren_fgThe ( / ) parentheses around ref glyphs.
list_ref_branch_fgLocal branch ref glyph.
list_ref_remote_branch_fgRemote branch ref glyph (origin/foo).
list_ref_tag_fgTag ref glyph.
list_ref_stash_fgStash entry glyph.
list_head_fgThe HEAD pointer / current branch marker.
list_commit_message_fgCommit subject text.
list_name_fgAuthor name column.
list_hash_fgShort hash column.
list_date_fgDate column.
list_match_fgForeground of search-matched characters.
list_match_bgBackground of search-matched characters.
TokenPaints
detail_label_fgField labels (Author:, Date:, Commit:, …).
detail_name_fgAuthor name.
detail_date_fgAuthor / commit date.
detail_email_fgAuthor email.
detail_hash_fgFull commit hash.
detail_ref_branch_fgBranch refs listed on the commit.
detail_ref_remote_branch_fgRemote branch refs.
detail_ref_tag_fgTag refs.
detail_file_change_add_fgA marker on added files.
detail_file_change_modify_fgM marker on modified files.
detail_file_change_delete_fgD marker on deleted files.
detail_file_change_move_fgR marker on renamed files.
TokenPaints
ref_selected_fgForeground of the focused row in the refs panel.
ref_selected_bgBackground of the focused row in the refs panel.
TokenPaints
help_block_title_fgSection titles in the help page (? / F1).
help_key_fgKey chips drawn next to each action.
TokenPaints
virtual_cursor_fgThe faux cursor block we paint inside multi-line text editors (commit message editor, rebase reword editor, PR / Issue compose forms).
status_input_fgActive input text in the footer (search query, dialog inputs).
status_input_transient_fgPlaceholder / transient hints in inputs (greyed-out).
TokenPaints
status_info_fgInformational toasts in the footer (Match N of M, etc.).
status_success_fgSuccess toasts (commit landed, push OK…).
status_warn_fgWarning toasts (rebase paused, draft toggled…).
status_error_fgError toasts (git command failed, validation error…).
TokenPaints
divider_fgPanel borders, vertical separators, horizontal rules.
graph_branchesArray of hex strings used as the commit-graph branch palette. Empty array means “fall back to [graph.color.branches] from the user TOML, then to defaults.” 12 entries is a good number; the graph cycles through them as branches diverge.

Copy the block below, paste it into ~/.config/gitoui/themes/MySuperTheme.toml, then replace any token you want. Tokens you delete fall back to the base theme; tokens you keep override it.

~/.config/gitoui/themes/MySuperTheme.toml
#
# Optional, inherit from any built-in theme. Tokens you don't list
# below keep their value from the base theme.
base = "Tokyo Night"
# Optional, force a syntect theme for diff highlighting. Without it,
# gitoui auto-picks `base16-ocean.dark` on dark bg, `InspiredGitHub` on light.
# syntax_theme = "Dracula"
# ─── Base ──────────────────────────────────────────────────────────────────
fg = "#c0caf5"
bg = "#1a1b26"
# ─── Commit list (home screen) ─────────────────────────────────────────────
list_selected_fg = "#ffffff"
list_selected_bg = "#3b4261"
list_compare_marked_fg = "#ffffff"
list_compare_marked_bg = "#6e55ab"
list_ref_paren_fg = "#e0af68"
list_ref_branch_fg = "#9ece6a"
list_ref_remote_branch_fg = "#f7768e"
list_ref_tag_fg = "#e0af68"
list_ref_stash_fg = "#bb9af7"
list_head_fg = "#7dcfff"
list_commit_message_fg = "#b4bde5"
list_name_fg = "#7dcfff"
list_hash_fg = "#e0af68"
list_date_fg = "#bb9af7"
list_match_fg = "#1a1b26"
list_match_bg = "#e0af68"
# ─── Commit detail (right pane) ────────────────────────────────────────────
detail_label_fg = "#a9b1d6"
detail_name_fg = "#7dcfff"
detail_date_fg = "#bb9af7"
detail_email_fg = "#7aa2f7"
detail_hash_fg = "#e0af68"
detail_ref_branch_fg = "#9ece6a"
detail_ref_remote_branch_fg = "#f7768e"
detail_ref_tag_fg = "#e0af68"
detail_file_change_add_fg = "#9ece6a"
detail_file_change_modify_fg = "#e0af68"
detail_file_change_delete_fg = "#f7768e"
detail_file_change_move_fg = "#7dcfff"
# ─── Refs panel (Tab from the list) ────────────────────────────────────────
ref_selected_fg = "#ffffff"
ref_selected_bg = "#3b4261"
# ─── Help page (? / F1) ────────────────────────────────────────────────────
help_block_title_fg = "#9ece6a"
help_key_fg = "#e0af68"
# ─── Inputs / editors ──────────────────────────────────────────────────────
virtual_cursor_fg = "#c0caf5"
status_input_fg = "#c0caf5"
status_input_transient_fg = "#565f89"
# ─── Status / footer ───────────────────────────────────────────────────────
status_info_fg = "#7dcfff"
status_success_fg = "#9ece6a"
status_warn_fg = "#e0af68"
status_error_fg = "#f7768e"
# ─── Misc ──────────────────────────────────────────────────────────────────
divider_fg = "#565f89"
# ─── Commit graph palette ──────────────────────────────────────────────────
# 12 colors is the sweet spot, the graph cycles through them as branches
# diverge. An empty array falls back to the global [graph.color.branches]
# in your config.toml.
graph_branches = [
"#f7768e", "#7aa2f7", "#9ece6a", "#e0af68",
"#bb9af7", "#7dcfff", "#ff9e64", "#73daca",
"#ad8ee6", "#2ac3de", "#ff007c", "#41a6b5",
]

Bad theme files surface as styled boot-time diagnostics:

ErrorCause
Theme not foundname doesn’t match any built-in OR any ~/.config/gitoui/themes/<name>.toml file. The error includes the searched path.
Theme file invalidTOML parse error inside your custom theme.
Unknown basebase = "X" in the file but X isn’t a built-in.
I/O errorfile exists but can’t be read (permissions, etc.).