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.
This commit is contained in:
Ludovic Courtès 2019-04-03 13:55:06 +02:00
parent 607fcc7540
commit 305a732a0a
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
3 changed files with 49 additions and 11 deletions

View File

@ -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

View File

@ -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

View File

@ -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.