Subject: [bug#34929] [PATCH 00/12] Provide uniform keyboard layout configuration

From: Julien Lepiller <[email-masked]>
Date: Sun, 24 Mar 2019 11:03:03 +0100

Le Wed, 20 Mar 2019 23:32:29 +0100,
Ludovic Courtès <[email-masked]> a écrit :

> Hello Guix!
> 
> This patch series attempts to address a longstanding issue in Guix:
> keyboard layout configuration.
> 
> The end result is that you can configure the layout for GRUB,
> the Linux console, and Xorg using a single <keyboard-layout> record,
> which directly corresponds to an XKB layout specification.
> 
> The three things still have to be configured separately.  Here’s an
> example where GRUB, Linux, and Xorg use the same layout:
> 
>   (operating-system
>     ;; ...
>     (keyboard-layout (keyboard-layout "tr"))  ;for the console
>     (bootloader (bootloader-configuration
>                   (bootloader grub-efi-bootloader)
>                   (target "/boot/efi")
>                   (keyboard-layout keyboard-layout))) ;for GRUB
>     (services (modify-services %desktop-services
>                 (slim-service-type config =>
>                   (slim-configuration
>                     (inherit config)
>                     (xorg-configuration
>                       (xorg-configuration             ;for Xorg
>                         (keyboard-layout keyboard-layout))))))))
> 
> Clearly the Xorg bit is suboptimal.  I don’t see any obvious way
> to simplify this part unfortunately because the <xorg-configuration>
> record is aggregated by ‘slim-configuration’ & co. (there’s no Xorg
> service that we could extend.)  That’s something we can still improve
> afterwards, though.
> 
> Potentially controversial issues:
> 
>   1. The Xorg API is changed in an incompatible way:
>      ‘xorg-start-command’ has a different prototype, the ‘startx’
>      field of ‘slim-configuration’ is gone, etc.  If you were using
>      these, your config will have to be adjusted to use the new
>      ‘xorg-configuration’ record. (But hey, we’re still pre-1.0!).
> 
>   2. Since both fields and the record constructor are called
>      ‘keyboard-layout’, you could easily have name clashes (it’s
>      more of an aesthetic consideration, not a showstopper.)
> 
> After that we should probably change the installer to generate
> the right incantations.
> 
> These patches fix <https://issues.guix.info/issue/25453> and
> <https://issues.guix.info/issue/26234>.
> 
> Feedback welcome!
> 
> And thanks to nee for the initial inspiration!
> 
> Ludo’.
> 
> Ludovic Courtès (12):
>   bootloader: Remove unused 'additional-configuration' field.
>   bootloader: Reindent record type definition.
>   Add (gnu system keyboard).
>   bootloader: Add a 'keyboard-layout' field.
>   services: xorg: Remove unused #:guile parameter.
>   services: xorg: Define and <xorg-configuration> record type.
>   services: sddm, slim, gdm: Take an <xorg-configuration> record.
>   services: xorg: Add a 'keyboard-layout' field in
> <xorg-configuration>. vm: 'virtualized-operating-system' inherits
> from the user's bootloader config.
>   gnu: Add loadkeys-static.
>   system: Initialize console keyboard layout in the initrd.
>   doc: Document keyboard layout.
> 
>  doc/guix.texi               | 305
> ++++++++++++++++++++++++------------ gnu.scm                     |
> 3 +- gnu/bootloader.scm          |  43 ++---
>  gnu/bootloader/grub.scm     |  35 +++++
>  gnu/build/linux-boot.scm    |  15 +-
>  gnu/local.mk                |   1 +
>  gnu/packages/linux.scm      |  37 +++++
>  gnu/services/sddm.scm       |  14 +-
>  gnu/services/xorg.scm       | 182 ++++++++++++---------
>  gnu/system.scm              |   7 +-
>  gnu/system/keyboard.scm     |  98 ++++++++++++
>  gnu/system/linux-initrd.scm |  26 ++-
>  gnu/system/vm.scm           |   1 +
>  13 files changed, 561 insertions(+), 206 deletions(-)
>  create mode 100644 gnu/system/keyboard.scm
> 

Apart from the minor comments I already sent to patches 4, 6 and 8,
LGTM! Thank you!