bmrwm
Minimal River based scrolling window manager
Summary
| Latest Version | Unknown |
|---|---|
| License | Unknown |
| CI Status | Failing |
| Stars | 1 |
| Forks | 0 |
| Open Issues | 0 |
| Last Commit | 2026-07-29 |
| Downloads | 0 |
| Last Indexed | 2026-09-05 07:33 |
Tags
Installation
nimble install bmrwm
choosenim install bmrwm
git clone https://gitlab.com/LinusCM/bmrwm
OS Compatibility
| Platform | Linux | macOS | Windows | FreeBSD | OpenBSD | NetBSD | Android | iOS | WASM | Embedded |
|---|---|---|---|---|---|---|---|---|---|---|
| bmrwm | ✓ | ✓ | ✓ | - | - | - | - | - | - | - |
Source
| Repository | https://gitlab.com/LinusCM/bmrwm |
|---|---|
| Homepage | https://gitlab.com/LinusCM/bmrwm |
| Registry Source | gitlab |
README

About
BMRWM is a simple scrolling window manager, built on the River compositor and written in Go.
I wrote it for my own personal use, so the featureset is limited to my own needs. The codebase is well documented and written to be easily modified, so feel free to fork the project and make it your own.
Features
- Infinite horizontal space for windows.
- Multi output support, including support for adding and removing outputs at runtime.
- Each output keeps its own strip of windows.
- Move windows and focus freely between outputs.
- Windows can be 50% width, maximized or fullscreen.
- Custom shell commands can be bound to keybinds.

Links
Docs
Protocols & Reference
Nix/NixOS
Config
Keybinds, theme and monitor setup can be changed in ~/.config/bmrwm/config.json.
Check config.json for an example of a default config.
Nix/NixOS
The repository includes a Nix Flake for easy configuration through Home Manager.
For an implementation example, you can check out my own personal dotfiles.
Default binds
| Bind | Action |
|---|---|
Mod4 + Enter |
foot |
Mod4 + Q |
close_window |
Mod4 + E |
toggle_maximize |
Mod4 + R |
toggle_fullscreen |
Mod4 + A |
focus_left |
Mod4 + F |
focus_right |
Mod4 + Shift + A |
move_window_left |
Mod4 + Shift + F |
move_window_right |
Ctrl + A |
focus_output_next |
Ctrl + F |
focus_output_before |
Ctrl + Shift + A |
move_window_output_next |
Ctrl + Shift + F |
move_window_output_before |
Building and running
Ensure you have the following dependencies installed:
- River 0.4.5 or later
- Go 1.26.3 or later
Then build and run it with:
go build -o bmrwm .
river -c ./bmrwm
For everyday use, I would recommend updating the ~/.config/river/init:
#!/bin/sh
# Launch BMRWM
# NOTE: Use your own path to the BMRWM binary.
bmrwm &
# Start Foot server
foot --server &
# Set wallpaper
while ! pgrep -x bmrwm >/dev/null; do
sleep 0.1
done
swaybg -c "#45403D" &
Then bmrwm can be launched with river
Nix/NixOS
Ensure you have the following dependencies installed/enabled:
Run direnv allow once.
Then build and run it with:
nix build
river -c result/bin/bmrwm
Updating/adding protocols
To add protocols, verify the support in the protocol docs
Then copy them to ./protocol and run:
go generate ./internal/protocol