herdr/CONFIGURATION.md

247 lines
5.7 KiB
Markdown

# configuration
herdr reads config from:
```text
~/.config/herdr/config.toml
```
print the full default config with:
```bash
herdr --default-config
```
if a config value is invalid, or two navigate actions use the same keybinding, herdr falls back to a safe default and shows a startup warning in the UI.
## onboarding
```toml
onboarding = true
```
| option | default | description |
|--------|---------|-------------|
| `onboarding` | unset | show first-run notification setup; set `false` after choosing |
notes:
- missing `onboarding` currently behaves like `true`
- set `onboarding = true` to force the setup screen again for testing
- after onboarding, herdr writes `onboarding = false` plus the chosen sound/toast settings
## keybindings
keybindings live under `[keys]`.
supported syntax:
- plain keys: `n`, `x`, `-`, `` ` ``
- modifiers: `ctrl+b`, `shift+n`, `alt+x`
- special keys: `enter`, `esc`, `tab`, `backspace`
- function keys: `f1`, `f12`
- uppercase letters also imply shift: `D` works like `shift+d`
notes:
- most reliable bindings are plain keys, `ctrl+letter`, `esc`/`tab`/`enter`, and function keys
- `alt+...` and punctuation-with-modifiers may vary depending on terminal/tmux setup
- for navigate-mode actions, duplicate keybindings are treated as config errors; later conflicting bindings fall back to defaults
example:
```toml
[keys]
prefix = "ctrl+b"
new_workspace = "n"
rename_workspace = "shift+n"
close_workspace = "d"
split_vertical = "v"
split_horizontal = "-"
close_pane = "x"
fullscreen = "f"
resize_mode = "r"
toggle_sidebar = "b"
```
### key reference
| key | default | action |
|-----|---------|--------|
| `prefix` | `ctrl+b` | enter or leave navigate mode |
| `new_workspace` | `n` | create a new workspace |
| `rename_workspace` | `shift+n` | rename selected workspace |
| `close_workspace` | `d` | close selected workspace |
| `split_vertical` | `v` | split pane vertically (side by side) |
| `split_horizontal` | `-` | split pane horizontally (stacked) |
| `close_pane` | `x` | close focused pane |
| `fullscreen` | `f` | toggle focused pane fullscreen |
| `resize_mode` | `r` | enter or leave resize mode |
| `toggle_sidebar` | `b` | collapse or expand the sidebar |
## theme
herdr ships with 9 built-in color themes. set one in config:
```toml
[theme]
name = "tokyo-night"
```
### built-in themes
| name | description |
|------|-------------|
| `catppuccin` | soft pastel mocha palette (default) |
| `tokyo-night` | blue-purple aesthetic |
| `dracula` | purple/pink/green classic |
| `nord` | frosty scandinavian blues |
| `gruvbox` | warm retro browns/oranges |
| `one-dark` | atom's beloved palette |
| `solarized` | ethan schoonover's classic |
| `kanagawa` | hokusai-inspired |
| `rose-pine` | muted, elegant |
theme names are flexible: `tokyo-night`, `tokyonight`, and `tokyo_night` all work.
### custom overrides
override individual color tokens on top of any base theme:
```toml
[theme]
name = "dracula"
[theme.custom]
accent = "#f5c2e7"
red = "rgb(255, 85, 85)"
green = "#a6e3a1"
```
all tokens are optional — only set what you want to change.
### available tokens
| token | used for |
|-------|----------|
| `accent` | highlights, active borders, navigation UI |
| `surface0` | selected item background |
| `surface1` | hover/active backgrounds |
| `surface_dim` | active workspace background, separators |
| `overlay0` | muted text, secondary info |
| `overlay1` | slightly brighter secondary text |
| `text` | primary text |
| `subtext0` | workspace names, dimmed labels |
| `mauve` | git branch names, special labels |
| `green` | idle/done states |
| `yellow` | busy/running states |
| `red` | waiting/needs attention states |
| `blue` | unseen notifications |
| `teal` | done notification accents |
| `peach` | interrupted/warning states |
tokens accept the same color formats as `accent`: hex (`#rrggbb`), named colors, or `rgb(r,g,b)`.
## ui
```toml
[ui]
sidebar_width = 26
confirm_close = true
accent = "cyan"
```
### options
| option | default | description |
|--------|---------|-------------|
| `sidebar_width` | `26` | base sidebar width before auto-scaling |
| `confirm_close` | `true` | ask before closing a workspace |
| `accent` | `cyan` | highlight and border color |
`accent` accepts:
- named colors like `cyan`, `blue`, `magenta`
- hex like `#89b4fa`
- rgb like `rgb(137,180,250)`
## toast notifications
```toml
[ui.toast]
enabled = false
```
### options
| option | default | description |
|--------|---------|-------------|
| `ui.toast.enabled` | `false` | show top-right visual toasts for background agent events |
current v1 behavior:
- informational only
- one toast at a time
- top-right placement
- shown for background agent events like `needs attention` and `finished`
- no keyboard action or temporary key semantics
## sound
```toml
[ui.sound]
enabled = true
[ui.sound.agents]
claude = "default"
droid = "off"
```
### options
| option | default | description |
|--------|---------|-------------|
| `ui.sound.enabled` | `true` | enable background agent sounds |
per-agent values:
- `default`
- `on`
- `off`
available agent keys:
- `pi`
- `claude`
- `codex`
- `gemini`
- `cursor`
- `cline`
- `open_code`
- `github_copilot`
- `kimi`
- `droid`
- `amp`
## advanced
```toml
[advanced]
allow_nested = false
```
### options
| option | default | description |
|--------|---------|-------------|
| `advanced.allow_nested` | `false` | allow launching herdr from inside a herdr-managed pane |
notes:
- by default, herdr blocks nested launches when `HERDR_ENV=1` is already present
- this is mainly an escape hatch for debugging or intentionally weird setups
## environment variables
| variable | description |
|----------|-------------|
| `HERDR_LOG` | log level filter (default: `herdr=info`) |
logs are written to:
```text
~/.config/herdr/herdr.log
```