-
Notifications
You must be signed in to change notification settings - Fork 0
A simple but powerful tiling window manager for Wayland.
License
Unknown, Unknown licenses found
Licenses found
Unknown
LICENSE
Unknown
LICENSE.dwl
wegel/vwl
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
vwl
===
wlroots-based Wayland compositor with virtual outputs and physical cursor continuity.
Originally forked from dwl.
LOC: 5248 total, 2744 vwl.c
FEATURES
--------
- virtual outputs (split physical monitors into independent workspaces)
- physical cursor continuity (smooth cursor movement across monitor gaps)
- master/stack tiling
- tabbed layout
- fullscreen modes (virtual/monitor)
- per-workspace layout state
- floating windows
- XWayland support
KEYBINDS
--------
mod = logo key
mod+return spawn terminal
mod+d spawn menu
mod+q kill client
mod+j/k focus next/prev
mod+h/l adjust master width
mod+m zoom (swap master)
mod+f toggle fullscreen (virtual->monitor->off)
mod+t toggle tabbed layout
mod+space cycle layout
mod+shift+space toggle floating
mod+shift+e quit compositor
mod+comma focus monitor left
mod+period focus monitor right
mod+shift+</> move client to monitor left/right
mod+0-9 view workspace 0-9
mod+shift+0-9 move client to workspace 0-9
mod+ctrl+shift+h/j/k/l move workspace to virtual output
BUILDING
--------
make
RUNNING
-------
./vwl
DEPENDENCIES
------------
wlroots 0.19, wayland-server, xkbcommon, libinput, pixman
optional: xcb, xcb-icccm (for XWayland)
CONFIGURATION
-------------
Edit config.def.h and recompile.
Key settings:
- physical cursor gap jumps: enable_physical_cursor_gap_jumps
- virtual output rules: vorules[]
- monitor rules: monrules[]
- keyboard/trackpad settings
VIRTUAL OUTPUTS
---------------
Split physical monitors into named regions. Each region gets its own workspace.
Move workspaces between regions with mod+ctrl+shift+hjkl.
static const VirtualOutputRule vorules[] = {
/* monitor name x y w h mfact nmaster lt[0] lt[1] */
{ "DP-1", "left", 0, 0, 960, 1080, 0.55f, 1, &layouts[0], &layouts[1] },
{ "DP-1", "right", 960, 0, 960, 1080, 0.55f, 1, &layouts[0], &layouts[1] },
};
w/h of 0 = expand to monitor's remaining space.
mfact = master area factor (0.0-1.0).
nmaster = number of master windows.
lt[0]/lt[1] = primary/secondary layout functions.
FULLSCREEN MODES
----------------
- Virtual fullscreen: fills virtual output region
- Monitor fullscreen: fills entire physical monitor
Toggle with mod+f cycles through: off -> virtual -> monitor -> off
PHYSICAL CURSOR CONTINUITY
---------------------------
Seamless cursor tracking across monitor gaps. Set physical dimensions in monrules[].
static const MonitorRule monrules[] = {
/* name scale transform x y phys{} */
{ "DP-1", 1.0f, WL_OUTPUT_TRANSFORM_NORMAL, 0, 0, {
.width_mm = 520, /* physical width in mm */
.height_mm = 320, /* physical height in mm */
.x_mm = 0, /* physical X position */
.y_mm = 0, /* physical Y position */
.size_is_set = 1, /* use explicit size */
.origin_is_set = 1, /* use explicit origin */
}},
{ NULL, 1, WL_OUTPUT_TRANSFORM_NORMAL, -1, -1, {} }, /* fallback */
};
x/y = pixel position (-1,-1 = auto).
scale = HiDPI factor.
transform = rotation (NORMAL/90/180/270/FLIPPED_*).
phys{} = real-world dimensions for cursor math.
HOWTOS
------
§ startup script (~/.config/vwl/run):
#!/bin/sh
waybar &
swayidle -w \
timeout 300 'swaylock -f' \
timeout 600 'wlopm --off \*' \
resume 'wlopm --on \*' \
before-sleep 'swaylock -f' &
§ Manual lock with swayidle (config.h):
static const char *lockcmd[] = { "sh", "-c", "sleep 1 && killall -USR1 swayidle", NULL };
/* ... */
{ MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_L, spawn, {.v = lockcmd} },
SIGUSR1 triggers swayidle's lock timeout, ensuring wake-on-input works.
§ Screenshot (config.h):
static const char *screenshotcmd[] = { "sh", "-c",
"grim -g \"$(slurp)\" ~/Pictures/Screenshots/$(date +'%Y-%m-%d_%H-%M-%S').png", NULL };
static const char *screenshotclipboardcmd[] = { "sh", "-c",
"slurp | grim -g - - | wl-copy", NULL };
/* ... */
{ 0, XKB_KEY_Print, spawn, {.v = screenshotcmd} },
{ MODKEY, XKB_KEY_Print, spawn, {.v = screenshotclipboardcmd} },
STATUS
------
Work in progress, used daily by the dev.
About
A simple but powerful tiling window manager for Wayland.
Topics
Resources
License
Unknown, Unknown licenses found
Licenses found
Unknown
LICENSE
Unknown
LICENSE.dwl