umberwm :ram:
Minimalistic X window manager based on tinywm, inspired by qtile.
Video introduction on LBRY or on youtube.
Design goals and features
- Kiss: only window management (no taskbar, system tray, ...), complex stuff should be done using
other programs (
rofi
, ...) - Configuration as code (like
qtile
,dwm
,xmonad
) - Tiled by default (Binary space partitioning)
- Supports workspaces
- Supports multiple displays
- Single file (~1000 LoC), not counting configuration (
main.rs
)
Prerequisites
You should have xmodmap installed.
You will need XCB bindings with the randr extension.
Ubuntu: sudo apt install libxcb-randr0-dev
.
Using it
UmberWM
is used/configured in rust, here is how to use it:
-
Clone this project:
git clone https://github.com/yazgoo/umberwm
- Note: if you don't want to modify the source code, you can instead add
umberwm
as a dependency to your own project. See using it as a dependency.
- Note: if you don't want to modify the source code, you can instead add
-
Edit
src/main.rs
. -
Edit
umberwm-start
if desired. Here you can launch any programs you need to before launchingumberwm
. -
Run
cargo build --release
. The binary will be available intarget/release/umberwm
. -
Optionally, run
./install.py
. This will do three things:- Symlink
target/release/umberwm
to/usr/bin
. - Symlink
umberwm-start
to/usr/bin
. - Copy
umberwm.desktop
to/usr/share/xsessions
. This will allow display managers such asGDM
to findumberwm
and allow you to launch it.
- Symlink
-
If you do not use a display manager, you will need to add the following to your
.xinitrc
:
Using it as a dependency
If you don't want to modify the source code, you can create your own rust project and add umberwm
as a cargo
dependency.
Cargo.toml
:
# ...
[]
= "0.0.21"
You can then supply your own main.rs
rather than editing the existing one. It is advised that you
use main.rs
from this repository as your starting point.
See examples:
Note that you will have to manually set up umberwm-start
and umberwm.desktop
if you wish to use
them.
Hot reloading
Hot reloading allows to restart umberwm
while keeping its state (i.e. keeping track of windows and
their relative workspaces).
This is quite useful when you want to update your configuration.
In wm_actions:
, the action Actions::SerializeAndQuit
will serialize all of its windows and then
quit with exit code 123
.
The umberwm-start
script checks for the exit code 123
and reruns umberwm
, thereby facilitating
a smooth restart.