"Alex Griffin" writes: > I went ahead and added the necessary udev rule to the kmonad package. The revised patch is attached. I've tested it and confirmed that if you add your user to the input group, and include kmonad in your system udev rules [1], you can run kmonad as an unprivileged user. Nice work! > From 93c0d7fd68c8bee08162dfb93725675dfd9d8101 Mon Sep 17 00:00:00 2001 > From: Alex Griffin > Date: Sat, 12 Oct 2019 13:55:49 -0500 > Subject: [PATCH 3/3] gnu: Add kmonad. > > * gnu/packages/haskell-apps.scm (kmonad): New variable. [...] > +(define-public kmonad > + (package > + (name "kmonad") > + (version "0.2.0") > + (source > + (origin > + (method git-fetch) > + (uri (git-reference > + (url "https://github.com/david-janssen/kmonad.git") > + (commit "06d7b8c709efa695be35df9bde91275cbb2ba099"))) > + (file-name (git-file-name name version)) > + (sha256 > + (base32 "1rjr4h5yq63x3kad6yn4p8v26389sd9dgr5n2w73s1chafapzwwd")))) > + (build-system haskell-build-system) > + (arguments > + `(#:phases > + (modify-phases %standard-phases > + (delete 'haddock) ; Haddock fails to generate docs > + (add-after 'install 'install-udev-rules > + (lambda* (#:key outputs #:allow-other-keys) > + (let* ((out (assoc-ref outputs "out")) > + (rules (string-append out "/lib/udev/rules.d"))) > + (mkdir-p rules) > + (with-output-to-file (string-append rules "/70-kmonad.rules") > + (lambda _ > + (display > + (string-append > + "KERNEL==\"uinput\", MODE=\"0660\", " > + "GROUP=\"input\", OPTIONS+=\"static_node=uinput\"")) > + (newline)))))) Nitpicking, but I have a preference for the more explicit 'call-with-output-file', as well as using 'format': (call-with-output-file (string-append rules ...) (lambda (port) (format port "KERNEL...~%"))) YMMV. This phase should return #t, though. Otherwise LGTM.