bmrwm

Minimal River based scrolling window manager

Active Pure Nim score 65/100 · last commit 2026-07-29 · 1 stars · tests present · no docs generated

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

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

banner

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.

desktop

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:

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