[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
07/14: services: xorg: Define an <xorg-configuration> record type.
From: |
guix-commits |
Subject: |
07/14: services: xorg: Define an <xorg-configuration> record type. |
Date: |
Sun, 24 Mar 2019 18:10:22 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit b2e564515a811c75ed9bd30969bc48ac4eadebfb
Author: Ludovic Courtès <address@hidden>
Date: Mon Mar 18 22:56:13 2019 +0100
services: xorg: Define an <xorg-configuration> record type.
* gnu/services/xorg.scm (<xorg-configuration>): New record type.
(xorg-configuration-file): Remove.
(xorg-wrapper): Remove #:modules, #:configuration-file, and
#:xorg-server; add optional 'config' parameter instead. Adjust
accordingly.
(xorg-start-command): Likewise.
* doc/guix.texi (X Window): Document 'xorg-configuration'. Update
'xorg-start-command' documentation. Remove 'xorg-configuration-file'
documentation.
---
doc/guix.texi | 118 +++++++++++++++----------------------------------
gnu/services/xorg.scm | 119 +++++++++++++++++++++++++-------------------------
2 files changed, 95 insertions(+), 142 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 5789b3b..b49f651 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -13352,99 +13352,53 @@ type @code{<sddm-configuration>}.
@end example
@end deffn
address@hidden {Scheme Procedure} xorg-start-command @
- [#:modules %default-xorg-modules] @
- [#:fonts %default-xorg-fonts] @
- [#:configuration-file (xorg-configuration-file @dots{})] @
- [#:xorg-server @var{xorg-server}]
- [#:xserver-arguments '("-nolisten" "tcp")]
-Return a @code{startx} script in which @var{modules}, a list of X module
-packages, and @var{fonts}, a list of X font directories, are available. See
address@hidden for more details on the arguments. The result should be
-used in place of @code{startx}.
address@hidden Xorg, configuration
address@hidden {Data Type} xorg-configuration
+This data type represents the configuration of the Xorg graphical display
+server. Note that there is not Xorg service; instead, the X server is started
+by a ``display manager'' such as GDM, SDDM, and SLiM. Thus, the configuration
+of these display managers aggregates an @code{xorg-configuration} record.
-Usually the X server is started by a login manager.
address@hidden deffn
address@hidden @asis
address@hidden @code{modules} (default: @code{%default-xorg-modules})
+This is a list of @dfn{module packages} loaded by the Xorg
+server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
address@hidden @code{-listen tcp}, for X11.
-This procedure is useful to override command line options for the X server,
-such as having it listen to over TCP:
address@hidden @code{fonts} (default: @code{%default-xorg-fonts})
+This is a list of font directories to add to the server's @dfn{font path}.
address@hidden
-(operating-system
- ...
- (services
- (modify-services %desktop-services
- (slim-service-type config =>
- (slim-configuration
- (inherit config)
- (startx (xorg-start-command
- #:xserver-arguments '("-listen" "tcp"))))))))
address@hidden example
-
address@hidden {Scheme Procedure} xorg-configuration-file @
- [#:modules %default-xorg-modules] @
- [#:fonts %default-xorg-fonts] @
- [#:drivers '()] [#:resolutions '()] [#:extra-config '()]
-Return a configuration file for the Xorg server containing search paths for
-all the common drivers.
-
address@hidden must be a list of @dfn{module packages} loaded by the Xorg
-server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
address@hidden must be a list of font directories to add to the server's
address@hidden path}.
address@hidden @code{drivers} (default: @code{'()})
+This must be either the empty list, in which case Xorg chooses a graphics
+driver automatically, or a list of driver names that will be tried in this
+order---e.g., @code{("modesetting" "vesa")}.
address@hidden must be either the empty list, in which case Xorg chooses a
-graphics driver automatically, or a list of driver names that will be tried in
-this order---e.g., @code{("modesetting" "vesa")}.
address@hidden @code{resolutions} (default: @code{'()})
+When @code{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))}.
-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))}.
address@hidden @code{extra-config} (default: @code{'()})
+This is a list of strings or objects appended to the configuration file. It
+is used to pass extra text to be added verbatim to the configuration file.
-Last, @var{extra-config} is a list of strings or objects appended to the
-configuration file. It is used to pass extra text to be
-added verbatim to the configuration file.
address@hidden @code{server} (default: @code{xorg-server})
+This is the package providing the Xorg server.
address@hidden keymap
address@hidden keyboard layout
-This procedure is especially useful to configure a different keyboard layout
-than the default US keymap. For instance, to use the ``bépo'' keymap by
-default on the display manager:
address@hidden @code{server-arguments} (default:
@code{%default-xorg-server-arguments})
+This is the list of command-line arguments to pass to the X server. The
+default is @code{-nolisten tcp}.
address@hidden table
address@hidden deftp
address@hidden
-(define bepo-evdev
- "Section \"InputClass\"
- Identifier \"evdev keyboard catchall\"
- Driver \"evdev\"
- MatchIsKeyboard \"on\"
- Option \"xkb_layout\" \"fr\"
- Option \"xkb_variant\" \"bepo\"
-EndSection")
address@hidden {Scheme Procedure} xorg-start-command address@hidden
+Return a @code{startx} script in which the modules, fonts, etc. specified
+in @var{config}, are available. The result should be used in place of
address@hidden
-(operating-system
- ...
- (services
- (modify-services %desktop-services
- (slim-service-type config =>
- (slim-configuration
- (inherit config)
- (startx (xorg-start-command
- #:configuration-file
- (xorg-configuration-file
- #:extra-config
- (list bepo-evdev)))))))))
address@hidden example
-
-The @code{MatchIsKeyboard} line specifies that we only apply the configuration
-to keyboards. Without this line, other devices such as touchpad may not work
-correctly because they will be attached to the wrong driver. In this example,
-the user typically used @code{setxkbmap fr bepo} to set their favorite keymap
-once logged in. The first argument corresponds to the layout, while the second
-argument corresponds to the variant. The @code{xkb_variant} line can be
omitted
-to select the default variant.
+Usually the X server is started by a login manager.
@end deffn
+
@deffn {Scheme Procedure} screen-locker-service @var{package} address@hidden
Add @var{package}, a package for a screen locker or screen saver whose
command is @var{program}, to the set of setuid programs and add a PAM entry
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 8381a7e..3c547c1 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -48,7 +48,16 @@
#:use-module (srfi srfi-9)
#:use-module (srfi srfi-26)
#:use-module (ice-9 match)
- #:export (xorg-configuration-file
+ #:export (xorg-configuration
+ xorg-configuration?
+ xorg-configuration-modules
+ xorg-configuration-fonts
+ xorg-configuration-drivers
+ xorg-configuration-resolutions
+ xorg-configuration-extra-config
+ xorg-configuration-server
+ xorg-configuration-server-arguments
+
%default-xorg-modules
%default-xorg-fonts
xorg-wrapper
@@ -122,33 +131,36 @@
"/share/fonts/X11/misc")
(file-append font-adobe75dpi "/share/fonts/X11/75dpi")))
-(define* (xorg-configuration-file #:key
- (modules %default-xorg-modules)
- (fonts %default-xorg-fonts)
- (drivers '()) (resolutions '())
- (extra-config '()))
- "Return a configuration file for the Xorg server containing search paths for
-all the common drivers.
-
address@hidden must be a list of @dfn{module packages} loaded by the Xorg
-server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
address@hidden must be a list of font directories to add to the server's
address@hidden path}.
-
address@hidden must be either the empty list, in which case Xorg chooses a
-graphics driver automatically, or a list of driver names that will be tried in
-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
-configuration file. It is used to pass extra text to be
-added verbatim to the configuration file."
+(define %default-xorg-server-arguments
+ ;; Default command-line arguments for X.
+ '("-nolisten" "tcp"))
+
+;; Configuration of an Xorg server.
+(define-record-type* <xorg-configuration>
+ xorg-configuration make-xorg-configuration
+ xorg-configuration?
+ (modules xorg-configuration-modules ;list of packages
+ (default %default-xorg-modules))
+ (fonts xorg-configuration-fonts ;list of packges
+ (default %default-xorg-fonts))
+ (drivers xorg-configuration-drivers ;list of strings
+ (default '()))
+ (resolutions xorg-configuration-resolutions ;list of tuples
+ (default '()))
+ (extra-config xorg-configuration-extra-config ;list of strings
+ (default '()))
+ (server xorg-configuration-server ;package
+ (default xorg-server))
+ (server-arguments xorg-configuration-server-arguments ;list of strings
+ (default %default-xorg-server-arguments)))
+
+(define (xorg-configuration->file config)
+ "Compute an Xorg configuration file corresponding to CONFIG, an
+<xorg-configuration> record."
(define all-modules
;; 'xorg-server' provides 'fbdevhw.so' etc.
- (append modules (list xorg-server)))
+ (append (xorg-configuration-modules config)
+ (list xorg-server)))
(define build
#~(begin
@@ -159,7 +171,7 @@ added verbatim to the configuration file."
(call-with-output-file #$output
(lambda (port)
(define drivers
- '#$drivers)
+ '#$(xorg-configuration-drivers config))
(define (device-section driver)
(string-append "
@@ -201,7 +213,7 @@ EndSection"))
(display "Section \"Files\"\n" port)
(for-each (lambda (font)
(format port " FontPath \"~a\"~%" font))
- '#$fonts)
+ '#$(xorg-configuration-fonts config))
(for-each (lambda (module)
(format port
" ModulePath \"~a\"~%"
@@ -221,7 +233,8 @@ EndSection\n" port)
port)
(newline port)
(display (string-join
- (map (cut screen-section <> '#$resolutions)
+ (map (cut screen-section <>
+ '#$(xorg-configuration-resolutions config))
drivers)
"\n")
port)
@@ -229,11 +242,10 @@ EndSection\n" port)
(for-each (lambda (config)
(display config port))
- '#$extra-config)))))
+ '#$(xorg-configuration-extra-config config))))))
(computed-file "xserver.conf" build))
-
(define (xorg-configuration-directory modules)
"Return a directory that contains the @code{.conf} files for X.org that
includes the @code{share/X11/xorg.conf.d} directories of each package listed
@@ -260,51 +272,38 @@ in @var{modules}."
files)
#t))))
-(define* (xorg-wrapper #:key
- (modules %default-xorg-modules)
- (configuration-file (xorg-configuration-file
- #:modules modules))
- (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
-file or a derivation that builds it; when omitted, the result of
address@hidden is used. The resulting script should be used
-in place of @code{/usr/bin/X}."
+(define* (xorg-wrapper #:optional (config (xorg-configuration)))
+ "Return a derivation that builds a script to start the X server with the
+given @var{config}. The resulting script should be used in place of
address@hidden/usr/bin/X}."
(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"))
- (let ((X (string-append #$xorg-server "/bin/X")))
+ (let ((X (string-append #$(xorg-configuration-server config)
"/bin/X")))
(apply execl X X
"-xkbdir" (string-append #$xkeyboard-config "/share/X11/xkb")
- "-config" #$configuration-file
- "-configdir" #$(xorg-configuration-directory modules)
+ "-config" #$(xorg-configuration->file config)
+ "-configdir" #$(xorg-configuration-directory
+ (xorg-configuration-modules config))
(cdr (command-line))))))
(program-file "X-wrapper" exp))
-(define* (xorg-start-command #:key
- (modules %default-xorg-modules)
- (fonts %default-xorg-fonts)
- (configuration-file
- (xorg-configuration-file #:modules modules
- #:fonts fonts))
- (xorg-server xorg-server)
- (xserver-arguments '("-nolisten" "tcp")))
- "Return a @code{startx} script in which @var{modules}, a list of X module
-packages, and @var{fonts}, a list of X font directories, are available. See
address@hidden for more details on the arguments. The result should be
-used in place of @code{startx}."
+(define* (xorg-start-command #:optional (config (xorg-configuration)))
+ "Return a @code{startx} script in which the modules, fonts, etc. specified
+in @var{config}, are available. The result should be used in place of
address@hidden"
(define X
- (xorg-wrapper #:configuration-file configuration-file
- #:modules modules
- #:xorg-server xorg-server))
+ (xorg-wrapper config))
+
(define exp
;; Write a small wrapper around the X server.
#~(apply execl #$X #$X ;; Second #$X is for argv[0].
- "-logverbose" "-verbose" "-terminate" address@hidden
+ "-logverbose" "-verbose" "-terminate"
+ #$@(xorg-configuration-server-arguments config)
(cdr (command-line))))
(program-file "startx" exp))
- 02/14: bootloader: Remove unused 'additional-configuration' field., (continued)
- 02/14: bootloader: Remove unused 'additional-configuration' field., guix-commits, 2019/03/24
- 06/14: services: xorg: Remove unused #:guile parameter., guix-commits, 2019/03/24
- 05/14: bootloader: Add a 'keyboard-layout' field., guix-commits, 2019/03/24
- 04/14: Add (gnu system keyboard)., guix-commits, 2019/03/24
- 10/14: vm: 'virtualized-operating-system' inherits from the user's bootloader config., guix-commits, 2019/03/24
- 09/14: services: xorg: Add a 'keyboard-layout' field in <xorg-configuration>., guix-commits, 2019/03/24
- 11/14: gnu: Add loadkeys-static., guix-commits, 2019/03/24
- 08/14: services: sddm, slim, gdm: Take an <xorg-configuration> record., guix-commits, 2019/03/24
- 14/14: gnu: Add xfce4-whiskermenu-plugin., guix-commits, 2019/03/24
- 13/14: doc: Document keyboard layout., guix-commits, 2019/03/24
- 07/14: services: xorg: Define an <xorg-configuration> record type.,
guix-commits <=
- 12/14: system: Initialize console keyboard layout in the initrd., guix-commits, 2019/03/24