#monitor #config #river #hyprland #sway #tui #wayland-compositor

app xwlm

A TUI for managing Wayland monitor configurations (Hyprland, Sway, River)

8 releases

Uses new Rust 2024

0.2.0 Feb 23, 2026
0.1.7 Feb 19, 2026

#259 in GUI

MIT license

5.5MB
3.5K SLoC

xwlm

A TUI for managing your Wayland monitors. Supports Hyprland, Sway, and River.

Crates.io Downloads License: MIT

xwlm

About

xwlm lets you arrange, resize, rotate, and toggle your monitors from the terminal. It auto-detects your compositor, reads the current monitor state over Wayland, and writes native config files when you apply changes.

No more hand-editing monitors.conf.

Install

Quick install:

curl -fsSL https://x34-dzt.github.io/xwlm/install.sh | bash

crates.io:

cargo install xwlm

From source:

git clone https://github.com/x34-dzt/xwlm.git
cd xwlm
cargo build --release
# binary is at target/release/xwlm

Then just run xwlm. On first launch it'll ask where to save your monitor config.

Keybindings

Key Action
Tab Switch panel
[ ] Switch monitor
Arrow keys Move monitor / navigate
Enter Apply changes
+ - Adjust scale or zoom
t Toggle on/off
r Reset positions
q Quit

Compositor Support

Compositor Status Notes
Hyprland Tested Fully supported and actively tested
Sway Untested Should work — implements the same wlr-output-management-unstable-v1 protocol
River Untested Should work — implements the same protocol. Config persistence uses wlr-randr commands

All compositors share the same Wayland protocol (zwlr_output_management_v1) for live monitor changes via wlx_monitors, a Rust library built for this project. The only differences are in config file format and reload mechanism. If you run into issues on Sway or River, please open an issue.

Requirements

  • Wayland session (Hyprland, Sway, or River)
  • Terminal with Unicode support
  • wlr-randr (River only, for config persistence)

License

MIT

Dependencies

~11–17MB
~318K SLoC