Skip to content

Config File Format

The syntax of ~/.config/otty/config.toml.

Otty's config is a TOML file — a flat list of key = value pairs, one per line, with # for comments. It follows TOML string quoting, and Otty's reader is lenient: quotes around simple string values are optional.

Lexical structure

# Comments start with `#`
key = value
key-with-dashes = "string value"
font-feature = "+liga, +calt"   # quoted to preserve commas
  • One assignment per line.
  • Whitespace around = is optional.
  • Unknown keys are silently ignored — typos won't error.
  • Blank lines and # comments are skipped.

Value types

TypeExamples
StringJetBrains Mono, "value with spaces", 'literal'
Integer13, 0, -1
Float0.92, 1.0, 3.14
Booleantrue / false, also on / off
Color#RRGGBB, #RRGGBBAA, named (red, cornflowerblue)
Enumblock, glass-dark — see each key's docs
Listsee below — either a repeated key or an inline array

Lists

Some settings hold several values. They come in two spellings, and each key uses one or the other:

Repeated key — one line per entry, in order. keybind, env, cli-alias, hint-pattern, agent-command, agent-quota-off, open-with-app, open-with-command, profile, tab-rule, details-view, autocomplete-history-ignore.

env = FOO=bar
env = NO_PROXY=localhost,127.0.0.1

An entry is the rest of the line, so it may contain commas — the second line above is one variable, not two.

Inline array — one line holding the whole list. font-family-fallback (and its bold / italic variants), widen-ambiguous, link-scheme-allowlist, shell-integration-disabled-shells, notification-sound, session-restore-process-allowlist, progress-bar-commands.

font-family-fallback = ["PingFang SC", "Noto Color Emoji"]

[] empties the list.

From the command line, otty config get <key> prints one entry per line and otty config set <key> takes the whole list back — or a signed entry to change just one:

bash
otty config set env +EDITOR=nvim   # add, or replace the EDITOR entry
otty config set env -EDITOR        # remove

See the CLI Reference for the rest of otty config.

Includes

include = ~/.config/otty/personal.toml
include = ~/dotfiles/otty/work.toml

Later includes override earlier ones; the main file is read last and overrides everything.

Environment expansion

~ and $VAR expand inside string values:

working-directory = ~/projects
shell-command     = $HOMEBREW_PREFIX/bin/fish

Hot reload

Saving config.toml reapplies the changes immediately to every window. No restart, no signal.

What Otty writes back

The Settings window and otty config set edit this file in place rather than regenerating it, so:

  • Comments, blank lines and key order survive. A key you already have is updated where it sits; a new one is appended at the end.
  • Keys Otty doesn't recognise are left alone. A file shared with a newer version keeps its newer keys.
  • A setting you reset is commented out, as # cursor-style = bar (reset to default), so you can see what it used to be.
  • A key written under an alias is rewritten under its real name. shell becomes command, font-bold becomes text-bold. The value is unchanged — only the spelling is, so that resetting it later actually clears it.

See also

Otty