Versatile X Window Manager
  • C 95.5%
  • Roff 2.8%
  • Makefile 1.4%
  • Shell 0.3%
Find a file
2026-04-17 23:02:14 +02:00
modules add support for multipliers in manuallymovecanvas (movecanvasmouse now), and rename it to movecanvasmouse 2026-03-30 19:26:57 +01:00
.gitignore fix dist make option 2026-04-03 12:08:37 +01:00
config.def.h move ALWAYS_CENTER_NEW_FLOATING_WINDOWS to config.h and add NEW_FLOATING_WINDOWS_APPEAR_UNDER_CURSOR 2026-04-02 19:27:47 +01:00
config.mk support for external bars, some toggle bar improvement (hello picom users), bump version to 2.2 2026-03-27 12:21:32 +00:00
drw.c Added support for: xrdb, alternative center of bar color, bar height, bar padding 2026-01-15 21:30:14 +00:00
drw.h Added support for: xrdb, alternative center of bar color, bar height, bar padding 2026-01-15 21:30:14 +00:00
LICENSE LICENSE file update 2026-03-08 18:19:13 +00:00
LICENSE.dwm LICENSE file update 2026-03-08 18:19:13 +00:00
Makefile fix dist make option 2026-04-03 12:08:37 +01:00
modules.def.h move ALWAYS_CENTER_NEW_FLOATING_WINDOWS to config.h and add NEW_FLOATING_WINDOWS_APPEAR_UNDER_CURSOR 2026-04-02 19:27:47 +01:00
README.md docs: update README.md 2026-04-17 07:42:51 +00:00
rvx Support for autostart, thanks d8dr for runautostart function implementation 2026-03-08 17:58:56 +00:00
util.c Codeberg repo creation 2026-01-14 20:17:03 +00:00
util.h Codeberg repo creation 2026-01-14 20:17:03 +00:00
vxwm.1 Manual page fix 2026-02-08 16:50:38 +00:00
vxwm.c fix dist make option 2026-04-03 12:08:37 +01:00

vxwm

vxwm - Versatile X Window Manager for X11 forked from dwm.

About

vxwm represents a significantly enhanced version of dwm that maintains its lightweight nature while offering modular flexibility. Instead of manually applying patches, you can toggle pre-installed features directly in the configuration by switching values between 0 and 1, it is all manageable via modules.def.h.

The defining feature of vxwm is its implementation of infinite tags. While traditional tiling managers act like a slide projector, swapping one static view for another, vxwm treats the screen as a viewport over a vast, continuous canvas. Windows aren't hidden or layered; they exist on an infinite surface, and you simply move your perspective across it. You can slide your view to find more space, snap focus to a specific window, or return to the origin using the homecanvas bind. Even though this sounds complex, this isn't resource hungry and isn't hard to use.

vxwm has repositories

Build and Requirements

In order to build vxwm you need the Xlib, Xft and Xinerama header files.

Arch Linux:

sudo pacman -Sy libx11 libxft libxinerama

Void Linux:

sudo xbps-install -S libX11 libX11-devel libXft libXft-devel libXinerama libXinerama-devel

Gentoo GNU/Linux:

doas emerge -av x11-libs/libX11 x11-libs/libXft x11-libs/libXinerama

Installation

Clone this repository and cd into it.

git clone https://codeberg.org/wh1tepearl/vxwm.git
cd vxwm

Edit config.mk to match your local setup (vxwm is installed into the /usr/local namespace by default).

Afterwards enter the following commands to build and install vxwm:

make
# yes, run make first and only then
sudo make clean install

Running vxwm

You will need startx utility installed.

Your .xinitrc should be something like this to start vxwm using startx:

#!/bin/sh

exec vxwm

If you want to restart vxwm without losing your session or for hot configuration reload, add something like this to your .xinitrc should be something like this:

#!/bin/sh

vxwm &
exec sleep infinity

And then for restarting vxwm use the rvx utility.

In order to connect vxwm to a specific display, make sure that the DISPLAY environment variable is set correctly, e.g.:

DISPLAY=:1 exec vxwm

Note

This will start vxwm on display :1

In order to display status info in the bar, you can do something like this in your .xinitrc:

while xsetroot -name "`date` `uptime | sed 's/.*,//'`"
do
	sleep 1
done &
exec vxwm

Configuration

The configuration of vxwm is done by editing config.h and modules.h to match your preferences and (re)compiling the source code.

Adding custom keybinds

Add this to config.h and replace yoursillyprogram with the actual cmd that will be executed in hte keybind (recommended adding it right before keys array):

static const char *yoursillyprogramcmd[]  = { "yoursillyprogram", NULL };

If your cmd uses multiple arguments, you should write them like this:

static const char *yoursillyprogramcmd[] = { "yoursillyprogram", "arg1", "arg2", NULL};

etc...

And then add this to keys massive:

{ MODKEY|ShiftMask,	XK_u, spawn, {.v = yoursillyprogramcmd } }, 

Modules

Enable/disable (0/1) modules you need/don't need, thats it.

Note

After any change in config/modules recompile vxwm and restart using rvx.

Acknowledgements

  • vxwm was made by wh1tepearl, many thanks to [suckless.org] and the [dwm] developers for making dwm in first place.
  • Thanks 5element developer and hevel wayland compositor developers for the inspiration of infinite tags.

Also try:

Community

  • If you encounter any bugs - please make an issue!
  • If you want something added - please make an issue!
  • If you want to change something - please make an issue!