summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-04-27 19:28:47 +0200
committerLudovic Courtès <ludo@gnu.org>2014-04-28 23:41:11 +0200
commit8779d3429414b62d3071987bacca7a9e0c8abc06 (patch)
tree058d7196485ed9f52ca6fbfcf649770e10687ae4
parentf6a7b21df7b499e8d304cc96fc949ec889e1eb10 (diff)
downloadguix-8779d3429414b62d3071987bacca7a9e0c8abc06.tar.gz
services: xorg: Rewrite using gexps.
* gnu/services/xorg.scm (xorg-start-command): Rewrite in terms of
  'gexp->script'.
  (xinitrc): Likewise.
-rw-r--r--gnu/services/xorg.scm93
1 files changed, 29 insertions, 64 deletions
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 81b5bc17a5..e47b33c9b8 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -87,77 +87,42 @@ Section \"Screen\"
   Device \"Device-vesa\"
 EndSection"))
 
-  (mlet %store-monad ((guile-bin   (package-file guile "bin/guile"))
-                      (xorg-bin    (package-file xorg-server "bin/X"))
-                      (dri         (package-file mesa "lib/dri"))
-                      (xkbcomp-bin (package-file xkbcomp "bin"))
-                      (xkb-dir     (package-file xkeyboard-config
-                                                 "share/X11/xkb"))
-                      (config      (xserver.conf)))
-    (define builder
+  (mlet %store-monad ((config (xserver.conf)))
+    (define script
       ;; Write a small wrapper around the X server.
-      `(let ((out (assoc-ref %outputs "out")))
-         (call-with-output-file out
-           (lambda (port)
-             (format port "#!~a --no-auto-compile~%!#~%" ,guile-bin)
-             (write '(begin
-                       (setenv "XORG_DRI_DRIVER_PATH" ,dri)
-                       (setenv "XKB_BINDIR" ,xkbcomp-bin)
-
-                       (apply execl
-
-                              ,xorg-bin "-ac" "-logverbose" "-verbose"
-                              "-xkbdir" ,xkb-dir
-                              "-config" ,(derivation->output-path config)
-                              "-nolisten" "tcp" "-terminate"
-
-                              ;; Note: SLiM and other display managers add the
-                              ;; '-auth' flag by themselves.
-                              (cdr (command-line))))
-                    port)))
-         (chmod out #o555)
-         #t))
-
-    (mlet %store-monad ((inputs (lower-inputs
-                                 `(("xorg" ,xorg-server)
-                                   ("xkbcomp" ,xkbcomp)
-                                   ("xkeyboard-config" ,xkeyboard-config)
-                                   ("mesa" ,mesa)
-                                   ("guile" ,guile)
-                                   ("xorg.conf" ,config)))))
-      (derivation-expression "start-xorg" builder
-                             #:inputs inputs))))
+      #~(begin
+          (setenv "XORG_DRI_DRIVER_PATH" (string-append #$mesa "/lib/dri"))
+          (setenv "XKB_BINDIR" (string-append #$xkbcomp "/bin"))
+
+          (apply execl (string-append #$xorg-server "/bin/X")
+                 "-ac" "-logverbose" "-verbose"
+                 "-xkbdir" (string-append #$xkeyboard-config "/share/X11/xkb")
+                 "-config" #$config
+                 "-nolisten" "tcp" "-terminate"
+
+                 ;; Note: SLiM and other display managers add the
+                 ;; '-auth' flag by themselves.
+                 (cdr (command-line)))))
+
+    (gexp->script "start-xorg" script)))
 
 (define* (xinitrc #:key
                   (guile guile-final)
                   (ratpoison ratpoison)
                   (windowmaker windowmaker))
   "Return a system-wide xinitrc script that starts the specified X session."
-  (mlet %store-monad ((guile-bin     (package-file guile "bin/guile"))
-                      (ratpoison-bin (package-file ratpoison "bin/ratpoison"))
-                      (wmaker-bin    (package-file windowmaker "bin/wmaker"))
-                      (inputs        (lower-inputs
-                                      `(("raptoison" ,ratpoison)
-                                        ("wmaker" ,windowmaker)))))
-    (define builder
-      `(let ((out (assoc-ref %outputs "out")))
-         (call-with-output-file out
-           (lambda (port)
-             (format port "#!~a --no-auto-compile~%!#~%" ,guile-bin)
-             (write '(begin
-                       (use-modules (ice-9 match))
-
-                       ;; TODO: Check for ~/.xsession.
-                       (match (command-line)
-                         ((_ "ratpoison")
-                          (execl ,ratpoison-bin))
-                         (_
-                          (execl ,wmaker-bin))))
-                    port)))
-         (chmod out #o555)
-         #t))
-
-    (derivation-expression "xinitrc" builder #:inputs inputs)))
+  (define builder
+    #~(begin
+        (use-modules (ice-9 match))
+
+        ;; TODO: Check for ~/.xsession.
+        (match (command-line)
+          ((_ "ratpoison")
+           (execl (string-append #$ratpoison "/bin/ratpoison")))
+          (_
+           (execl (string-append #$windowmaker "/bin/wmaker"))))))
+
+  (gexp->script "xinitrc" builder))
 
 (define* (slim-service #:key (slim slim)
                        (allow-empty-passwords? #t) auto-login?