No description
Find a file
Ben Buhse 5c427234d7
Add layer shell support and fix floating windows
Now, I actually save the river-layer-shell-v1 and keep track of the
non-exclusive area. The layout calculation uses the usable area instead
of the entire output's geometry.

I removed boundary clamping for the floating windows because it was a
bit janky when hitting the edges. I'll probably add it back at some
point. I also made windows default to 75% of the usable area instead of
keeping their tiled size so that maximized windows look decent when
floating for the first time. Finally, since I removed the clamping, I
added a center_float keybind to center a floating window. If you're
cycling through focused windows and one isn't on the screen, you can use
the center_float bind to get the window visible again.

Replaced all divTrunc with divFloor to be consistent. I think they
should all be positive, anyways, so they'd be the same, but I like just
having one.
2026-02-14 11:30:37 -06:00
docs Add layer shell support and fix floating windows 2026-02-14 11:30:37 -06:00
examples Implement per-tag primary_count and primary_ratio 2026-02-12 14:10:21 -06:00
LICENSES Add REUSE licensing for non-code files 2026-02-11 14:50:04 -06:00
protocol Implement river-input-management-v1 and river-libinput-config-v1 2026-02-09 12:55:47 -06:00
src Add layer shell support and fix floating windows 2026-02-14 11:30:37 -06:00
.gitignore initial commit 2025-05-03 21:07:26 -05:00
build.zig Add initial bar support 2026-02-13 10:07:48 -06:00
build.zig.zon Add clock to the bar 2026-02-13 12:20:35 -06:00
README.md Update README.md, add docs/CONFIGURATION.md 2026-02-11 20:22:41 -06:00
REUSE.toml Update README.md, add docs/CONFIGURATION.md 2026-02-11 20:22:41 -06:00

beansprout

Overview

A tiling window manager for the river Wayland compositor written in Zig. The window manager communicates using the river-window-management-v1 protocol, as well as some of River's additional Wayland protocols.

Beansprout uses a primary/stack tiling layout inspired by dwm with a customizable ratio and primary count. Similarly, beansprout has a 32-bit tag system, rather than workspaces. Each output has its own tags and own primary count/ratio.

Building

Requires Zig 0.15.1 or later.

Dependencies

To compile beansprout, you'll need the dependencies found below. I've listed the package names for Gentoo and Debian/Ubuntu, but they likely exist on all major distros.

Needed at both build-time and runtime:

Dependency Gentoo Name Debian/Ubuntu Name
wayland-client dev-libs/wayland libwayland-dev
pixman x11-libs/pixman libpixman-1-dev
xkbcommon x11-libs/libxkbcommon libxkbcommon-dev

Only needed at build-time:

Dependency Gentoo Name Debian/Ubuntu Name
wayland-protocols dev-libs/wayland-protocols wayland-protocols

Note for Gentoo Users

Beansprout is available in my personal ebuild repo. Right now, it's just a live ebuild, but I will add versioned ebuilds once v0.1.0 is released.

Build

Build and install with:

zig build -Doptimize=ReleaseSafe --prefix ~/.local install

Run zig build -h to see a list of all options.

Usage

You can either add beansprout to the river init file or directly run river -c beansprout.

If you need to exit river, for example, if beansprout crashes, you can use river's hardcoded Ctrl+Alt+Delete keybind.

Configuration

Beansprout is configured with a KDL file at $XDG_CONFIG_HOME/beansprout/config.kdl. See docs/CONFIGURATION.md for a full reference and examples/config.kdl for an example config.

Licensing

This project follows the REUSE Specification, all files have SPDX copyright and license information and/or are listed under REUSE.toml.

In overview:

  • beansprout's source code is released under the GPL-3.0-only license.
  • beansprout's documentation is released under the CC-BY-4.0 license.
  • beansprout's examples are released under the CC0-1.0 license.

All licenses can be found under LICENSES