Tree


.gitignorecommits | blame
LICENSEcommits | blame
PACKAGING.mdcommits | blame
README.mdcommits | blame
build.zigcommits | blame
build.zig.zoncommits | blame
doc/
example/
logo/
protocol/
src/

README.md

# 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`.