summaryrefslogtreecommitdiff
path: root/gnu/services
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 /gnu/services
parentf6a7b21df7b499e8d304cc96fc949ec889e1eb10 (diff)
services: xorg: Rewrite using gexps.
* gnu/services/xorg.scm (xorg-start-command): Rewrite in terms of 'gexp->script'. (xinitrc): Likewise.
Diffstat (limited to 'gnu/services')
-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?