Skip to main content
Vorto’s colors come from a theme — a TOML file that maps highlight scopes and editor chrome to colors. A handful of themes ship in the binary, you can drop your own into the config directory, and you can switch between them live with the :theme picker. The active theme persists to config.toml, so it survives restarts.

Switch themes with :theme

Run :theme from the command prompt (aliases: :colorscheme, :colo). This opens a filterable picker over every theme — built-ins plus anything in your themes/ directory: As you move the cursor through the list, the highlighted theme previews live on the current buffer, so you see real code in real colors before committing. Pressing Enter writes theme = "<name>" into config.toml; pressing Esc restores the theme that was active when you opened the picker. To set the startup theme without the picker, add the key directly:

Built-in themes

These themes ship in the binary and are always available: The special ansi theme uses your terminal’s own 16-color palette rather than fixed hex values, so it follows whatever scheme your terminal is already set to. A theme file in your themes/ directory shadows a built-in of the same name, so you can fork a built-in by dropping a file with the same name into ~/.config/vorto/themes/.

Write your own theme

Themes live in ~/.config/vorto/themes/<name>.toml. The file is a flat map of scope → color, with an optional [palette] table for named colors. Theme files that follow this common flat-scope layout drop in unchanged.
Put [palette] last in the file. Once a TOML table header appears, every key after it belongs to that table — so any scope mappings below [palette] would be read as palette entries instead.

Color values

A color can be written three ways:
  • A palette name — a key defined under [palette] (e.g. mauve).
  • A hex literal#rrggbb or the short #rgb form.
  • An ANSI color namered, blue, bright-black, and so on, resolved against the terminal palette.

Scope entries

Each entry is either a bare color (shorthand for the foreground) or an inline table with fg, bg, and modifiers:
modifiers accepts the usual text attributes such as bold and italic (terminal support permitting).

Scope names

Scopes fall into two groups:
  • Syntax — tree-sitter highlight captures like keyword, function.method, string, type.builtin, comment. More specific captures fall back to their parent (function.macrofunction) when unset.
  • Editor chrome — the ui.* scopes that paint the editor itself:

See also

Editor settings

The [editor] section, including the theme key.

Configuration overview

Where the themes/ directory sits and how config files merge.