# github-kwm
**Repository Path**: loveocto/github-kwm
## Basic Information
- **Project Name**: github-kwm
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-31
- **Last Updated**: 2026-07-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 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 DWM-like dynamic tiling window manager implementing the
river-window-management-v1 protocol.
# Screenshots




## Features
- **Layouts:** tile, grid, monocle, deck, scroller, centered master, and
floating, with per-tag states
- **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](./config.def.zon) file for detailed features.
## Dependencies
- wayland (libwayland-client)
- xkbcommon
- pixman (if bar enabled)
- fcft (if bar enabled)
- wayland-protocols (compile only)
## Build
Requires zig 0.16.x.
```
zig build -Doptimize=ReleaseSafe
```
- `-Dllvm`: force using LLVM compiler and linker
- `-Dconfig`: specify the default config file path (defaults to `config.zon`,
copied from `config.def.zon` if missing)
- `-Dbackground`: enable or disable the solid background (defaults to `false`)
- `-Dbar`: enable or disable the status bar (defaults to `true`)
- `-Dkwim`: if to call [kwim] automatically (defaults to `true`)
## Installation
See [packages.md] for community maintained packages.
```sh
zig build install -Doptimize=ReleaseSafe
```
- `--prefix`: specify the path to install files
## Configuration
### Compile Time
Make custom modifications in `config.zon` (if `-Dconfig` is not specified).
### Runtime
`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.
## Configuration Preprocessing
Before loading the configuration, `kwm` can pre-process it by evaluating the
conditions, which allows per-host configuration.
Syntax:
```zig
// @include(file)
// @if(condition)
// @elif(condition)
// @else
// @endif
```
*Conditions* (separated by `,`):
- hostname=HOSTNAME
- env:KEY=VALUE
- env_contains:KEY
## Usage
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.
### Keybindings
See [keybindings] or `KEYBINDINGS` section in `kwm(1)` man page for default
keybindings.
### Keymaps
Keyboard mapping can be customized by setting XKB layout rules before launching
river. For example, to swap CapsLock with Escape, and
Mod1 with Mod4:
```sh
export XKB_DEFAULT_OPTIONS=caps:swapescape,altwin:swap_alt_win
```
See `xkeyboard-config(7)` man page for all options.
### Input Manager
There is an input device manager for river separated from `kwm` called [kwim],
implementing the river-input-management-v1 protocol and/or related protocols in
order to configure input devices independent of window manager.
When built with the `-Dkwim` option (defaults to `true`), `kwm` will call
`kwim` at startup. You can also run `kwim` to list input devices or apply a
single rule on demand.
## Acknowledgments
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
## License
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.
## Contributing
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.
[GPL-3.0]: ./LICENSE
[river]: https://codeberg.org/river/river
[packages.md]: ./doc/packages.md
[Useful Software]: https://codeberg.org/river/wiki/src/branch/main/pages/useful-software.md
[keybindings]: ./doc/keybindings.md
[river-pwm]: https://github.com/pinpox/river-pwm
[machi]: https://codeberg.org/machi/machi
[dwl]: https://codeberg.org/dwl/dwl
[swallow patch]: https://codeberg.org/dwl/dwl-patches/src/branch/main/patches/swallow/swallow.patch
[mvzr]: https://github.com/mnemnion/mvzr
[River's logo]: https://codeberg.org/river/river/src/branch/main/logo/logo.svg
[kwim]: https://github.com/kewuaa/kwim