Configuration

Config file: ~/.config/zurm/config.toml — created automatically on first launch with all defaults.

Hot-reload with Cmd+, — no restart needed.

Full Reference

[font]
family = "JetBrains Mono"    # font family name (informational)
size   = 15                   # font size in points (clamped to 6–72)
# file = "/path/to/Font.ttf" # custom TTF/OTF; overrides embedded JetBrains Mono
# fallbacks = [...]           # see Optional Fonts page

[window]
columns = 120    # initial terminal width in character columns (min 1)
rows    = 35     # initial terminal height in character rows (min 1)
padding = 4      # pixels inside each pane edge (min 0)

[shell]
program = ""       # shell binary; empty = read from $SHELL, fallback /bin/zsh
args    = ["-l"]   # arguments passed to the shell

[scrollback]
lines = 10000   # scrollback buffer size per pane

[scroll]
wheel_lines_per_tick = 3      # lines scrolled per mouse wheel tick
smooth                = false  # ease-out animation instead of instant jump (wheel only)
smooth_factor         = 0.25   # animation speed: fraction of distance closed per frame (0.1 slow … 0.5 fast)

[performance]
tps             = 30     # Ebitengine tick rate (Update calls/sec); lower = less idle CPU
auto_idle       = true   # reduce TPS when unfocused to save CPU; false = keep rendering
memory_limit_mb = 1536   # soft memory ceiling (MB); GC runs harder near this limit; 0 = unlimited
pprof           = false  # enable net/http/pprof endpoint on localhost for profiling
pprof_port      = 6060   # port for pprof HTTP server (localhost only)

[input]
double_click_ms = 300     # max ms between clicks to register as double-click
cursor_blink    = false   # true = blinking cursor at 530 ms; false = steady

[tabs]
max_width_chars = 24      # maximum tab label width in character cells
new_tab_dir     = "cwd"   # "cwd" = inherit active tab's directory; "home" = $HOME
max_open        = 10      # max visible (non-parked) tabs; 0 = unlimited

[tabs.hover]
enabled  = true    # show minimap popover when hovering a background tab
delay_ms = 300     # ms before popover appears
width    = 320     # popover width in logical pixels
height   = 200     # popover height in logical pixels

[panes]
divider_width_pixels = 1   # pixel width of the border between panes

[keyboard]
left_option_as_meta = true   # left Option sends ESC-prefix (word delete, etc.)
                              # right Option still composes macOS characters
repeat_delay_ms     = 500    # ms before key repeat starts
repeat_interval_ms  = 50     # ms between repeated key events (~20/sec)

[status_bar]
enabled              = true
show_cwd             = true    # current working directory
show_git             = true    # git branch name
show_clock           = false   # forces a redraw every second
show_process         = true    # foreground process name (polls every 1s); when ssh, shows [SSH] user@host
show_commit          = true    # short commit hash next to branch name
show_dirty           = true    # modified (~N) and staged (+N) file counts
show_ahead_behind    = true    # commits ahead/behind upstream (N^ Nv)
branch_prefix        = ""      # set to " " with a Nerd Font
segment_separator    = " · "   # separator between status bar segments
separator_height_px  = 1       # height of top border line (0 = hidden)
padding_px           = 4       # top padding above text

[help]
enabled       = true    # all in-app help surfaces
context_menu  = true    # right-click opens context menu (set false for PTY apps that use right-click)
close_confirm = true    # ask before closing a tab or pane

[session]
enabled           = true    # save/restore session on quit/launch
restore_on_launch = true    # reopen tabs with last CWDs and titles
auto_save         = false   # automatically save session on quit

[file_explorer]
enabled   = true       # file explorer sidebar
side      = "left"     # "left" or "right"
width_pct = 35         # panel width as percent of screen width

[blocks]
enabled       = false        # OSC 133 command blocks; toggle at runtime with Cmd+B (requires shell hooks)
show_duration = true         # show elapsed execution time
show_border   = true         # draw 4-sided border + bg tint (false = badges + hover buttons only)
border_width  = 3            # width in pixels of the left accent stripe
border_color  = "#1C1C2E"    # border color when exit status is unknown
success_color = "#34D399"    # border color for exit code 0
fail_color    = "#F87171"    # border color for non-zero exit codes
bg_color      = ""           # optional hex background tint (empty = none)
bg_alpha      = 0.0          # opacity of background tint (0.0-1.0)
max_history   = 1000         # max completed blocks retained per pane (0 = unlimited)

[bell]
style       = "visual"   # "visual" = screen flash; "none" = disabled
sound       = true        # play system beep sound (NSBeep)
duration_ms = 150         # flash duration in ms
color       = "#F59E0B"   # hex color for the visual flash

[vault]
enabled          = false        # encrypted local command history + ghost suggestions
ghost_text       = true         # show inline ghost suggestions while typing; false = keep history without suggestions
history_path     = ""           # path to zsh history file; empty = ~/.zsh_history
vault_path       = ""           # encrypted vault file path; empty = ~/.config/zurm/vault.enc
ignore_prefix    = " "          # commands starting with a space are never stored (type " ssh ..." to hide it)
suggestion_color = "#555570"    # ghost text color for inline suggestions
max_entries      = 0            # cap on stored commands; 0 = unlimited
sync_interval    = 0            # seconds between zsh history re-imports; 0 = import once at startup
# Encryption key: ~/.config/zurm/vault.key (auto-generated, 32-byte AES-256 key, mode 0600)
# Right arrow accepts the ghost suggestion; space-prefix keeps commands private.

[server]
address = ""      # Unix socket path of zurm-server; empty = ~/.config/zurm/server.sock
binary  = ""      # path to zurm-server binary; empty = look next to zurm binary, then PATH
# Use Cmd+Shift+B to open a server-backed tab on demand. zurm-server is
# auto-started when needed — no manual launch or enabled flag required.

[theme]
name = ""   # theme filename without .toml (e.g. "dark"); empty = no theme
            # themes live in ~/.config/zurm/themes/

[colors]
background = "#0F0F18"
foreground = "#E8E8F0"
cursor     = "#A855F7"
border     = "#1C1C2E"
separator  = "#555570"   # shared separator line color for tab bar and status bar

# 16-color ANSI palette
black          = "#555570"
red            = "#F87171"
green          = "#34D399"
yellow         = "#F59E0B"
blue           = "#7C3AED"
magenta        = "#C084FC"
cyan           = "#67E8F9"
white          = "#8888A8"
bright_black   = "#555570"
bright_red     = "#F87171"
bright_green   = "#34D399"
bright_yellow  = "#F59E0B"
bright_blue    = "#A855F7"
bright_magenta = "#C084FC"
bright_cyan    = "#67E8F9"
bright_white   = "#E8E8F0"

# Markdown viewer colors (Cmd+M reader mode)
md_bold             = "#FFFFFF"   # bold text
md_heading          = "#FFFFFF"   # heading text (# ## ###)
md_code             = "#A0D080"   # inline code and code block text
md_code_border      = "#606060"   # border around code blocks
md_table_border     = "#505050"   # table grid lines
md_match_bg         = "#808000"   # search match highlight background
md_match_current_bg = "#FFCC00"   # current search match highlight
md_badge_bg         = "#FFCC00"   # badge/label background (e.g. line count)
md_badge_fg         = "#000000"   # badge/label text color

Shell Hooks

Command blocks (OSC 133) require shell hooks. Install via the command palette: Cmd+P then search “Install shell hooks”.

Themes

External TOML theme files live in ~/.config/zurm/themes/. Set [theme] name to the filename without .toml. A theme overrides any [colors] values it defines.

Keybindings

All keybindings are discoverable in-app via Cmd+/ (help overlay) or Cmd+P (command palette).