engstrand-config / dwl-guile

Dynamic tiling Wayland compositor configurable in Guile Scheme, based on dwl and libguile - now with a REPL!
Other
97 stars 5 forks source link
dwl dwl-guile guile guix scheme

=dwl-guile= is based on the latest version of =dwl= (v0.4) and wlroots 0.16.x, and will be continuously rebased against new versions.

** Goal The main goal of =dwl-guile= is to serve as a minimal =dwm=-like Wayland compositor for those who use [[https://guix.gnu.org/][GNU Guix System]] --- a GNU/Linux distribution in which the user can customize and configure their entire system in GNU Guile.

=dwl-guile= integrates the window manager customization with that of the rest of the system, which allows for a dynamic, programmable and reproducible configuration for our entire computing environment --- all in Guile.

** Features *** Scheme/Guile configuration The file =./share/default.scm= contains an example configuration. You can script the configuration to your heart's content, since it is written in an actual programming language!

*** Dynamic configuration and interaction... Evaluate expression in real time using =dwl-guile -e ""= and change tiling layouts, bind keys and much more on the fly --- there is no need to restart the compositor if you want to try something new!

*** ... also with a REPL! You may also use a REPL client such as [[https://www.nongnu.org/geiser/][Geiser]] to control =dwl-guile= for an even more interactive experience.

** Installation The best way to install and configure =dwl-guile= is through the Guix channel [[https://github.com/engstrand-config/home-service-dwl-guile][home-service-dwl-guile]], which (as the name suggests) provides a [[https://guix.gnu.org/manual/devel/en/html_node/Home-Configuration.html][Guix Home]] service for =dwl-guile=. Non-Guix System users can download the GNU Guix package manager for their current GNU/Linux distribution in order to use the Guix Home service.

An alternative way (that works without the Guix package manager) would be to

  1. Clone the =dwl-guile= repository
  2. Build a =dwl-guile= binary using the =Makefile=
  3. Supply the produced binary with a Guile configuration file.

** Releases The [[https://github.com/engstrand-config/dwl-guile/releases][Releases]] section contains the =dwl-guile= patch for =dwl= and an assortment of useful patches that provide additional functionality.

Some patches are already included in the main =dwl-guile= patch, namely