unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#35120] [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc
@ 2019-04-03 12:36 Ludovic Courtès
  2019-04-03 12:39 ` [bug#35120] [PATCH 1/3] services: xorg: Add 'set-xorg-configuration' Ludovic Courtès
  2019-04-05 13:48 ` bug#35120: [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc Ludovic Courtès
  0 siblings, 2 replies; 5+ messages in thread
From: Ludovic Courtès @ 2019-04-03 12:36 UTC (permalink / raw)
  To: 35120

Hi,

Here are patches to simplify Xorg keyboard layout configuration a bit
and to update documentation.

Thoughts?

Ludo’.

Ludovic Courtès (3):
  services: xorg: Add 'set-xorg-configuration'.
  doc: Explain how to change the keyboard layout at run time.
  services: console-keymap: Deprecate.

 doc/guix.texi                    | 77 +++++++++++++++++++-------------
 gnu/services/base.scm            |  3 +-
 gnu/services/xorg.scm            | 22 ++++++++-
 gnu/system/examples/desktop.tmpl | 14 ++++--
 4 files changed, 81 insertions(+), 35 deletions(-)

-- 
2.21.0

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#35120] [PATCH 1/3] services: xorg: Add 'set-xorg-configuration'.
  2019-04-03 12:36 [bug#35120] [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc Ludovic Courtès
@ 2019-04-03 12:39 ` Ludovic Courtès
  2019-04-03 12:39   ` [bug#35120] [PATCH 2/3] doc: Explain how to change the keyboard layout at run time Ludovic Courtès
  2019-04-03 12:39   ` [bug#35120] [PATCH 3/3] services: console-keymap: Deprecate Ludovic Courtès
  2019-04-05 13:48 ` bug#35120: [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc Ludovic Courtès
  1 sibling, 2 replies; 5+ messages in thread
From: Ludovic Courtès @ 2019-04-03 12:39 UTC (permalink / raw)
  To: 35120

* 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.
---
 doc/guix.texi                    | 24 +++++++++++++++++-------
 gnu/services/xorg.scm            | 22 +++++++++++++++++++++-
 gnu/system/examples/desktop.tmpl | 14 +++++++++++---
 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.
-- 
2.21.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [bug#35120] [PATCH 2/3] doc: Explain how to change the keyboard layout at run time.
  2019-04-03 12:39 ` [bug#35120] [PATCH 1/3] services: xorg: Add 'set-xorg-configuration' Ludovic Courtès
@ 2019-04-03 12:39   ` Ludovic Courtès
  2019-04-03 12:39   ` [bug#35120] [PATCH 3/3] services: console-keymap: Deprecate Ludovic Courtès
  1 sibling, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2019-04-03 12:39 UTC (permalink / raw)
  To: 35120

* doc/guix.texi (Keyboard Layout): Mention GNOME's "Region & Language",
setxkbmap, and loadkeys.
---
 doc/guix.texi | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 96755a6cce..1b0bd1de58 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11002,6 +11002,8 @@ special-case and is automatically added whether or not it is specified.
 @node Keyboard Layout
 @section Keyboard Layout
 
+@cindex keyboard layout
+@cindex keymap
 To specify what each key of your keyboard does, you need to tell the operating
 system what @dfn{keyboard layout} you want to use.  The default, when nothing
 is specified, is the US English QWERTY layout for 105-key PC keyboards.
@@ -11101,6 +11103,34 @@ a different layout.  The @code{set-xorg-configuration} procedure communicates
 the desired Xorg configuration to the graphical log-in manager, by default
 GDM.
 
+We've discussed how to specify the @emph{default} keyboard layout of your
+system when it starts, but you can also adjust it at run time:
+
+@itemize
+@item
+If you're using GNOME, its settings panel has a ``Region & Language'' entry
+where you can select one or more keyboard layouts.
+
+@item
+Under Xorg, the @command{setxkbmap} command (from the same-named package)
+allows you to change the current layout.  For example, this is how you would
+change the layout to US Dvorak:
+
+@example
+setxkbmap us dvorak
+@end example
+
+@item
+The @code{loadkeys} command changes the keyboard layout in effect in the Linux
+console.  However, note that @code{loadkeys} does @emph{not} use the XKB
+keyboard layout categorization described above.  The command below loads the
+French bépo layout:
+
+@example
+loadkeys fr-bepo
+@end example
+@end itemize
+
 @node Locales
 @section Locales
 
-- 
2.21.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [bug#35120] [PATCH 3/3] services: console-keymap: Deprecate.
  2019-04-03 12:39 ` [bug#35120] [PATCH 1/3] services: xorg: Add 'set-xorg-configuration' Ludovic Courtès
  2019-04-03 12:39   ` [bug#35120] [PATCH 2/3] doc: Explain how to change the keyboard layout at run time Ludovic Courtès
@ 2019-04-03 12:39   ` Ludovic Courtès
  1 sibling, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2019-04-03 12:39 UTC (permalink / raw)
  To: 35120

* gnu/services/base.scm (console-keymap-service): Mark as deprecated.
* doc/guix.texi (Base Services): Remove its documentation.
---
 doc/guix.texi         | 23 -----------------------
 gnu/services/base.scm |  3 ++-
 2 files changed, 2 insertions(+), 24 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 1b0bd1de58..1c82579afc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12023,29 +12023,6 @@ This is the name of the file where some random bytes are saved by
 It defaults to @file{/var/lib/random-seed}.
 @end defvr
 
-@cindex keymap
-@cindex keyboard
-@deffn {Scheme Procedure} console-keymap-service @var{files} ...
-@cindex keyboard layout
-Return a service to load console keymaps from @var{files} using
-@command{loadkeys} command.  Most likely, you want to load some default
-keymap, which can be done like this:
-
-@example
-(console-keymap-service "dvorak")
-@end example
-
-Or, for example, for a Swedish keyboard, you may need to combine
-the following keymaps:
-@example
-(console-keymap-service "se-lat6" "se-fi-lat6")
-@end example
-
-Also you can specify a full file name (or file names) of your keymap(s).
-See @code{man loadkeys} for details.
-
-@end deffn
-
 @cindex mouse
 @cindex gpm
 @defvr {Scheme Variable} gpm-service-type
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 04b123b833..bf8510a71d 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -719,7 +719,8 @@ to add @var{device} to the kernel's entropy pool.  The service will fail if
                                  #$@files))))
       (respawn? #f)))))
 
-(define (console-keymap-service . files)
+(define-deprecated (console-keymap-service #:rest files)
+  #f
   "Return a service to load console keymaps from @var{files}."
   (service console-keymap-service-type files))
 
-- 
2.21.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* bug#35120: [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc
  2019-04-03 12:36 [bug#35120] [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc Ludovic Courtès
  2019-04-03 12:39 ` [bug#35120] [PATCH 1/3] services: xorg: Add 'set-xorg-configuration' Ludovic Courtès
@ 2019-04-05 13:48 ` Ludovic Courtès
  1 sibling, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2019-04-05 13:48 UTC (permalink / raw)
  To: 35120-done

Ludovic Courtès <ludo@gnu.org> skribis:

>   services: xorg: Add 'set-xorg-configuration'.
>   doc: Explain how to change the keyboard layout at run time.
>   services: console-keymap: Deprecate.

Pushed!

As Julien noted on IRC, ‘set-xorg-configuration’ only works for
‘gdm-service-type’ right now.  It’d be great to do the same for SLiM and
co.  Help welcome.  :-)

Ludo’.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2019-04-05 13:57 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-04-03 12:36 [bug#35120] [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc Ludovic Courtès
2019-04-03 12:39 ` [bug#35120] [PATCH 1/3] services: xorg: Add 'set-xorg-configuration' Ludovic Courtès
2019-04-03 12:39   ` [bug#35120] [PATCH 2/3] doc: Explain how to change the keyboard layout at run time Ludovic Courtès
2019-04-03 12:39   ` [bug#35120] [PATCH 3/3] services: console-keymap: Deprecate Ludovic Courtès
2019-04-05 13:48 ` bug#35120: [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc Ludovic Courtès

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).