it's time
SFBYBWC35S4IMTSC3ULSSAJVBWKUMZMKSF5RYODD3ARWD645RIUAC # dwl
# dwl - dwm for Waylanddwl is a compact, hackable compositor for Wayland based on[wlroots](https://github.com/swaywm/wlroots). It is intended to fill the samespace in the Wayland world that dwm does in X11, primarily in terms ofphilosophy, and secondarily in terms of functionality. Like dwm, dwl is:- Easy to understand, hack on, and extend with patches- One C source file (or a very small number) configurable via `config.h`- Limited to a maximum number of SLOC (to be determined)- Tied to as few external dependencies as possibledwl is not meant to provide every feature under the sun. Instead, like dwm, itsticks to features which are necessary, simple, and straightforward toimplement given the base on which it is built. Since wlroots provides a numberof features that are more complicated to accomplish with Xlib and selectextensions, dwl can be in some ways more featureful than dwm *while remainingjust as simple.* Intended default features are:
This is the "minimum viable product" Wayland compositor based on wlroots. Itaims to implement a Wayland compositor in the fewest lines of code possible,while still supporting a reasonable set of features. Reading this code is thebest starting point for anyone looking to build their own Wayland compositorbased on wlroots.
- Any features provided by dwm/Xlib: simple window borders, tags, keybindings,client rules, mouse move/resize (see below for why the built-in status bar isa possible exception)- Configurable multi-monitor layout support, including position and rotation- Configurable HiDPI/multi-DPI support- Wayland protocols needed for daily life in the tiling world: at a minimum,xdg-shell and layer-shell (for bars/menus). Protocols trivially provided bywlroots may also be added.- Basic yes/no damage tracking to avoid needless redraws (if it can be donesimply and has an impact on power consumption)
- Additional Wayland compositor protocols which are trivially provided bywlroots or can be conditionally included via `config.h` settings: xwayland,xdg-portal, etc.- External bar support instead of a built-in status bar, to avoid taking adependency on FreeType or Pango- More in-depth damage region tracking
dwl is disconnected from the main wlroots build system, in order to make iteasier to understand the build requirements for your own Wayland compositors.Simply install the dependencies:
dwl has only two dependencies: wlroots and wayland-protocols. Simply installthese and run `make`.
And run `make`.
All configuration is done by editing `config.h` and recompiling, in the samemanner as dwm. There is no way to separately restart the window manager inWayland without restarting the entire display server, so any changes will takeeffect the next time dwl is executed.
dwl can be run as-is, with no arguments. In an existing Wayland or X11 session,this will open a window to act as a virtual display. When run from a TTY, theWayland server will take over the entire virtual terminal. Clients started bydwl will have `WAYLAND_DISPLAY` set in their environment, and other clients can bestarted from outside the session by setting this variable accordingly.
You can run dwl with `./dwl`. In an existing Wayland or X11 session,dwl will open a Wayland or X11 window respectively to act as a virtualdisplay. You can then open Wayland windows by setting `WAYLAND_DISPLAY` to thevalue shown in the logs. You can also run `./dwl` from a TTY.
You can also specify a startup program using the `-s` option. The argument tothis option will be run at startup as a shell command (using `sh -c`) and canserve a similar function to `.xinitrc`: starting a service manager or otherstartup applications. Unlike `.xinitrc`, the display server will not shut downwhen this process terminates. Instead, as dwl is shutting down, it will sendthis process a SIGTERM and wait for it to terminate (if it hasn't already).This make it ideal not only for initialization but also for execing into auser-level service manager like s6 or `systemd --user`.
In either case, you will likely want to specify `-s [cmd]` to run a command atstartup, such as a terminal emulator. This will be necessary to start any newprograms from within the compositor, as dwl does not support any customkeybindings. dwl supports the following keybindings:
## Limitations
- Urgent/attention/focus-request not yet implemented- Borders and selected/normal/urgent colors not implemented- No support for layer-shell yet- HiDPI works, but multi-DPI is not as nice as sway, depending on the scalefactors involved. Perhaps scaling filters are needed?- Monitor rotation/transform is not working yet- Mouse resize is not precise- No statusbar- No damage tracking- No handling of fullscreen/fixed windows (or whatever the Wayland analoguesare)
- HiDPI support- Any kind of configuration, e.g. output layout- Any protocol other than xdg-shell (e.g. layer-shell, forpanels/taskbars/etc; or Xwayland, for proxied X11 windows)- Optional protocols, e.g. screen capture, primary selection, virtualkeyboard, etc. Most of these are plug-and-play with wlroots, but they'reomitted for brevity.- Damage tracking, which tracks which parts of the screen are changing andminimizes redraws accordingly.
## Acknowledgementsdwl began by extending the TinyWL example provided (CC0) by the sway/wlrootsdevelopers. This was made possible in many cases by looking at how swayaccomplished something, then trying to do the same in as suckless a way aspossible. Speaking of which, many thanks to suckless.org and the dwmdevelopers and community for the inspiration.