(define-module (oni home services stumpwm) #:use-module ((srfi srfi-1) #:select (every)) #:use-module ((gnu services configuration) #:select (serialize-package define-configuration define-configuration/no-serialization text-config? serialize-text-config)) #:use-module ((gnu packages lisp) #:select (sbcl)) #:use-module ((gnu packages wm) #:select (stumpwm stumpish sbcl-stumpwm-swm-gaps sbcl-stumpwm-stumptray)) #:use-module ((gnu home services) #:select (service-type service-extension home-profile-service-type home-xdg-configuration-files-service-type home-run-on-change-service-type)) #:use-module ((guix gexp) #:select (local-file gexp file-append mixed-text-file)) #:use-module ((guix packages) #:select (package?)) #:export (home-stumpwm-service-type home-stumpwm-configuration home-stumpwm-extension home-stumpwm-gaps-service-type home-stumpwm-gaps-configuration home-stumpwm-stumptray-service-type home-stumpwm-stumptray-configuration)) (define-configuration/no-serialization home-stumpwm-extension (configurations (text-config '()) "The configuration for the extension.")) (define-configuration home-stumpwm-configuration (package (package stumpwm) "Package to use for setting Stumpwm") (configurations (text-config '()) "The configuration to apply.") (stumpish-package (package stumpish) "Package to use for setting Stumpish")) (define (add-stumpwm-packages config) (append (list sbcl (home-stumpwm-configuration-package config) (list stumpwm "lib") (home-stumpwm-configuration-stumpish-package config)))) (define (home-stumpwm-extensions original-config extension-configs) (home-stumpwm-configuration (inherit original-config) (configurations (apply append (home-stumpwm-configuration-configurations original-config) (map home-stumpwm-extension-configurations extension-configs))))) (define (home-stumpwm-config-files config) `(("stumpwm/config" ,(mixed-text-file "config" (serialize-text-config config (home-stumpwm-configuration-configurations config)))))) (define (reload-stumpwm-config-gexp _) `(("files/.config/stumpwm/config" ,#~(system* #$(file-append stumpish "/bin/stumpish") "reload")))) (define home-stumpwm-service-type (service-type (name 'home-stumpwm) (extensions (list (service-extension home-profile-service-type add-stumpwm-packages) (service-extension home-xdg-configuration-files-service-type home-stumpwm-config-files) (service-extension home-run-on-change-service-type reload-stumpwm-config-gexp))) (compose identity) (extend home-stumpwm-extensions) (default-value (home-stumpwm-configuration)) (description "Install and configure stumpwm."))) (define-configuration/no-serialization home-stumpwm-gaps-configuration (package (package sbcl-stumpwm-swm-gaps) "Package to use for setting stumpwm-gaps.") (configurations (text-config '()) "Configuration for stumpwm gaps")) (define (add-stumpwm-gaps config) (home-stumpwm-extension (configurations (home-stumpwm-gaps-configuration-configurations config)))) (define (add-stumpwm-gaps-packages config) (list (home-stumpwm-gaps-configuration-package config))) (define home-stumpwm-gaps-service-type (service-type (name 'home-stumpwm-gaps) (extensions (list (service-extension home-stumpwm-service-type add-stumpwm-gaps) (service-extension home-profile-service-type add-stumpwm-gaps-packages))) (compose identity) (default-value (home-stumpwm-gaps-configuration)) (description "Install and configure stumpwm-gaps."))) (define-configuration/no-serialization home-stumpwm-stumptray-configuration (package (package sbcl-stumpwm-stumptray) "Package to use for setting stumpwm-stumptray.") (configurations (text-config '()) "Configuration for stumpwm gaps")) (define (add-stumpwm-stumptray config) (home-stumpwm-extension (configurations (home-stumpwm-stumptray-configuration-configurations config)))) (define (add-stumpwm-stumptray-packages config) (list (home-stumpwm-stumptray-configuration-package config))) (define home-stumpwm-stumptray-service-type (service-type (name 'home-stumpwm-stumptray) (extensions (list (service-extension home-stumpwm-service-type add-stumpwm-stumptray) (service-extension home-profile-service-type add-stumpwm-stumptray-packages))) (compose identity) (default-value (home-stumpwm-stumptray-configuration)) (description "Install and configure stumpwm-stumptray.")))