# riverguile Scripting layer for the [river](https://github.com/riverwm/river) Wayland server using [Guile Scheme](https://www.gnu.org/software/guile/). Send commands to river and install handlers for various events, inclusing layout events. Uppon launch, riverguile tries to load a scheme script and checks the following paths for it in the given order: * `layout.scm` * `$XDG_CONFIG_HOME/river/layout.scm` * `$HOME/.config/river/layout.scm` * `/etc/riverguile/layout.scm` In the context of this script, a special procedure `(install-handler key proc)` is available, which can be used to install handlers to certain events. Check the man page for more information. Here is an example `layout.scm` file replicating rivertiles behavior of having a main window and a stack of windows aside while also automatically locking the screen after five minutes of inactivity. ```scheme (install-handler 'idle:300 (lambda (event) (cond ((eq? event 'idle) (system "swaylock &") (system "backlight.sh set-to 40")) ((eq? event 'resume) (system "backlight.sh set-to 100"))))) (define split 0.55) (define (layout:rows n x y w h) (letrec ((height (/ h n)) (rows (lambda (n) (if (eq? n 0) '() (let ((Y (- (+ y h) (* n height)))) (append (list (list x Y w height)) (rows (- n 1)))))))) (rows n))) (define (layout:split n x y w h) (if (eq? n 1) (list (list x y w h)) (letrec* ((left (* split w)) (right (- w left))) (append (list (list x y left h)) (layout:rows (- n 1) (+ x left) y right h))))) (install-handler 'layout-demand (lambda (view-count width height tags output) (layout:split view-count 0 0 width height))) ```