aboutsummaryrefslogtreecommitdiffstats
path: root/oni/home/services/guile.scm
blob: a8b17f586d979083ef0395bf2c3ff253f6cbc101 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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")))