diff options
Diffstat (limited to 'oni/home/services/guile.scm')
-rw-r--r-- | oni/home/services/guile.scm | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/oni/home/services/guile.scm b/oni/home/services/guile.scm new file mode 100644 index 0000000..a8b17f5 --- /dev/null +++ b/oni/home/services/guile.scm @@ -0,0 +1,66 @@ +(define-module (oni home services guile) + #:use-module (ice-9 match) + #:use-module (gnu home services) + #:use-module (gnu packages guile) + #:use-module (gnu packages guile-xyz) + #:use-module (gnu services configuration) + #:use-module (guix packages) + #:use-module (guix gexp) + + #:export (home-guile-service-type + home-guile-configuration)) + +(define (serialize-boolean field value) + (match field + ('use-readline + (if value + "(use-modules (ice-9 readline)) +(activate-readline)\n" + "")) + ('use-colorized + (if value + "(use-modules (ice-9 colorized)) +(activate-colorized)\n" + "")))) + +(define-configuration home-guile-configuration + (package + (package guile-3.0-latest) + "Package to use for setting Guile") + (use-readline + (boolean #f) + "Should readline be initialized in Guile?") + (use-colorized + (boolean #f) + "Should the colorized module be initialized in Guile?")) + +(define (add-guile-packages config) + (let ((package-list (append (list (home-guile-configuration-package config)) + (if (home-guile-configuration-use-readline config) (list guile-readline) '()) + (if (home-guile-configuration-use-colorized config) (list guile-colorized) '())))) + (display package-list) + package-list)) + +(define (serialize-guile-configuration config) + (serialize-configuration config home-guile-configuration-fields)) + +(define (home-guile-config-file config) + (computed-file "guile" + #~(call-with-output-file #$output + (lambda (port) + (display #$(serialize-guile-configuration config) port))))) + +(define (home-guile-config-files config) + `((".guile" ,(home-guile-config-file config)))) + +(define home-guile-service-type + (service-type (name 'home-guile) + (extensions + (list (service-extension + home-files-service-type + home-guile-config-files) + (service-extension + home-profile-service-type + add-guile-packages))) + (default-value (home-guile-configuration)) + (description "Configure guile"))) |