summary refs log tree commit diff
path: root/gnu/system/linux.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2013-10-03 21:30:30 +0200
committerLudovic Courtès <ludo@gnu.org>2013-10-03 23:12:20 +0200
commitd9f0a23704a038640329fae6e2273e5813cdb8ab (patch)
tree149b6f0d423e8261dc59580a54b8f4f9b37f26a6 /gnu/system/linux.scm
parentb860f382447a360ea2ce8a89d3357279cc652c3a (diff)
downloadguix-d9f0a23704a038640329fae6e2273e5813cdb8ab.tar.gz
gnu: vm: Rewrite helper functions as monadic functions.
* gnu/system/dmd.scm (host-name-service, nscd-service, mingetty-service,
  syslog-service, guix-service, static-networking-service): Rewrite as
  monadic functions.
  (dmd-configuration-file): Use 'text-file' instead of
  'add-text-to-store'.
* gnu/system/grub.scm (grub-configuration-file): Rewrite as a monadic
  function.
* gnu/system/linux.scm (pam-services->directory): Likewise.
* gnu/system/shadow.scm (group-file, passwd-file, guix-build-accounts):
  Likewise.
* gnu/system/vm.scm (expression->derivation-in-linux-vm, qemu-image,
  union, system-qemu-image): Likewise.
Diffstat (limited to 'gnu/system/linux.scm')
-rw-r--r--gnu/system/linux.scm22
1 files changed, 12 insertions, 10 deletions
diff --git a/gnu/system/linux.scm b/gnu/system/linux.scm
index 6aebe159ba..eb3e133044 100644
--- a/gnu/system/linux.scm
+++ b/gnu/system/linux.scm
@@ -20,6 +20,7 @@
   #:use-module (guix store)
   #:use-module (guix records)
   #:use-module (guix derivations)
+  #:use-module (guix monads)
   #:use-module (ice-9 match)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
@@ -81,17 +82,20 @@
               (map (cut entry->string "password" <>) password)
               (map (cut entry->string "session" <>) session))))))
 
-(define (pam-services->directory store services)
+(define (pam-services->directory services)
   "Return the derivation to build the configuration directory to be used as
 /etc/pam.d for SERVICES."
-  (let ((names (map pam-service-name services))
-        (files (map (match-lambda
+  (mlet %store-monad
+      ((names -> (map pam-service-name services))
+       (files (mapm %store-monad
+                    (match-lambda
                      ((and service ($ <pam-service> name))
                       (let ((config (pam-service->configuration service)))
-                        (add-text-to-store store
-                                           (string-append name ".pam")
-                                           config '()))))
-                    services)))
+                        (text-file (string-append name ".pam") config))))
+
+                    ;; XXX: Eventually, SERVICES may be a list of monadic
+                    ;; values instead of plain values.
+                    (map return services))))
     (define builder
       '(begin
          (use-modules (ice-9 match))
@@ -104,9 +108,7 @@
                      %build-inputs)
            #t)))
 
-    (build-expression->derivation store "pam.d" (%current-system)
-                                  builder
-                                  (zip names files))))
+    (derivation-expression "pam.d" (%current-system) builder (zip names files))))
 
 (define %pam-other-services
   ;; The "other" PAM configuration, which denies everything (see