summary refs log tree commit diff
path: root/gnu/services/xorg.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/services/xorg.scm')
-rw-r--r--gnu/services/xorg.scm129
1 files changed, 59 insertions, 70 deletions
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 9ee88170e4..9c96aab2b8 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -31,7 +31,6 @@
   #:use-module (gnu packages bash)
   #:use-module (guix gexp)
   #:use-module (guix store)
-  #:use-module (guix monads)
   #:use-module (guix derivations)
   #:use-module (guix records)
   #:use-module (srfi srfi-1)
@@ -63,8 +62,8 @@ appropriate screen resolution; otherwise, it must be a list of
 resolutions---e.g., @code{((1024 768) (640 480))}.
 
 Last, @var{extra-config} is a list of strings or objects appended to the
-@code{text-file*} argument list.  It is used to pass extra text to be added
-verbatim to the configuration file."
+@code{mixed-text-file} argument list.  It is used to pass extra text to be
+added verbatim to the configuration file."
   (define (device-section driver)
     (string-append "
 Section \"Device\"
@@ -87,7 +86,7 @@ Section \"Screen\"
   EndSubSection
 EndSection"))
 
-  (apply text-file* "xserver.conf" "
+  (apply mixed-text-file "xserver.conf" "
 Section \"Files\"
   FontPath \"" font-adobe75dpi "/share/fonts/X11/75dpi\"
   ModulePath \"" xf86-video-vesa "/lib/xorg/modules/drivers\"
@@ -128,7 +127,7 @@ EndSection
 
 (define* (xorg-start-command #:key
                              (guile (canonical-package guile-2.0))
-                             configuration-file
+                             (configuration-file (xorg-configuration-file))
                              (xorg-server xorg-server))
   "Return a derivation that builds a @var{guile} script to start the X server
 from @var{xorg-server}.  @var{configuration-file} is the server configuration
@@ -136,27 +135,24 @@ file or a derivation that builds it; when omitted, the result of
 @code{xorg-configuration-file} is used.
 
 Usually the X server is started by a login manager."
-  (mlet %store-monad ((config (if configuration-file
-                                  (return configuration-file)
-                                  (xorg-configuration-file))))
-    (define script
-      ;; Write a small wrapper around the X server.
-      #~(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")
-                 (string-append #$xorg-server "/bin/X") ;argv[0]
-                 "-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 exp
+    ;; Write a small wrapper around the X server.
+    #~(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")
+               (string-append #$xorg-server "/bin/X") ;argv[0]
+               "-logverbose" "-verbose"
+               "-xkbdir" (string-append #$xkeyboard-config "/share/X11/xkb")
+               "-config" #$configuration-file
+               "-nolisten" "tcp" "-terminate"
+
+               ;; Note: SLiM and other display managers add the
+               ;; '-auth' flag by themselves.
+               (cdr (command-line)))))
+
+  (program-file "start-xorg" exp))
 
 (define* (xinitrc #:key
                   (guile (canonical-package guile-2.0))
@@ -200,7 +196,7 @@ which should be passed to this script as the first argument.  If not, the
               (exec-from-login-shell xsession-file session)
               ;; Otherwise, start the specified session.
               (exec-from-login-shell session)))))
-  (gexp->script "xinitrc" builder))
+  (program-file "xinitrc" builder))
 
 
 ;;;
@@ -224,7 +220,7 @@ which should be passed to this script as the first argument.  If not, the
                        (xauth xauth) (dmd dmd) (bash bash)
                        (auto-login-session #~(string-append #$windowmaker
                                                             "/bin/wmaker"))
-                       startx)
+                       (startx (xorg-start-command)))
   "Return a service that spawns the SLiM graphical login manager, which in
 turn starts the X display server with @var{startx}, a command as returned by
 @code{xorg-start-command}.
@@ -251,13 +247,9 @@ If @var{theme} is @code{#f}, the use the default log-in theme; otherwise
 theme to use.  In that case, @var{theme-name} specifies the name of the
 theme."
 
-  (define (slim.cfg)
-    (mlet %store-monad ((startx  (if startx
-                                     (return startx)
-                                     (xorg-start-command)))
-                        (xinitrc (xinitrc #:fallback-session
-                                          auto-login-session)))
-      (text-file* "slim.cfg"  "
+  (define slim.cfg
+    (let ((xinitrc (xinitrc #:fallback-session auto-login-session)))
+      (mixed-text-file "slim.cfg"  "
 default_path /run/current-system/profile/bin
 default_xserver " startx "
 xserver_arguments :0 vt7
@@ -271,40 +263,37 @@ sessiondir /run/current-system/profile/share/xsessions
 session_msg session (F1 to change):
 
 halt_cmd " dmd "/sbin/halt
-reboot_cmd " dmd "/sbin/reboot
-"
-(if auto-login?
-    (string-append "auto_login yes\ndefault_user " default-user "\n")
-    "")
-(if theme-name
-    (string-append "current_theme " theme-name "\n")
-    ""))))
-
-  (mlet %store-monad ((slim.cfg (slim.cfg)))
-    (return
-     (service
-      (documentation "Xorg display server")
-      (provision '(xorg-server))
-      (requirement '(user-processes host-name udev))
-      (start
-       #~(lambda ()
-           ;; A stale lock file can prevent SLiM from starting, so remove it
-           ;; to be on the safe side.
-           (false-if-exception (delete-file "/var/run/slim.lock"))
-
-           (fork+exec-command
-            (list (string-append #$slim "/bin/slim") "-nodaemon")
-            #:environment-variables
-            (list (string-append "SLIM_CFGFILE=" #$slim.cfg)
-                  #$@(if theme
-                         (list #~(string-append "SLIM_THEMESDIR=" #$theme))
-                         #~())))))
-      (stop #~(make-kill-destructor))
-      (respawn? #t)
-      (pam-services
-       ;; Tell PAM about 'slim'.
-       (list (unix-pam-service
-              "slim"
-              #:allow-empty-passwords? allow-empty-passwords?)))))))
+reboot_cmd " dmd "/sbin/reboot\n"
+            (if auto-login?
+                (string-append "auto_login yes\ndefault_user " default-user "\n")
+                "")
+            (if theme-name
+                (string-append "current_theme " theme-name "\n")
+               ""))))
+
+  (service
+   (documentation "Xorg display server")
+   (provision '(xorg-server))
+   (requirement '(user-processes host-name udev))
+   (start
+    #~(lambda ()
+        ;; A stale lock file can prevent SLiM from starting, so remove it
+        ;; to be on the safe side.
+        (false-if-exception (delete-file "/var/run/slim.lock"))
+
+        (fork+exec-command
+         (list (string-append #$slim "/bin/slim") "-nodaemon")
+         #:environment-variables
+         (list (string-append "SLIM_CFGFILE=" #$slim.cfg)
+               #$@(if theme
+                      (list #~(string-append "SLIM_THEMESDIR=" #$theme))
+                      #~())))))
+   (stop #~(make-kill-destructor))
+   (respawn? #t)
+   (pam-services
+    ;; Tell PAM about 'slim'.
+    (list (unix-pam-service
+           "slim"
+           #:allow-empty-passwords? allow-empty-passwords?)))))
 
 ;;; xorg.scm ends here