summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-05-21 18:12:28 +0200
committerLudovic Courtès <ludo@gnu.org>2015-05-21 21:33:19 +0200
commit12422c9d3872f66c4eac5eb65824238c3e09be1a (patch)
tree7e6fec89b37b58e9921354f52cfc93448e36bdad
parentd1cdd7ba7a7bf6d0ea2ea5466d4bc978586f1f2f (diff)
downloadguix-12422c9d3872f66c4eac5eb65824238c3e09be1a.tar.gz
services: xorg: Allow extra config text to be added verbatim.
* gnu/services/xorg.scm (xorg-configuration-file): Add #:extra-config and
  honor it.
* doc/guix.texi (X Window): Adjust accordingly.
-rw-r--r--doc/guix.texi6
-rw-r--r--gnu/services/xorg.scm18
2 files changed, 18 insertions, 6 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 36e68bbe9a..fd0d29cb8f 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -5260,7 +5260,7 @@ Usually the X server is started by a login manager.
 @end deffn
 
 @deffn {Monadic Procedure} xorg-configuration-file @
-  [#:drivers '()] [#:resolutions '()]
+  [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
 Return a configuration file for the Xorg server containing search paths for
 all the common drivers.
 
@@ -5271,6 +5271,10 @@ this order---e.g., @code{(\"modesetting\" \"vesa\")}.
 Likewise, when @var{resolutions} is the empty list, Xorg chooses an
 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.
 @end deffn
 
 @node Desktop Services
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index a9afa2fef5..e43bfcffe0 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -49,7 +49,8 @@
 ;;;
 ;;; Code:
 
-(define* (xorg-configuration-file #:key (drivers '()) (resolutions '()))
+(define* (xorg-configuration-file #:key (drivers '()) (resolutions '())
+                                  (extra-config '()))
   "Return a configuration file for the Xorg server containing search paths for
 all the common drivers.
 
@@ -59,7 +60,11 @@ this order---e.g., @code{(\"modesetting\" \"vesa\")}.
 
 Likewise, when @var{resolutions} is the empty list, Xorg chooses an
 appropriate screen resolution; otherwise, it must be a list of
-resolutions---e.g., @code{((1024 768) (640 480))}."
+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."
   (define (device-section driver)
     (string-append "
 Section \"Device\"
@@ -82,7 +87,7 @@ Section \"Screen\"
   EndSubSection
 EndSection"))
 
-  (text-file* "xserver.conf" "
+  (apply text-file* "xserver.conf" "
 Section \"Files\"
   FontPath \"" font-adobe75dpi "/share/fonts/X11/75dpi\"
   ModulePath \"" xf86-video-vesa "/lib/xorg/modules/drivers\"
@@ -107,10 +112,13 @@ Section \"ServerFlags\"
   Option \"AllowMouseOpenFail\" \"on\"
 EndSection
 "
-  (string-join (map device-section drivers) "\n")
+  (string-join (map device-section drivers) "\n") "\n"
   (string-join (map (cut screen-section <> resolutions)
                     drivers)
-               "\n")))
+               "\n")
+
+  "\n"
+  extra-config))
 
 (define* (xorg-start-command #:key
                              (guile (canonical-package guile-2.0))