70 lines
2.0 KiB
Scheme
70 lines
2.0 KiB
Scheme
(define-module (home yggdrasil i3blocks)
|
|
#:use-module (gnu home-services)
|
|
#:use-module (gnu home-services-utils)
|
|
#:use-module (gnu services configuration)
|
|
#:use-module (guix packages)
|
|
#:use-module (guix gexp)
|
|
#:use-module (gnu packages wm)
|
|
#:use-module (gnu home-services-utils)
|
|
#:use-module (gnu home-services utils)
|
|
#:use-module (guix import utils)
|
|
#:export (home-i3blocks-service-type
|
|
home-i3blocks-configuration))
|
|
|
|
(define-configuration/no-serialization home-i3blocks-configuration
|
|
(package
|
|
(package i3blocks)
|
|
"i3blocks package to use")
|
|
(config
|
|
(ini-config '())
|
|
""))
|
|
|
|
(define (serialize-hg-config config)
|
|
(define (serialize-boolean val)
|
|
(list (if val "True" "False")))
|
|
|
|
(define (serialize-list val)
|
|
(interpose (map serialize-val val) ", "))
|
|
|
|
(define (serialize-val val)
|
|
(cond
|
|
((list? val) (serialize-list val))
|
|
((boolean? val) (serialize-boolean val))
|
|
((or (number? val) (symbol? val)) (list (maybe-object->string val)))
|
|
(else (list val))))
|
|
|
|
(define (serialize-field key val)
|
|
(let ((val (serialize-val val))
|
|
(key (symbol->string key)))
|
|
`(,key "=" ,@val "\n")))
|
|
|
|
(flatten (generic-serialize-ini-config
|
|
#:combine-ini interpose
|
|
#:combine-alist list
|
|
#:combine-section-alist cons
|
|
#:serialize-field serialize-field
|
|
#:fields config)))
|
|
|
|
(define (add-i3blocks-configuration config)
|
|
(let ((cfg (home-i3blocks-configuration-config config)))
|
|
`(("config/i3blocks/config"
|
|
,(apply mixed-text-file
|
|
"config"
|
|
(serialize-hg-config cfg))))))
|
|
|
|
(define add-i3blocks-package
|
|
(compose list home-i3blocks-configuration-package))
|
|
|
|
(define home-i3blocks-service-type
|
|
(service-type
|
|
(name 'home-i3blocks)
|
|
(extensions
|
|
(list (service-extension
|
|
home-files-service-type
|
|
add-i3blocks-configuration)
|
|
(service-extension
|
|
home-profile-service-type
|
|
add-i3blocks-package)))
|
|
(default-value (home-i3blocks-configuration))
|
|
(description "")))
|