Last active
August 21, 2026 08:00
-
-
Save shanzi/f47aa61e98d0108e1b2aee7eede4f580 to your computer and use it in GitHub Desktop.
Herdr Config
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # herdr config -- ~/.config/herdr/config.toml | |
| # herdr 0.8.2, macOS + WezTerm. tmux-style keybindings, prefix = ctrl+s. | |
| # | |
| # Install: copy the block below to ~/.config/herdr/config.toml, then | |
| # herdr config check && herdr server reload-config | |
| # | |
| # Notes for anyone reusing this: | |
| # - keys.copy_mode is a real action in 0.8.2 but is missing from | |
| # `herdr --default-config`; it validates fine. | |
| # - Direct (prefix-free) bindings only work reliably as plain ctrl+letter. | |
| # ctrl+alt+..., f7/f8, ctrl+shift+..., and ctrl+tab all failed to register | |
| # in WezTerm on macOS -- shift/alt are lost on control characters. | |
| # - prefix+prefix (ctrl+s ctrl+s) is reserved: it sends a literal ctrl+s. | |
| onboarding = false | |
| [ui.toast] | |
| delivery = "terminal" | |
| [ui] | |
| agent_panel_sort = "spaces" | |
| tab_bar_position = "bottom" | |
| prompt_new_tab_name = false | |
| # Keybindings mirroring ~/.config/tmux/tmux.conf | |
| [keys] | |
| prefix = "ctrl+s" | |
| # tmux: bind C-a / a new-window | |
| new_tab = "prefix+a" | |
| # tmux: bind C-x kill-pane | |
| close_pane = "prefix+ctrl+x" | |
| # tmux: bind C-d detach | |
| detach = "prefix+ctrl+d" | |
| # tmux: bind C-s last-window (prefix+prefix is reserved in herdr, so this lands on prefix+tab; | |
| # herdr has no last-tab action, so this is the back-and-forth pane toggle) | |
| last_pane = "prefix+tab" | |
| cycle_pane_next = "" # freed up for last_pane; prefix+shift+tab still cycles | |
| # tmux: bind d split-window -h (left/right) | |
| split_vertical = "prefix+d" | |
| # tmux: bind D split-window -v (top/bottom) | |
| split_horizontal = "prefix+shift+d" | |
| # tmux: bind h/j/k/l select-pane | |
| focus_pane_left = "prefix+h" | |
| focus_pane_down = "prefix+j" | |
| focus_pane_up = "prefix+k" | |
| focus_pane_right = "prefix+l" | |
| # tmux: bind c copy-mode -- prefix+c now sends ctrl+o to the pane (see keys.command | |
| # below), so scrollback-in-$EDITOR moves back to herdr's default key | |
| edit_scrollback = "prefix+e" | |
| # tmux: . , [ ] resize-pane -- herdr resizes inside a mode, so hjkl/arrows there | |
| resize_mode = "prefix+r" | |
| # moved off prefix+shift+d, which split_horizontal now uses | |
| close_workspace = "prefix+shift+q" | |
| # quick fork: git worktree in its own workspace (default was prefix+shift+g) | |
| new_worktree = "prefix+f" | |
| open_worktree = "prefix+ctrl+f" # reopen an existing worktree | |
| remove_worktree = "prefix+shift+f" # opens a confirmation prompt | |
| # vi-style list movement inside navigate mode (prefix+g): j/k walk the sidebar, | |
| # h/l step panes, shift+j/shift+k keep pane up/down reachable | |
| navigate_workspace_up = "k" | |
| navigate_workspace_down = "j" | |
| navigate_pane_left = "h" | |
| navigate_pane_right = "l" | |
| navigate_pane_up = "shift+k" | |
| navigate_pane_down = "shift+j" | |
| # step through agent rows; ctrl+alt+j/k and f7/f8 did not work here -- wezterm sends | |
| # alt as an esc prefix, and macos eats f7/f8 as media keys. ctrl+letter arrives as a | |
| # single control byte, so it decodes reliably; herdr swallows it in every pane. | |
| next_agent = "ctrl+y" # prefix-free: loops forward over all agents | |
| previous_agent = "prefix+shift+k" # ctrl+shift+y and ctrl+tab both failed to register | |
| # tmux: bind c copy-mode. herdr 0.8.2 ships a native vi copy mode (undocumented in | |
| # --default-config, but keys.copy_mode validates): h/j/k/l w/b/e { } motions, | |
| # / ? n/N search, v/space select, y/enter copy, q/esc exit. | |
| copy_mode = "prefix+c" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment