mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
home: services: Add home-xmodmap-service-type.
* gnu/home/services/desktop.scm (home-xmodmap-service-type) (home-xmodmap-configuration): New variables; (serialize-xmodmap-configuration) (xmodmap-shepherd-service): New procedures; * doc/guix.texi (Desktop Services): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
97a759769d
commit
511ae8325d
2 changed files with 98 additions and 0 deletions
|
@ -24,6 +24,7 @@
|
|||
#:use-module (gnu services configuration)
|
||||
#:autoload (gnu packages glib) (dbus)
|
||||
#:autoload (gnu packages xdisorg) (redshift unclutter)
|
||||
#:autoload (gnu packages xorg) (setxkbmap xmodmap)
|
||||
#:use-module (guix records)
|
||||
#:use-module (guix gexp)
|
||||
#:use-module (srfi srfi-1)
|
||||
|
@ -275,3 +276,59 @@ according to time of day.")))
|
|||
(description "Run the @code{unclutter} daemon, which, on systems using the
|
||||
Xorg graphical display server, automatically hides the cursor after a
|
||||
user-defined timeout has expired.")))
|
||||
|
||||
|
||||
;;;
|
||||
;;; Xmodmap.
|
||||
;;;
|
||||
|
||||
(define-configuration/no-serialization home-xmodmap-configuration
|
||||
(xmodmap
|
||||
(file-like xmodmap)
|
||||
"The @code{xmodmap} package to use.")
|
||||
(key-map
|
||||
(list '())
|
||||
"List of expressions to be read by @code{xmodmap} on service startup."))
|
||||
|
||||
(define (serialize-xmodmap-configuration field-name val)
|
||||
(define serialize-field
|
||||
(match-lambda
|
||||
((key . value)
|
||||
(format #f "~a = ~a" key value))
|
||||
(e e)))
|
||||
|
||||
#~(string-append
|
||||
#$@(interpose (map serialize-field val) "\n" 'suffix)))
|
||||
|
||||
(define (xmodmap-shepherd-service config)
|
||||
(define config-file
|
||||
(mixed-text-file
|
||||
"config"
|
||||
(serialize-xmodmap-configuration
|
||||
#f (home-xmodmap-configuration-key-map config))))
|
||||
|
||||
(list
|
||||
(shepherd-service
|
||||
(provision '(xmodmap))
|
||||
(start #~(make-system-constructor
|
||||
(string-join
|
||||
(list #$(file-append
|
||||
(home-xmodmap-configuration-xmodmap config)
|
||||
"/bin/xmodmap")
|
||||
#$config-file))))
|
||||
(stop #~(make-system-constructor
|
||||
#$(file-append setxkbmap "/bin/setxkbmap")))
|
||||
(documentation "On startup, run @code{xmodmap} and read the expressions in
|
||||
the configuration file. On stop, reset all the mappings back to the
|
||||
defaults."))))
|
||||
|
||||
(define home-xmodmap-service-type
|
||||
(service-type
|
||||
(name 'home-xmodmap)
|
||||
(extensions
|
||||
(list
|
||||
(service-extension home-shepherd-service-type
|
||||
xmodmap-shepherd-service)))
|
||||
(default-value (home-xmodmap-configuration))
|
||||
(description "Run the @code{xmodmap} utility to modify keymaps and pointer
|
||||
buttons under the Xorg display server via user-defined expressions.")))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue