Introduction
Jarvis uses a single TOML configuration file with sensible defaults for every field. You only need to override the values you want to change—missing fields are automatically filled with their defaults.The configuration schema version is 1 (
CONFIG_SCHEMA_VERSION = 1).Config File Location
Jarvis resolves its configuration file using the platform’s standard config directory under thejarvis/ subfolder:
| Platform | Path |
|---|---|
| macOS | ~/Library/Application Support/jarvis/config.toml |
| Linux | ~/.config/jarvis/config.toml |
| Windows | C:\Users\<USER>\AppData\Roaming\jarvis\config.toml |
If the file does not exist when Jarvis starts, it creates a default
config.toml populated with commented-out documentation for every section.How Configuration Loading Works
The configuration system follows a four-step process:Load TOML
The
config.toml file is read and deserialized. All fields use #[serde(default)], so a partial config (or even an empty file) works correctly.Apply theme
If
theme.name is anything other than "jarvis-dark", the theme file is located and its overrides are merged into the config.Discover plugins
The
~/.config/jarvis/plugins/ directory is scanned for local plugin folders containing a plugin.toml manifest.Minimal Configuration Example
An empty file or just a theme selection is valid:config.toml
Complete Configuration Sections
The configuration file is organized into the following sections:Theme
Color schemes and visual customization
Colors
Full color palette with Catppuccin Mocha defaults
Font
Typography for terminal/code and UI elements
Terminal
Terminal emulator settings: scrollback, cursor, bell, mouse
Shell
Shell process configuration
Window
Window appearance and behavior
Layout
Panel layout geometry and tiling
Opacity
Transparency settings for all UI layers
Background
Background display modes (hex grid, solid, image, video, gradient)
Effects
Visual effects: scanlines, vignette, bloom, glow, flicker
Visualizer
Central visualizer system (orb, particle, waveform)
Keybinds
Keyboard shortcuts
Hot Reload
Jarvis supports live configuration reloading—you can editconfig.toml while Jarvis is running and changes will take effect automatically.
How It Works
Reload System Architecture
Reload System Architecture
The reload system has three layers:
-
ConfigWatcher — Uses the
notifycrate to watch the config file’s parent directory for filesystem events (ModifyandCreateevents). It filters events to only react to changes affecting the actual config file by matching the filename. - Debouncing — When a change is detected, the watcher enters a 500ms debounce window. Any additional filesystem events during this window are coalesced into a single reload. This prevents rapid reloads when editors perform atomic saves (write to temp file + rename).
-
ReloadManager — Listens for change signals from the watcher, then:
- Re-reads and parses the TOML file
- Applies the selected theme (if not
jarvis-dark) - Validates the new configuration
- Publishes the new config via a
tokio::sync::watchchannel
What Triggers a Reload
- Saving the config file in any text editor
- Replacing the file via copy/rename
- Any
ModifyorCreatefilesystem event on the config file
Config Validation Rules
After loading and theme application, the config is validated against constraints. If any fail, Jarvis returns aConfigError::ValidationError with all violations.
Common Validation Rules
Valid range: 8–32
Valid range: 1–20 pixels
Valid range: 1–10 panels
All opacity fields: 0.0–1.0
No duplicate bindings — Each key combination must be unique
Example Configurations
Config API Reference
Loading Configuration
Saving Configuration
Writes are atomic: the config is first written to a
.tmp file, then renamed to the final path. If the rename fails (on Windows), it falls back to a direct write.