███████╗██╗ ██╗███╗ ███╗
╚══███╔╝██║ ██║████╗ ████║
███╔╝ ██║ █╗ ██║██╔████╔██║
███╔╝ ██║███╗██║██║╚██╔╝██║
███████╗╚███╔███╔╝██║ ╚═╝ ██║
╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝
Zwm is a dwm-inspired minimal tiling window manager for X implemented in Zig programming language.
My main goals for creating Zwm are learning Zig and implementing a minimal window manager for personal use that is easier to hack than dwm. Both goals are work in progress :)
- Basic tiling layout
- Workspaces (tags)
- Focus and window management commands
- Spawn process command
- Customizable config file
- Hot reloading with persisted state (requires a script)
- Support for external status bar, like Polybar
- Floating windows
- Fullscreen windows
- ICCCM and EWMH support
- "Urgency"/"Demands attention" window state
- Multi-monitor support
- Support for adding new layouts
- More built-in layouts: fullscreen, 3-column, ...
- Iron out issues with focus, window management, and general UX
You will need at least git and zig installed.
git clone https://github.com/zuranthus/zwm.git
cd zwm
sudo zig build install -p /usr/local
Modify src/config.zig
before building and installing.
The easiest way is to start zwm with startx
by adding exec zwm
to ~/.xinitrc
.
It is possible to restart zwm while keeping windows and their workspace distribution intact. This makes updating zwm binary a quick and painless process.
Enabling hot reloading is easy: use the following script in ~/.xinitrc
instead of a simple exec zwm
while :
do
zwm
[[ $? == 42 ]] || break;
done
Now if you build and install a new zwm build, restart zwm with Mod + Shift + Q
(configurable in src/config.zig
). Voilà: you are running the new build and all windows are alive and in their workspaces.