KazbekOS/home/kazbek/i3blocks.scm

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 "")))