diff options
| author | 2026-05-13 13:43:42 +0100 | |
|---|---|---|
| committer | 2026-05-13 13:43:42 +0100 | |
| commit | fd512ffcd1206260e8cf17e8bed0273c64658d30 (patch) | |
| tree | bef41591a81652085945a31fca094e457296b6be | |
| parent | 506b6f25697e4dd4e3b61c97dceaa5450f2be049 (diff) | |
| download | dotfiles-fd512ffcd1206260e8cf17e8bed0273c64658d30.tar.gz dotfiles-fd512ffcd1206260e8cf17e8bed0273c64658d30.tar.bz2 dotfiles-fd512ffcd1206260e8cf17e8bed0273c64658d30.zip | |
feat(sway): enable swayr auto-tile via systemd user unit
Vanilla sway only has splith/splitv with no auto-orientation, so new
windows always split along whatever axis the parent container is set
to (default splith). The result: opening a third window in a workspace
that's already split horizontally just keeps stacking horizontally,
even when each pane is now narrower than it is tall.
swayr's daemon (swayrd) subscribes to sway IPC and, with
[layout].auto_tile = true, issues splith or splitv on the focused
container based on its width-vs-height before sway places the next
window. The result is the i3/awesome-style spiral tiling: each new
window splits the focused pane along its longest side.
Run swayrd as a systemd user service bound to sway-session.target so
it starts/stops with the session (matching the pattern used by
waybar, swayidle, mako, etc.). No keybind changes; only the placement
algorithm.
| -rw-r--r-- | dot_config/swayr/config.toml | 9 | ||||
| -rw-r--r-- | dot_config/systemd/user/swayrd.service | 15 | ||||
| -rw-r--r-- | meta/base.txt | 5 | ||||
| -rw-r--r-- | systemd-units/user.txt | 1 |
4 files changed, 30 insertions, 0 deletions
diff --git a/dot_config/swayr/config.toml b/dot_config/swayr/config.toml new file mode 100644 index 0000000..13ee226 --- /dev/null +++ b/dot_config/swayr/config.toml @@ -0,0 +1,9 @@ +# swayr daemon config. The daemon (swayrd) runs as a systemd user +# service tied to sway-session.target. The only feature we use is +# auto-tile: on every new window, swayrd issues splith or splitv on +# the focused container based on its width-vs-height. Everything else +# (menu launcher, format strings, …) is unused — swayr is *not* bound +# to any keybinds here. + +[layout] +auto_tile = true diff --git a/dot_config/systemd/user/swayrd.service b/dot_config/systemd/user/swayrd.service new file mode 100644 index 0000000..82e4164 --- /dev/null +++ b/dot_config/systemd/user/swayrd.service @@ -0,0 +1,15 @@ +[Unit] +Description=swayr daemon (auto-tile + window-switcher IPC client) +Documentation=https://sr.ht/~tsdh/swayr/ +PartOf=graphical-session.target +After=graphical-session.target +ConditionEnvironment=SWAYSOCK + +[Service] +Type=simple +ExecStart=/usr/bin/swayrd +Restart=on-failure +RestartSec=2s + +[Install] +WantedBy=sway-session.target diff --git a/meta/base.txt b/meta/base.txt index 3c94a18..0d834e5 100644 --- a/meta/base.txt +++ b/meta/base.txt @@ -145,6 +145,11 @@ woff2-font-awesome # --- wayland session --- # Compositor sway +# Auto-tile daemon: splits new containers along the focused window's +# longest side via sway IPC. Configured in ~/.config/swayr/config.toml +# ([layout].auto_tile = true). Daemon runs as swayrd.service under +# sway-session.target. +swayr xdg-desktop-portal-wlr xdg-desktop-portal-gtk qt5-wayland diff --git a/systemd-units/user.txt b/systemd-units/user.txt index bc16c0e..8badf82 100644 --- a/systemd-units/user.txt +++ b/systemd-units/user.txt @@ -10,6 +10,7 @@ inhibridge.service pass-secret-service.service signal.service swayidle.service +swayrd.service waybar.service wob.service |
