My build of kwm - kewuaa's Window Manager
River is a non-monolithic Wayland compositor, it does not combine the compositor and window manager into one program.
kwm is a window manager implementing the river-window-management-v1 protocol.
For changes I've made, check patches
-
Layouts: tile, grid, monocle, deck, scroller, and floating, with per-tag customization
-
Tags: organize windows with tags instead of workspaces, with shift-tags support
-
Rules: regex pattern matching for window rules
-
Modes: separate keybindings for each mode (default, lock, passthrough, custom)
-
Window States: swallow, maximize, fullscreen, fake fullscreen, floating, sticky
-
Autostart: run commands on startup
-
Status Bar: dwm-like bar, supporting static text, stdin, and fifo, with customized colors
-
Configuration: support both compile-time and runtime configuration, reloading on the fly
See the default configuration file for detailed features.
- wayland (libwayland-client)
- xkbcommon
- pixman (if bar enabled)
- fcft (if bar enabled)
- wayland-protocols (compile only)
Requires zig 0.15.x.
zig build -Doptimize=ReleaseSafe-Dconfig: specify the default config file path (defaults toconfig.zon, copied fromconfig.def.zonif missing)-Dbackground: enable or disable the solid background (defaults tofalse)-Dbar: enable or disable the status bar (defaults totrue)-Dpreprocess: enable or disable config preprocessing (defaults tofalse)--prefix: specify the path to install files
Make custom modifications in config.zon (if -Dconfig is not specified).
kwm searches for a user configuration in the following paths:
$XDG_CONFIG_HOME/kwm/config.zon$HOME/.config/kwm/config.zon
The user configuration overrides compile-time configuration. You only need to specify the values you want to change, rather than duplicating the entire configuration.
User configuration can be reloaded on the fly with mod4+shift+r.
Run kwm in your river init file, or start it with river -c kwm.
See kwm(1) man page for complete documentation.
See Useful Software in river wiki for compatible software.
See KEYBINDINGS section in kwm(1) for default keybindings.
Keyboard mapping can be customized by setting XKB layout rules before launching river. For example, to swap CapsLock with Escape, and Mod1 with Mod4:
export XKB_DEFAULT_OPTIONS=caps:swapescape,altwin:swap_alt_winRead status from a fifo(to restart the status command without restarting kwm)
// config.zon
.status = .{ .fifo = "/run/user/1000/damblocks.fifo" },Add below in ~/.config/river/init
/usr/local/bin/kwm &
# Start kwm with damblocks, a line generator with signaling support I wrote
# https://codeberg.org/unixchad/damblocks
${HOME}/.local/bin/damblocks --fifo &And run
exec ssh-agent riverTo restart the bar script
nohup damblocks --fifo >/dev/null 2>&1 &Thanks to the following reference projects:
- river - Wayland compositor
- river-pwm - River-based window manager
- machi - River-based window manager
- dwl - dwm for Wayland
- swallow patch - swallow window patch for dwl
- mvzr - regex support
The source code of kwm is released under the GPL-3.0.
The protocols in protocol/ directory prefixed with river and developed by the
River project are released under the ISC license (as stated in their
copyright blocks).
kwm's logo is a recreation based on River's logo and released under the CC-BY-SA-4.0 license.
Contributions are welcome! By contributing to kwm, you agree that your submitted code will be licensed under GPL-3.0. It is the contributors' responsibility to ensure that all submitted code is either original or GPL-3.0-compatible.



