Skip to content

Commit 150d6e0

Browse files
committed
Document Herdr configuration options
1 parent 64dc046 commit 150d6e0

1 file changed

Lines changed: 361 additions & 0 deletions

File tree

src/dot_config/herdr/config.toml

Lines changed: 361 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,362 @@
1+
# herdr configuration
2+
# Place this file at ~/.config/herdr/config.toml
3+
4+
# Show first-run notification setup on startup.
5+
# Missing also shows onboarding; set false after you've chosen.
16
onboarding = false
7+
8+
[theme]
9+
# Built-in themes: catppuccin, terminal, tokyo-night, dracula, nord,
10+
# gruvbox, one-dark, solarized, kanagawa, rose-pine,
11+
# vesper
12+
# name = "catppuccin"
13+
14+
# Follow host terminal light/dark appearance and switch Herdr UI themes.
15+
# Existing manual behavior is unchanged unless this is true.
16+
# auto_switch = false
17+
# dark_name = "catppuccin"
18+
# light_name = "catppuccin-latte"
19+
20+
# Override individual color tokens on top of the base theme.
21+
# Accepts: hex (#rrggbb), named colors, rgb(r,g,b), or panel_bg = "reset"
22+
# [theme.custom]
23+
# sidebar_bg = "#181825"
24+
# active_row_bg = "#1e1e2e"
25+
# selection_bg = "#313244"
26+
# panel_bg = "reset"
27+
# accent = "#f5c2e7"
28+
# red = "#ff6188"
29+
# green = "#a6e3a1"
30+
31+
[terminal]
32+
# Executable used for new interactive panes.
33+
# Empty means $SHELL, then /bin/sh.
34+
# default_shell = ""
35+
36+
# Startup mode for new interactive pane shells: "auto", "login", or "non_login".
37+
# "auto" uses login shells on macOS and keeps the current behavior elsewhere.
38+
# shell_mode = "auto"
39+
40+
# CWD policy for new panes, tabs, and workspaces when no explicit --cwd is provided.
41+
# Use "follow" to inherit the source pane/workspace, "home" for $HOME,
42+
# "current" for Herdr's process directory, or a fixed path such as "~/Projects".
43+
# new_cwd = "follow"
44+
45+
[update]
46+
# Update channel used by background version checks and `herdr update`.
47+
# Stable builds default to "stable". Windows preview builds default to "preview"
48+
# so existing preview installs stay there until explicitly switched.
49+
# channel = "stable"
50+
51+
# Check herdr.dev for new Herdr versions in the background.
52+
# version_check = true
53+
54+
# Check herdr.dev for remote agent-detection manifest updates in the background.
55+
# manifest_check = true
56+
57+
[keys]
58+
# Prefix key to enter prefix mode (default: "ctrl+b")
59+
# Examples: "ctrl+b", "f12", "esc", "-"
60+
# Action bindings use explicit syntax: "prefix+n" requires the prefix;
61+
# "ctrl+alt+n" is a direct terminal-mode shortcut.
62+
# Accepted key syntax: plain keys, ctrl/shift/alt/cmd/super modifiers, and special keys like enter/tab/esc/left/right/up/down.
63+
# Named punctuation such as minus, comma, ampersand, plus, and backtick is also accepted.
64+
# Most reliable direct bindings are ctrl+letter, function keys, and explicit modified chords.
65+
# alt+..., cmd/super, and punctuation-with-modifiers may depend on your terminal/tmux setup.
66+
# prefix = "ctrl+b"
67+
68+
# Prefix-mode actions
69+
# help = "prefix+?"
70+
# settings = "prefix+s"
71+
# detach = "prefix+q"
72+
# reload_config = "prefix+shift+r"
73+
# open_notification_target = "prefix+o"
74+
# workspace_picker = "prefix+w"
75+
# goto = "prefix+g"
76+
# new_workspace = "prefix+shift+n"
77+
# new_worktree = "prefix+shift+g"
78+
# open_worktree = "" # optional, unset by default
79+
# remove_worktree = "" # optional, unset by default; opens confirmation
80+
# rename_workspace = "prefix+shift+w"
81+
# close_workspace = "prefix+shift+d"
82+
# previous_workspace = "" # optional, unset by default
83+
# next_workspace = "" # optional, unset by default
84+
# previous_agent = "" # optional, unset by default
85+
# next_agent = "" # optional, unset by default
86+
# focus_agent = "" # optional indexed binding, e.g. "prefix+alt+1..9"
87+
# remote_image_paste = "ctrl+v" # only active in herdr --remote; empty disables raw-key image paste
88+
# new_tab = "prefix+c"
89+
# rename_tab = "prefix+shift+t"
90+
# previous_tab = "prefix+p"
91+
# next_tab = "prefix+n"
92+
# move_tab_previous = "" # optional, e.g. "alt+shift+left" moves the tab toward the front
93+
# move_tab_next = "" # optional, e.g. "alt+shift+right" moves the tab toward the back
94+
# switch_tab = "prefix+1..9"
95+
# switch_workspace = "" # optional indexed binding, e.g. "prefix+shift+1..9"
96+
# close_tab = "prefix+shift+x"
97+
# rename_pane = "prefix+shift+p"
98+
# edit_scrollback = "prefix+e"
99+
# focus_pane_left = "prefix+h"
100+
# focus_pane_down = "prefix+j"
101+
# focus_pane_up = "prefix+k"
102+
# focus_pane_right = "prefix+l"
103+
# cycle_pane_next = "prefix+tab"
104+
# cycle_pane_previous = "prefix+shift+tab"
105+
# last_pane = "" # optional, unset by default; bind e.g. "prefix+tab" for global back-and-forth
106+
# split_vertical = "prefix+v"
107+
# split_horizontal = "prefix+minus"
108+
# close_pane = "prefix+x"
109+
# zoom = "prefix+z" # legacy alias: fullscreen
110+
# resize_mode = "prefix+r"
111+
# resize_pane_left = "" # optional, e.g. "ctrl+shift+alt+left" resizes without entering resize mode
112+
# resize_pane_down = "" # optional, e.g. "ctrl+shift+alt+down"
113+
# resize_pane_up = "" # optional, e.g. "ctrl+shift+alt+up"
114+
# resize_pane_right = "" # optional, e.g. "ctrl+shift+alt+right"
115+
# toggle_sidebar = "prefix+b"
116+
117+
# Navigate-mode movement. These local shortcuts win while navigate mode is open.
118+
# They are independent from focus_pane_*. Do not include prefix+, esc, enter, tab, or 1..9 here.
119+
# navigate_workspace_up = "up"
120+
# navigate_workspace_down = "down"
121+
# navigate_pane_left = "h" # left arrow always focuses the pane to the left
122+
# navigate_pane_down = "j"
123+
# navigate_pane_up = "k"
124+
# navigate_pane_right = "l" # right arrow always focuses the pane to the right
125+
126+
# Custom commands use the same binding syntax.
127+
# type = "shell" runs detached in the background.
128+
# type = "pane" opens a temporary pane and closes it when the command exits.
129+
# type = "popup" opens a session-modal terminal without changing the tab layout.
130+
# Popup width and height accept terminal cells or percentages such as "80%".
131+
# On Windows, command strings run through cmd.exe /d /c.
132+
# [[keys.command]]
133+
# key = "prefix+alt+g"
134+
# type = "popup"
135+
# command = "lazygit"
136+
# width = "80%"
137+
# height = "80%"
138+
139+
# Legacy indexed shortcut config is still parsed for compatibility.
140+
# Prefer switch_tab, switch_workspace, and focus_agent for new configs.
141+
# [keys.indexed]
142+
# tabs = "" # e.g. "ctrl" makes ctrl+1..9 switch tabs directly
143+
# workspaces = "" # e.g. "ctrl+shift" makes ctrl+shift+1..9 switch workspaces directly
144+
# agents = "" # e.g. "alt" makes alt+1..9 focus agent rows directly
145+
146+
# Size of the virtual terminal used when no client is attached.
147+
# Attached clients always use their own terminal size.
148+
[server]
149+
# headless_cols = 120
150+
# headless_rows = 40
151+
152+
# [worktrees]
153+
# directory = "~/.herdr/worktrees"
154+
155+
[ui]
156+
# Sidebar width (auto-scaled based on workspace names, this sets the default)
157+
# sidebar_width = 26
158+
159+
# Minimum sidebar width when expanded (columns)
160+
# sidebar_min_width = 18
161+
162+
# Maximum sidebar width when expanded (columns)
163+
# sidebar_max_width = 36
164+
165+
# Start with the sidebar collapsed. Changes take effect on the next launch.
166+
# sidebar_start_collapsed = false
167+
168+
# Collapsed sidebar presentation: "compact" keeps the narrow status rail, "hidden" uses zero width.
169+
# sidebar_collapsed_mode = "compact"
170+
171+
# Terminal width at or below which Herdr uses the mobile single-column layout.
172+
# Increase this for foldables, tablets, or wide phone terminals.
173+
# mobile_width_threshold = 64
174+
175+
# Capture mouse input for Herdr's mouse UI.
176+
# Set false to let the terminal handle normal clicks, such as Cmd-clicking URLs.
177+
# Pane apps like lazygit and btop can still receive mouse when they request it.
178+
# mouse_capture = true
179+
180+
# Automatically copy text selected with the mouse.
181+
# Set false to retain drag or double-click word selection until Ctrl+C,
182+
# or Cmd+C when the host forwards it, copies and clears it.
183+
# copy_on_select = true
184+
185+
# Host cursor policy: "auto", "native", or "drawn".
186+
# "auto" draws Herdr's own cursor on native Windows builds and WSL to avoid ConPTY cursor flicker, and uses the native terminal cursor elsewhere.
187+
# "native" always uses the outer terminal cursor. "drawn" always draws Herdr's cursor as terminal cell content.
188+
# host_cursor = "auto"
189+
190+
# Optional modifier that forwards right-click hold/drag gestures to pane apps instead of opening Herdr's pane menu.
191+
# Empty/off disables this. Shift is intentionally unsupported because terminals commonly reserve Shift+mouse.
192+
# right_click_passthrough_modifier = ""
193+
194+
# Force a full redraw when the outer terminal regains focus.
195+
# Set false to reduce visible flashing when switching back to Herdr.
196+
# Trade-off: rare host terminal surface corruption may persist until the next full redraw.
197+
# redraw_on_focus_gained = true
198+
199+
# Pane scrollback lines to scroll per mouse wheel notch.
200+
# mouse_scroll_lines = 3
201+
202+
# Ask for confirmation before closing a workspace
203+
# confirm_close = true
204+
205+
# Ask for a tab name before creating a new tab.
206+
# Set false to create tabs immediately with generated names.
207+
# prompt_new_tab_name = true
208+
209+
# Ask for a workspace name before interactive creation.
210+
# prompt_new_workspace_name = false
211+
212+
# Draw borders around split panes.
213+
# pane_borders = true
214+
215+
# Draw borders along the outside edge of the pane area.
216+
# Disable for tmux-style internal splitters without an outside frame.
217+
# pane_outer_borders = true
218+
219+
# Draw interactive scrollbars beside terminal panes.
220+
# Set false to reclaim the scrollbar column and keep it out of terminal-native selections.
221+
# pane_scrollbars = true
222+
223+
# Keep split panes visually separated instead of sharing divider borders.
224+
# pane_gaps = true
225+
226+
# Show detected/reported agent labels in split pane borders when no manual pane name is set.
227+
# show_agent_labels_on_pane_borders = false
228+
229+
# Hide the tab row when a workspace has exactly one tab.
230+
# New tabs can still be created with the configured keybinding.
231+
# hide_tab_bar_when_single_tab = false
232+
233+
# Desktop tab row placement: "top" or "bottom".
234+
# tab_bar_position = "top"
235+
236+
# Ordered status entries at the right edge of the desktop tab bar.
237+
# Supported types: zoom, hostname, datetime, text, and command.
238+
# Hostname, datetime, and command entries resolve on the Herdr server.
239+
# tab_bar_right = []
240+
# tab_bar_right_separator = " "
241+
242+
# Title Herdr writes to the terminal it runs in, which is what window managers
243+
# show in title, tab, and group bars. Tokens are {hostname}, {workspace}, {tab},
244+
# {pane}, and {terminal_title}; {{ and }} are literal braces.
245+
# The title renders on the Herdr server, so {hostname} names the host the panes
246+
# run on even when attaching from a remote client.
247+
# Set to "" to leave the outer terminal title alone.
248+
# window_title = "{hostname}: {workspace}"
249+
250+
# Agent panel ordering: "spaces" (grouped by space) or "priority" (attention queue).
251+
# "workspaces" is accepted as an alias for "spaces".
252+
# agent_panel_sort = "spaces"
253+
254+
# Agent status indicators: "dots" preserves the compact color marks; "symbols" uses
255+
# distinct static glyphs for blocked, working, done, idle, and unknown states.
256+
# status_indicators = "dots"
257+
258+
# Expanded agent rows. Built-ins are state_icon, state_text, workspace, tab, pane, agent,
259+
# terminal_title, and terminal_title_stripped.
260+
# Custom values reported through pane metadata use a $name token.
261+
# A token occurrence may be styled with { token = "workspace", fg = "#89b4fa", bold = true, dim = false }.
262+
# Omitted style fields preserve the contextual default.
263+
# [ui.sidebar.agents]
264+
# Blank rows between agent entries. Set to 1 to restore the previous spacing.
265+
# row_gap = 0
266+
# rows = [["state_icon", "workspace", "tab"], ["agent"]]
267+
# Optional canonical agent IDs replace the default rows for matching agents.
268+
# [ui.sidebar.agents.rows_by_agent]
269+
# claude = [["state_icon", "workspace", "tab"], ["terminal_title_stripped"], ["agent"]]
270+
271+
# Expanded space rows. Built-ins are state_icon, state_text, workspace, branch, and git_status.
272+
# Custom values reported through workspace metadata use a $name token, for example $jj_status.
273+
# Inline token styles accept strict #RGB/#RRGGBB foregrounds plus bold and dim booleans.
274+
# [ui.sidebar.spaces]
275+
# Blank rows between space entries. Set to 1 to restore the previous spacing.
276+
# row_gap = 0
277+
# rows = [["state_icon", "workspace"], ["branch", "git_status"]]
278+
279+
# Accent color for highlights, borders, and navigation UI.
280+
# Accepts: hex (#89b4fa), named colors (cyan, blue, magenta), or rgb(r,g,b)
281+
# accent = "cyan"
282+
283+
# Background notification popup delivery
284+
[ui.toast]
285+
# off = disable pop-up notifications
286+
# herdr = show in-app toasts
287+
# terminal = ask the outer terminal to show a desktop notification
288+
# system = ask the OS notification service directly
289+
# delivery = "off"
290+
# delay_seconds = 1
291+
292+
[ui.toast.herdr]
293+
# position = "bottom-right"
294+
295+
[ui.toast.clipboard]
296+
# enabled = true
297+
# position = "bottom-center"
298+
299+
# Play sounds when agents change state in background workspaces
300+
[ui.sound]
301+
# enabled = true
302+
# Optional custom mp3 sound files. Relative paths are resolved from this config file's directory.
303+
# path = "sounds/notification.mp3" # one mp3 file for all sound notifications
304+
# done_path = "sounds/done.mp3" # overrides only finished notifications
305+
# request_path = "sounds/request.mp3" # overrides only needs-attention notifications
306+
307+
# Per-agent overrides: default | on | off
308+
# By default, droid is muted.
309+
# [ui.sound.agents]
310+
# droid = "off"
311+
312+
[session]
313+
# Resume supported AI-agent panes into their native conversation sessions after
314+
# a Herdr server restart. Requires official integrations that report session refs.
315+
# resume_agents_on_restore = true
316+
317+
[remote]
318+
# Whether herdr manages the ssh config used for `herdr --remote`.
319+
# When true (default), herdr runs remote ssh through a generated config that
320+
# includes your ~/.ssh/config first and adds ServerAliveInterval/
321+
# ServerAliveCountMax as fallbacks (so any keepalive values you set yourself
322+
# still win) to survive idle network/NAT timeouts. Herdr also uses a private
323+
# per-attach OpenSSH control socket to reuse the first authenticated connection.
324+
# Set false to run plain ssh against your ssh config unchanged — this does not
325+
# force keepalive or multiplexing off, it only stops herdr from adding its own.
326+
# manage_ssh_config = true
327+
328+
[experimental]
329+
# Allow launching herdr from inside a herdr-managed pane.
330+
# allow_nested = false
331+
# Experimental local Kitty graphics rendering for attached clients.
332+
# Requires a Kitty graphics-compatible outer terminal.
333+
# kitty_graphics = false
334+
# Save recent pane screen history across full server restarts.
335+
pane_history = false
336+
# While prefix mode is active, temporarily switch the host input source to
337+
# an ASCII-capable mode so prefix commands register even when an IME is
338+
# active, then restore the previous input source when prefix mode exits. On
339+
# macOS this selects the ASCII-capable keyboard layout; on Windows it toggles
340+
# a Korean IME between Hangul and English (other IME languages are left
341+
# unchanged). macOS and Windows only; best-effort. Default: false.
342+
# switch_ascii_input_source_in_prefix = false
343+
# Expose the focused pane's cursor to the outer terminal so macOS input
344+
# methods keep tracking the candidate window when TUIs paint their own
345+
# cursor (Claude Code, pi, codex). Trade-off: extra cursor visible for
346+
# apps that hide it without painting a replacement (vim normal mode, etc.).
347+
# reveal_hidden_cursor_for_cjk_ime = false
348+
# Optional allow-list: only reveal for focused panes whose detected agent
349+
# matches one of these names. Empty means apply to any focused pane.
350+
# If the list contains no valid names, the reveal does not apply.
351+
# Accepted: pi, claude, codex, gemini, cursor, devin, cline, opencode,
352+
# copilot, kimi, kiro, droid, amp, grok, hermes, kilo, qodercli, qoder, qwen,
353+
# qwen-code, maki.
354+
# cjk_ime_agents = []
355+
# Cursor shape rendered when reveal_hidden_cursor_for_cjk_ime is true.
356+
# Values: block, steady_block (default), underline, steady_underline, bar, steady_bar.
357+
# cjk_ime_cursor_shape = "steady_block"
358+
359+
[advanced]
360+
# Maximum scrollback buffer size in bytes retained per pane terminal.
361+
# Matches Ghostty's default scrollback-limit behavior.
362+
# scrollback_limit_bytes = 10000000

0 commit comments

Comments
 (0)