mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-24 05:18:07 -05:00
bootloader: Add a 'keyboard-layout' field.
* gnu/bootloader/grub.scm (keyboard-layout-file): New procedure. (grub-configuration-file)[keyboard-layout-file]: New variable. [builder]: Use it. * gnu/bootloader.scm (<bootloader-configuration>)[keyboard-layout]: New field. * doc/guix.texi (Bootloader Configuration): Document it. Co-authored-by: nee <nee-git@hidamari.blue>
This commit is contained in:
parent
db1e2522f6
commit
8d058e7b1b
3 changed files with 66 additions and 0 deletions
|
@ -23654,6 +23654,34 @@ current system.
|
||||||
The number of seconds to wait for keyboard input before booting. Set to
|
The number of seconds to wait for keyboard input before booting. Set to
|
||||||
0 to boot immediately, and to -1 to wait indefinitely.
|
0 to boot immediately, and to -1 to wait indefinitely.
|
||||||
|
|
||||||
|
@cindex keyboard layout, for the bootloader
|
||||||
|
@item @code{keyboard-layout} (default: @code{#f})
|
||||||
|
If this is @code{#f}, the bootloader's menu (if any) uses the default keyboard
|
||||||
|
layout, usually US@tie{}English (``qwerty'').
|
||||||
|
|
||||||
|
Otherwise, this must be a @code{keyboard-layout} object. For instance, the
|
||||||
|
following example defines a standard German keyboard layout:
|
||||||
|
|
||||||
|
@example
|
||||||
|
(keyboard-layout "de")
|
||||||
|
@end example
|
||||||
|
|
||||||
|
@noindent
|
||||||
|
while the example below designates the bépo layout for French:
|
||||||
|
|
||||||
|
@example
|
||||||
|
(keyboard-layout "fr" "bepo")
|
||||||
|
@end example
|
||||||
|
|
||||||
|
The layout name and variant must match an existing layout in the
|
||||||
|
@code{xkeyboard-config} package under the @file{share/X11/xkb/symbols}
|
||||||
|
directory.
|
||||||
|
|
||||||
|
@quotation Note
|
||||||
|
This option is currently ignored by bootloaders other than @code{grub} and
|
||||||
|
@code{grub-efi}.
|
||||||
|
@end quotation
|
||||||
|
|
||||||
@item @code{theme} (default: @var{#f})
|
@item @code{theme} (default: @var{#f})
|
||||||
The bootloader theme object describing the theme to use. If no theme
|
The bootloader theme object describing the theme to use. If no theme
|
||||||
is provided, some bootloaders might use a default theme, that's true
|
is provided, some bootloaders might use a default theme, that's true
|
||||||
|
|
|
@ -47,6 +47,7 @@ (define-module (gnu bootloader)
|
||||||
bootloader-configuration-menu-entries
|
bootloader-configuration-menu-entries
|
||||||
bootloader-configuration-default-entry
|
bootloader-configuration-default-entry
|
||||||
bootloader-configuration-timeout
|
bootloader-configuration-timeout
|
||||||
|
bootloader-configuration-keyboard-layout
|
||||||
bootloader-configuration-theme
|
bootloader-configuration-theme
|
||||||
bootloader-configuration-terminal-outputs
|
bootloader-configuration-terminal-outputs
|
||||||
bootloader-configuration-terminal-inputs
|
bootloader-configuration-terminal-inputs
|
||||||
|
@ -113,6 +114,8 @@ (define-record-type* <bootloader-configuration>
|
||||||
(default 0))
|
(default 0))
|
||||||
(timeout bootloader-configuration-timeout ;seconds as integer
|
(timeout bootloader-configuration-timeout ;seconds as integer
|
||||||
(default 5))
|
(default 5))
|
||||||
|
(keyboard-layout bootloader-configuration-keyboard-layout ;<keyboard-layout> | #f
|
||||||
|
(default #f))
|
||||||
(theme bootloader-configuration-theme ;bootloader-specific theme
|
(theme bootloader-configuration-theme ;bootloader-specific theme
|
||||||
(default #f))
|
(default #f))
|
||||||
(terminal-outputs bootloader-configuration-terminal-outputs ;list of symbols
|
(terminal-outputs bootloader-configuration-terminal-outputs ;list of symbols
|
||||||
|
|
|
@ -27,8 +27,10 @@ (define-module (gnu bootloader grub)
|
||||||
#:use-module (gnu bootloader)
|
#:use-module (gnu bootloader)
|
||||||
#:use-module (gnu system uuid)
|
#:use-module (gnu system uuid)
|
||||||
#:use-module (gnu system file-systems)
|
#:use-module (gnu system file-systems)
|
||||||
|
#:use-module (gnu system keyboard)
|
||||||
#:autoload (gnu packages bootloaders) (grub)
|
#:autoload (gnu packages bootloaders) (grub)
|
||||||
#:autoload (gnu packages gtk) (guile-cairo guile-rsvg)
|
#:autoload (gnu packages gtk) (guile-cairo guile-rsvg)
|
||||||
|
#:autoload (gnu packages xorg) (xkeyboard-config)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 regex)
|
#:use-module (ice-9 regex)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
|
@ -219,6 +221,26 @@ (define image
|
||||||
;;; Configuration file.
|
;;; Configuration file.
|
||||||
;;;
|
;;;
|
||||||
|
|
||||||
|
(define* (keyboard-layout-file layout
|
||||||
|
#:key
|
||||||
|
(grub grub))
|
||||||
|
"Process the X keyboard layout description LAYOUT, a <keyboard-layout> record,
|
||||||
|
and return a file in the format for GRUB keymaps. LAYOUT must be present in
|
||||||
|
the 'share/X11/xkb/symbols/' directory of 'xkeyboard-config'."
|
||||||
|
(define builder
|
||||||
|
(with-imported-modules '((guix build utils))
|
||||||
|
#~(begin
|
||||||
|
(use-modules (guix build utils))
|
||||||
|
|
||||||
|
;; 'grub-kbdcomp' passes all its arguments but '-o' to 'ckbcomp'
|
||||||
|
;; (from the 'console-setup' package).
|
||||||
|
(invoke #$(file-append grub "/bin/grub-mklayout")
|
||||||
|
"-i" #+(keyboard-layout->console-keymap layout)
|
||||||
|
"-o" #$output))))
|
||||||
|
|
||||||
|
(computed-file (string-append "grub-keymap." (keyboard-layout-name layout))
|
||||||
|
builder))
|
||||||
|
|
||||||
(define (grub-setup-io config)
|
(define (grub-setup-io config)
|
||||||
"Return GRUB commands to configure the input / output interfaces. The result
|
"Return GRUB commands to configure the input / output interfaces. The result
|
||||||
is a string that can be inserted in grub.cfg."
|
is a string that can be inserted in grub.cfg."
|
||||||
|
@ -330,6 +352,18 @@ (define sugar
|
||||||
#:system system
|
#:system system
|
||||||
#:port #~port))
|
#:port #~port))
|
||||||
|
|
||||||
|
(define keyboard-layout-config
|
||||||
|
(let ((layout (bootloader-configuration-keyboard-layout config))
|
||||||
|
(grub (bootloader-package
|
||||||
|
(bootloader-configuration-bootloader config))))
|
||||||
|
#~(let ((keymap #$(and layout
|
||||||
|
(keyboard-layout-file layout #:grub grub))))
|
||||||
|
(when keymap
|
||||||
|
(format port "\
|
||||||
|
terminal_input at_keyboard
|
||||||
|
insmod keylayouts
|
||||||
|
keymap ~a~%" keymap)))))
|
||||||
|
|
||||||
(define builder
|
(define builder
|
||||||
#~(call-with-output-file #$output
|
#~(call-with-output-file #$output
|
||||||
(lambda (port)
|
(lambda (port)
|
||||||
|
@ -338,6 +372,7 @@ (define builder
|
||||||
# will be lost upon reconfiguration.
|
# will be lost upon reconfiguration.
|
||||||
")
|
")
|
||||||
#$sugar
|
#$sugar
|
||||||
|
#$keyboard-layout-config
|
||||||
(format port "
|
(format port "
|
||||||
set default=~a
|
set default=~a
|
||||||
set timeout=~a~%"
|
set timeout=~a~%"
|
||||||
|
|
Loading…
Reference in a new issue