An open API service indexing awesome lists of open source software.

https://github.com/wegel/vwl

A simple but powerful tiling window manager for Wayland.
https://github.com/wegel/vwl

dwl dwm tiling-window-manager tiling-wm wayland wlroots

Last synced: 8 months ago
JSON representation

A simple but powerful tiling window manager for Wayland.

Awesome Lists containing this project

README

          

vwl
===

wlroots-based Wayland compositor with virtual outputs and physical cursor continuity.
Originally forked from dwl.

LOC: 5275 total, 2770 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.

STATUS
------
Work in progress, used daily by the dev.