formae inventory).
Themes ship as TOML files: formae has built-in themes compiled into the binary,
and you can drop your own into a directory to add or override one.
Selecting a theme
Setcli.theme in your profile (see Configuration):
.toml) of a
theme in ~/.config/formae/themes/. An unknown name prints a warning that lists
every available theme (the built-ins plus any of your own in
~/.config/formae/themes/) and falls back to quiet.
Available themes
formae ships with the following themes:
The
nord, gruvbox, tokyo-night, rose-pine, and catppuccin-latte themes
reuse quiet’s restrained behavior and change only the palette, so glyphs and
layout stay neutral while each operation is tinted from the scheme.
theme = "formae" is accepted as an alias for quiet so existing configurations
keep working.extends any of them from your own
theme (see Inheritance) to start from its palette and change
glyphs or behavior.
The palettes of the color-scheme themes are derived from the corresponding
Omarchy themes and, in turn, the upstream color schemes:
Nord,
Gruvbox,
Tokyo Night,
Rosé Pine, and
Catppuccin. All credit for the color work belongs to
their authors.
Light and dark appearance
Every theme color has both a light and a dark variant.cli.appearance chooses
which side is used, independently of the theme:
auto(default) detects the terminal background.light/darkforce the corresponding variant. Use this when auto-detection is unreliable — for example insidetmux, over SSH, or in a terminal that does not report its background color.
- The
FORMAE_APPEARANCEenvironment variable (lightordark) — a one-off override that beats the config. cli.appearancein the profile, when it is notauto.- Auto-detection of the terminal background.
Omarchy
On an Omarchy desktop,cli.theme = "omarchy" makes the
CLI follow your active desktop theme instead of using a fixed palette.
colors.toml (at ~/.config/omarchy/current/theme/colors.toml) and maps its
values onto formae’s semantic palette — accent becomes the primary accent and
the logo wordmark, the 16 ANSI colors (color0–color15) fill the per-operation
and state colors, background/foreground set surfaces and text, and so on.
Sparse themes fall back per key, so every color slot stays populated. If no
Omarchy theme is present (or its colors.toml can’t be read), formae warns once
and falls back to the quiet theme.
Light and dark. With appearance = "auto", an Omarchy theme’s own light/dark
declaration is preferred over terminal auto-detection, so a light Omarchy theme
renders formae’s light variant and a dark one its dark variant. Setting
appearance to light or dark explicitly still overrides this.
Live-follow. Switching your desktop theme while a long-running view is open —
formae inventory or the status watch — recolors it in place, without
restarting the command. formae watches the Omarchy current/theme symlink and
re-resolves the theme when your desktop swaps it (the atomic switch that
omarchy-theme-set performs), as well as an in-place edit to colors.toml.
One-shot commands aren’t watched; they pick up the current theme each time they
run.
Authoring a theme
A custom theme is a TOML file in~/.config/formae/themes/. The filename is the
theme name: ~/.config/formae/themes/midnight.toml is selected with
cli.theme = "midnight". A theme in that directory whose name matches a built-in
shadows the built-in.
The quickest way to start is to copy a built-in theme’s structure and change what
you need. A theme has a set of appearance planes ([palette], [glyphs],
[progress], [spinner]) and a few behavior toggles ([confirmation_bar],
[header], [rows]).
Colors
Every[palette] value is either a single hex string used for both appearances,
or a table with explicit light and dark variants:
cli.appearance selects which side of the two-variant colors is used at render
time.
Inheritance
A theme may declareextends = "<base>" to start from another theme and override
only the keys that differ. Inheritance is one level deep — a base that itself
declares extends is an error. The built-in themes are self-contained (they do
not use extends); inheritance is a convenience for your own themes.
quiet, so a theme always renders something complete.
Palette keys
Glyphs
The[glyphs] plane maps each semantic symbol to a character. Decorative
separators and panel borders are fixed chrome and are not themeable.
Keep glyphs to single-width characters. Some symbols (such as
…, ✗, ⚠)
are East-Asian-ambiguous and render double-width in certain terminals, which can
misalign side-by-side panels.Progress and spinner
Behavior toggles
Minimal example
~/.config/formae/themes/midnight.toml, then select it:

