Configuration
Everything lives in one TOML file:
~/Library/Application Support/novalis/config.tomlThe Settings window (⌘,) is generated from the same schema that validates the file; every toggle you see maps to a key you can set by hand. Writes are atomic and lock-protected; edit the file externally and the app picks it up.
A representative slice
Section titled “A representative slice”[appearance]font_family = "JetBrains Mono"font_size = 13.5theme = "novalis"unfocused_pane_dim = 0.15 # 0 = offcursor_animation_ms = 100 # 0 = teleport like it's 1978
[terminal]scroll_animation_ms = 150 # eased scroll-to; 0 = instantscrollbar = true # fading scrollback thumbbell_visual = true # border pulse on BELshift_enter_newline = true # newline in TUIs instead of submitcopy_on_select = false
[teams]spawn_layout = "split" # where teammates land: split | tab | workspaceThe workspace rail’s ringing behaviour is a key in [appearance]:
[appearance]workspace_activity_mode = "reorder" # or "dot" (badge, fixed order) | "off" (total silence)It moves a card only on high-signal events — a command that actually ran, an agent finishing a turn, a bell. Focus, clicks, and raw output never count.
Principles
Section titled “Principles”- A persisted key beats any new default. Your file wins over whatever a new build ships; settings never silently reset.
- Kill switches everywhere. Every animation and every experimental subsystem has a config or environment off-switch.
- Secrets never touch the file. Provider keys live in the OS keychain.
Config can push and pull through a Novalis Drive endpoint you control; same file, every machine. Payloads are obfuscated with a token-derived keystream so a shared server can’t casually read them — treat that as privacy, not cryptography. A real end-to-end scheme is on the road to 1.0; secrets live in the keychain and never sync at all.