aboutsummaryrefslogtreecommitdiffstats
path: root/oni/home/services/guile.scm
diff options
context:
space:
mode:
authorGravatar Tom Willemse2022-07-22 12:36:36 -0700
committerGravatar Tom Willemse2022-07-22 12:36:36 -0700
commit7957b236de1638fdcc1c9d16780c463defd8f961 (patch)
tree6ca8488a5b6f84d7389350eaae4e0ebcebfbdc81 /oni/home/services/guile.scm
parent892a409184d8abba2dcb660615b753abb9906220 (diff)
downloadnew-dotfiles-7957b236de1638fdcc1c9d16780c463defd8f961.tar.gz
new-dotfiles-7957b236de1638fdcc1c9d16780c463defd8f961.zip
Add guile configuration
Diffstat (limited to 'oni/home/services/guile.scm')
-rw-r--r--oni/home/services/guile.scm66
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")))