# laguna
laguna is a dynamic tiling window manager for the non-monolithic `river`
compositor. It uses upstream river v0.4.8 and stable river protocols only.
`river` owns Wayland clients, rendering and frame synchronisation. `laguna`
owns tags, focus, keybindings, layout policy and window management
decisions. The two programs communicate through the stable
`river-window-management-v1` protocol. Input configuration uses stable river
input protocols.
This repository builds `laguna`. Install upstream river separately.
Features without a protocol surface are not supported:
- external layout generators
- compositor background and cursor hiding
- lid-switch bindings
- keyboard groups
## Build
You need:
- Zig 0.16
- wayland
- wayland-protocols
- xkbcommon 1.12 or newer
- pkg-config
- scdoc for man pages
Build and install with:
```text
zig build -Doptimize=ReleaseSafe --prefix ~/.local install
```
## Run
Start `river` from your session startup command. Start `laguna` from
`$XDG_CONFIG_HOME/river/init` or `$HOME/.config/river/init`.
## Configure
`laguna` reads its configuration from `$XDG_CONFIG_HOME/river/laguna.zon`
and falls back to `$HOME/.config/river/laguna.zon`. Unknown fields are
rejected, so typos fail loudly at startup. See `example/laguna.zon` for a
full configuration with keybindings, input settings, rules and theme.
`laguna` supports protocol lifecycle, tiling layout with an adjustable main
area, tag visibility, focus cycling, keyboard and pointer bindings with
modes, interactive move and resize, float and fullscreen state, window
rules, input device configuration, keyboard layouts, layer-shell awareness,
floating window operations, multi-output focus and routing, cursor policy,
borders, `close` and `exit`.