Skip to content

About

Hyprland-style pane movement and tmux-style layouts for Herdr

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

herdr-tiling banner

herdr-tiling

A tiling layout plugin for Herdr, inspired by Hyprland's Dwindle layout. It adds directional pane movement, split toggling, and tmux-style preset layouts while preserving running processes and scrollback.

Why herdr-tiling?

  • Herdr does not provide an action for moving a pane within the layout.
  • Herdr does not provide a way to toggle an existing split between horizontal and vertical.
  • The same preset layouts as tmux make it quick to arrange every pane in a tab.

Demo

Move pane Toggle split Preset layouts
Move a pane Toggle a split Cycle preset layouts

Install

Requirements:

  • Herdr 0.9.0 or later
  • Linux and macOS on x86_64 or arm64
  • curl or wget
  • sha256sum or shasum

Install herdr-tiling directly from GitHub with Herdr's plugin manager. Herdr downloads and verifies the prebuilt binary, so Rust is not required.

herdr plugin install jaeheonji/herdr-tiling

Add key bindings to ~/.config/herdr/config.toml. This example uses Herdr's default Ctrl+B prefix followed by the listed keys:

[[keys.command]]
key = "prefix+shift+h"
type = "plugin_action"
command = "herdr-tiling.move-left"
description = "Move pane left"

[[keys.command]]
key = "prefix+shift+j"
type = "plugin_action"
command = "herdr-tiling.move-down"
description = "Move pane down"

[[keys.command]]
key = "prefix+shift+k"
type = "plugin_action"
command = "herdr-tiling.move-up"
description = "Move pane up"

[[keys.command]]
key = "prefix+shift+l"
type = "plugin_action"
command = "herdr-tiling.move-right"
description = "Move pane right"

[[keys.command]]
key = "prefix+shift+v"
type = "plugin_action"
command = "herdr-tiling.toggle-split"
description = "Toggle split direction"

[[keys.command]]
key = "prefix+space"
type = "plugin_action"
command = "herdr-tiling.cycle"
description = "Cycle pane layout"

Change the keys if needed, then reload the running Herdr server:

herdr server reload-config

Local development

Build from source and link the checkout when developing locally:

cargo build --release
herdr plugin link .

How it works

Move pane

Like Hyprland's movewindow, the directional actions remove the focused pane and collapse its old split. The plugin finds the pane nearest to the requested direction, then inserts the moved pane beside it with a 50/50 split. The new split follows the target pane's shape. Other split directions and ratios remain unchanged.

Toggle split

Like Hyprland's togglesplit, toggle-split switches the focused pane's direct parent between a side-by-side and stacked split. Child order, split ratio, focus, and all other splits remain unchanged. The action does nothing when there is only one pane.

Herdr does not expose in-place reparenting. The plugin briefly rebuilds the layout by moving live panes through a temporary tab. Pane processes, scrollback, focus, and zoom state are preserved.

Configuration

Use config.example.json as a template. Save its contents as config.json in the plugin configuration directory:

config_dir="$(herdr plugin config-dir herdr-tiling)"
mkdir -p "$config_dir"
"${EDITOR:-vi}" "$config_dir/config.json"
{
  "cycle_layouts": [
    "even-horizontal",
    "even-vertical",
    "main-horizontal",
    "main-vertical",
    "tiled"
  ],
  "main_ratio": 0.5,
  "notification": true,
  "notification_position": "top-right"
}
Setting Description Default
cycle_layouts Presets used by the cycle action, in order. Valid values are even-horizontal, even-vertical, main-horizontal, main-vertical, and tiled. The list must not be empty or contain duplicates. All five presets in the order above
main_ratio Share of the tab used by the main pane in main-horizontal and main-vertical. Must be between 0.1 and 0.9. 0.5
notification Show a Herdr notification such as even-horizontal → even-vertical when a layout action changes the layout. No sound. true
notification_position Notification corner: top-left, top-right, bottom-left, or bottom-right. "top-right"

All settings are optional. If config.json does not exist, the defaults above are used. Unknown settings and invalid values are rejected before the layout changes.

Limitations

Based on Herdr 0.9.5:

  • Brief flicker. Herdr cannot reshape a layout in place. Every action rebuilds the layout by moving live panes through a temporary tab, so the screen may flicker for a moment. Processes and scrollback are preserved.
  • Fast layout changes may skip notifications. Herdr rate-limits notifications (about one per second) and does not let a plugin replace or dismiss a toast. When you change layouts quickly, some notifications are dropped and a newer one may not appear until the previous toast disappears. The layout itself always changes correctly. Set notification to false to turn notifications off.

License

MIT

About

Hyprland-style pane movement and tmux-style layouts for Herdr

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages