aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2019-04-03 13:55:06 +0200
committerLudovic Courtès <ludo@gnu.org>2019-04-05 15:39:35 +0200
commit305a732a0a19c5810aab401aa7d70eba02ac386b (patch)
tree674483af39ab31c329c8ec3880386b4118e52647
parent607fcc75404e2b1fc74affcf372b4a6a789ac55e (diff)
downloadguix-305a732a0a19c5810aab401aa7d70eba02ac386b.tar
guix-305a732a0a19c5810aab401aa7d70eba02ac386b.tar.gz
services: xorg: Add 'set-xorg-configuration'.
* gnu/services/xorg.scm (gdm-service-type)[compose, extend]: New fields. (set-xorg-configuration): New procedure. * doc/guix.texi (Keyboard Layout): Use it. (X Window): Document it. * gnu/system/examples/desktop.tmpl: Add 'keyboard-layout' fields.
-rw-r--r--doc/guix.texi24
-rw-r--r--gnu/services/xorg.scm22
-rw-r--r--gnu/system/examples/desktop.tmpl14
3 files changed, 49 insertions, 11 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 616c2ef305..96755a6cce 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11077,6 +11077,7 @@ Let's say you want your system to use the Turkish keyboard layout throughout
your system---bootloader, console, and Xorg. Here's what your system
configuration would look like:
+@findex set-xorg-configuration
@lisp
;; Using the Turkish layout for the bootloader, the console,
;; and for Xorg.
@@ -11088,18 +11089,17 @@ configuration would look like:
(bootloader grub-efi-bootloader)
(target "/boot/efi")
(keyboard-layout keyboard-layout))) ;for GRUB
- (services (modify-services %desktop-services
- (gdm-service-type config =>
- (gdm-configuration
- (inherit config)
- (xorg-configuration
+ (services (cons (set-xorg-configuration
(xorg-configuration ;for Xorg
- (keyboard-layout keyboard-layout))))))))
+ (keyboard-layout keyboard-layout)))
+ %desktop-services)))
@end lisp
In the example above, for GRUB and for Xorg, we just refer to the
@code{keyboard-layout} field defined above, but we could just as well refer to
-a different layout.
+a different layout. The @code{set-xorg-configuration} procedure communicates
+the desired Xorg configuration to the graphical log-in manager, by default
+GDM.
@node Locales
@section Locales
@@ -13566,6 +13566,16 @@ default is @code{-nolisten tcp}.
@end table
@end deftp
+@deffn {Scheme Procedure} set-xorg-configuration @var{config} @
+ [@var{login-manager-service-type}]
+Tell the log-in manager (of type @var{login-manager-service-type}) to use
+@var{config}, an <xorg-configuration> record.
+
+Since the Xorg configuration is embedded in the log-in manager's
+configuration---e.g., @code{gdm-configuration}---this procedure provides a
+shorthand to set the Xorg configuration.
+@end deffn
+
@deffn {Scheme Procedure} xorg-start-command [@var{config}]
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
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 7745f9a3cc..26ca0d4f1f 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -99,7 +99,8 @@
gdm-configuration
gdm-service-type
- gdm-service))
+ gdm-service
+ set-xorg-configuration))
;;; Commentary:
;;;
@@ -875,6 +876,15 @@ the GNOME desktop environment.")
xorg-configuration-keyboard-layout
gdm-configuration-xorg))))
+ ;; For convenience, this service can be extended with an
+ ;; <xorg-configuration> record. Take the first one that
+ ;; comes.
+ (compose first)
+ (extend (lambda (config xorg-configuration)
+ (gdm-configuration
+ (inherit config)
+ (xorg-configuration xorg-configuration))))
+
(default-value (gdm-configuration))
(description
"Run the GNOME Desktop Manager (GDM), a program that allows
@@ -908,4 +918,14 @@ password."
(gdm gdm)
(allow-empty-passwords? allow-empty-passwords?))))
+(define* (set-xorg-configuration config
+ #:optional
+ (login-manager-service-type
+ gdm-service-type))
+ "Tell the log-in manager (of type @var{login-manager-service-type}) to use
+@var{config}, an <xorg-configuration> record."
+ (simple-service 'set-xorg-configuration
+ login-manager-service-type
+ config))
+
;;; xorg.scm ends here
diff --git a/gnu/system/examples/desktop.tmpl b/gnu/system/examples/desktop.tmpl
index ff4c12b24a..baeb5e2d77 100644
--- a/gnu/system/examples/desktop.tmpl
+++ b/gnu/system/examples/desktop.tmpl
@@ -3,7 +3,7 @@
;; root partition is encrypted with LUKS.
(use-modules (gnu) (gnu system nss))
-(use-service-modules desktop)
+(use-service-modules desktop xorg)
(use-package-modules certs gnome)
(operating-system
@@ -11,11 +11,16 @@
(timezone "Europe/Paris")
(locale "en_US.utf8")
+ ;; Choose US English keyboard layout. The "altgr-intl"
+ ;; variant provides dead keys for accented characters.
+ (keyboard-layout (keyboard-layout "us" "altgr-intl"))
+
;; Use the UEFI variant of GRUB with the EFI System
;; Partition mounted on /boot/efi.
(bootloader (bootloader-configuration
(bootloader grub-efi-bootloader)
- (target "/boot/efi")))
+ (target "/boot/efi")
+ (keyboard-layout keyboard-layout)))
;; Specify a mapped device for the encrypted root partition.
;; The UUID is that returned by 'cryptsetup luksUUID'.
@@ -58,7 +63,10 @@
;; include the X11 log-in service, networking with
;; NetworkManager, and more.
(services (append (list (service gnome-desktop-service-type)
- (service xfce-desktop-service-type))
+ (service xfce-desktop-service-type)
+ (set-xorg-configuration
+ (xorg-configuration
+ (keyboard-layout keyboard-layout))))
%desktop-services))
;; Allow resolution of '.local' host names with mDNS.