summary refs log tree commit diff
path: root/gnu/services/dmd.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-04-28 23:07:08 +0200
committerLudovic Courtès <ludo@gnu.org>2014-04-28 23:24:18 +0200
commitb5f4e686359d8842b329e6b161ef89fa6c04ebc3 (patch)
treec1a07dde7693ed45d9776095fb116d475bb6637a /gnu/services/dmd.scm
parent1aa0033b646b59e62d6a05716a21c631fca55c77 (diff)
downloadguix-b5f4e686359d8842b329e6b161ef89fa6c04ebc3.tar.gz
services: Rewrite using gexps.
* gnu/services.scm (<service>)[inputs]: Remove.
* gnu/system.scm (links): Remove.
  (etc-directory): Add PASSWD and SHADOW to #:inputs.
  (operating-system-boot-script): Pass ETC to 'dmd-configuration-file'.
  (operating-system-derivation): Remove EXTRAS from the union.
* gnu/system/linux.scm (pam-service->configuration): Rewrite in terms of
  'gexp->derivation'.  Compute the contents on the build side.  Expect
  'arguments' to contain a list of gexps.
  (pam-services->directory): Rewrite in terms of 'gexp->derivation'.
  (unix-pam-service): Change 'arguments' to a list of one gexp.
* gnu/system/shadow.scm (<user-account>)[inputs]: Remove.
  [shell]: Change default value to a gexp.
  (passwd-file): Rewrite in terms of 'gexp->derivation'.  Compute
  contents on the build side.
* gnu/services/base.scm (host-name-service, mingetty-service,
  nscd-service, syslog-service, guix-service): Change 'start' and 'stop'
  to gexps; remove 'inputs' field.
  (guix-build-accounts): Change 'shell' field to a gexp.
* gnu/services/networking.scm (static-networking-service): Change
  'start' and 'stop' to gexps; remove 'inputs' field.
* gnu/services/xorg.scm (slim-service): Likewise.
* gnu/services/dmd.scm (dmd-configuration-file): Expect ETC to be a
  derivation.  Change 'config' to a gexp.  Use 'gexp->file' instead of
  'text-file'.
* doc/guix.texi (Defining Services): Update nscd example with gexps, and
  without 'inputs'.  Add xref to "G-Expressions".
Diffstat (limited to 'gnu/services/dmd.scm')
-rw-r--r--gnu/services/dmd.scm77
1 files changed, 39 insertions, 38 deletions
diff --git a/gnu/services/dmd.scm b/gnu/services/dmd.scm
index 54fb5cbfd6..c187c09857 100644
--- a/gnu/services/dmd.scm
+++ b/gnu/services/dmd.scm
@@ -17,6 +17,7 @@
 ;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
 
 (define-module (gnu services dmd)
+  #:use-module (guix gexp)
   #:use-module (guix monads)
   #:use-module (gnu services)
   #:use-module (ice-9 match)
@@ -31,50 +32,50 @@
 
 (define (dmd-configuration-file services etc)
   "Return the dmd configuration file for SERVICES, that initializes /etc from
-ETC (the name of a directory in the store) on startup."
+ETC (the derivation that builds the /etc directory) on startup."
   (define config
-    `(begin
-       (use-modules (ice-9 ftw))
+    #~(begin
+        (use-modules (ice-9 ftw))
 
-       (register-services
-        ,@(map (lambda (service)
-                `(make <service>
-                   #:docstring ',(service-documentation service)
-                   #:provides ',(service-provision service)
-                   #:requires ',(service-requirement service)
-                   #:respawn? ',(service-respawn? service)
-                   #:start ,(service-start service)
-                   #:stop ,(service-stop service)))
-               services))
+        (register-services
+         #$@(map (lambda (service)
+                   #~(make <service>
+                       #:docstring '#$(service-documentation service)
+                       #:provides '#$(service-provision service)
+                       #:requires '#$(service-requirement service)
+                       #:respawn? '#$(service-respawn? service)
+                       #:start #$(service-start service)
+                       #:stop #$(service-stop service)))
+                 services))
 
-       ;; /etc is a mixture of static and dynamic settings.  Here is where we
-       ;; initialize it from the static part.
-       (format #t "populating /etc from ~a...~%" ,etc)
-       (let ((rm-f (lambda (f)
-                     (false-if-exception (delete-file f)))))
-         (rm-f "/etc/static")
-         (symlink ,etc "/etc/static")
-         (for-each (lambda (file)
-                     ;; TODO: Handle 'shadow' specially so that changed
-                     ;; password aren't lost.
-                     (let ((target (string-append "/etc/" file))
-                           (source (string-append "/etc/static/" file)))
-                       (rm-f target)
-                       (symlink source target)))
-                   (scandir ,etc
-                            (lambda (file)
-                              (not (member file '("." ".."))))))
+        ;; /etc is a mixture of static and dynamic settings.  Here is where we
+        ;; initialize it from the static part.
+        (format #t "populating /etc from ~a...~%" #$etc)
+        (let ((rm-f (lambda (f)
+                      (false-if-exception (delete-file f)))))
+          (rm-f "/etc/static")
+          (symlink #$etc "/etc/static")
+          (for-each (lambda (file)
+                      ;; TODO: Handle 'shadow' specially so that changed
+                      ;; password aren't lost.
+                      (let ((target (string-append "/etc/" file))
+                            (source (string-append "/etc/static/" file)))
+                        (rm-f target)
+                        (symlink source target)))
+                    (scandir #$etc
+                             (lambda (file)
+                               (not (member file '("." ".."))))))
 
-         ;; Prevent ETC from being GC'd.
-         (rm-f "/var/guix/gcroots/etc-directory")
-         (symlink ,etc "/var/guix/gcroots/etc-directory"))
+          ;; Prevent ETC from being GC'd.
+          (rm-f "/var/guix/gcroots/etc-directory")
+          (symlink #$etc "/var/guix/gcroots/etc-directory"))
 
-       ;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it.
-       (setenv "PATH" "/run/current-system/bin")
+        ;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it.
+        (setenv "PATH" "/run/current-system/bin")
 
-       (format #t "starting services...~%")
-       (for-each start ',(append-map service-provision services))))
+        (format #t "starting services...~%")
+        (for-each start '#$(append-map service-provision services))))
 
-  (text-file "dmd.conf" (object->string config)))
+  (gexp->file "dmd.conf" config))
 
 ;;; dmd.scm ends here