Hello Joshua, Thanks a lot for working on this! I’d really like 1.0 to provide a reasonable way to configure the keyboard layout once and for all.
I suggest we continue the discussion in the context of <https://issues.guix.info/issue/25453>. Joshua Branson <jbra...@dismail.de> skribis: > I believe I have identified conceptually how to do some of these things. > > This project breaks down into four areas > > Getting the layout to work with: > > 1) grub > 2) linux's initrd > 3) console > 4) X/wayland's layout > 5) How to do the above There’s also the question of how to “translate” keyboard layouts among all of these. Debian has a mechanism whereby you specify the layout in a single place, and it then does the right thing for GRUB, Linux, X, and so on. I forgot how it works, but we should aim for something like that. > 1) I was not able to get grub to generate an alternate keyboard layout. > > #+BEGIN_SRC sh :results output :exports both > sudo grub-kbdcomp -o /boot/grub/dvorak.gkb dvorak > #+END_SRC > > #+RESULTS: > : /home/joshua/.guix-profile/bin/grub-kbdcomp: line 76: ckbcomp: command not > found > : ERROR: no valid keyboard layout found. Check the input. > > Do we have ckbcomp installed? How do I install that? I searched on packages.debian.org, and it’s in ‘console-setup’, which happens to be the thing I was mentioning above: :-) https://packages.debian.org/stretch/console-setup It looks like Debian is actually upstream for this package, but it may be usable on non-Debian systems as well. > 2) Linux's initrd We’d probably need to invoke ‘loadkeys’ or similar from the initrd, and to embed only the specific layout files that we need. See (gnu system linux-initrd). > 3) console > This shouldn't be all that hard to do. We just have to add a > console-keymap-service. Yes, #2 and #3 are actually the same thing (and redundant), except that in #2 we have to be careful not to embed too much in the initrd. > 4) X/Wayland's layout shouldn't be all that hard to do too. X is just > a simple xorg-start-command tweak. I'm not certain how to do the same > for wayland yet. OK. > 5) Now, how do I go about doing the above? I thought about modifying > %base-services and %desktop services, but some users won't use those > variables. So I am going to have to do some change at a deeper level. > I believe that I found the reconfigure module in the guix source code, > and I see the variable called "operating-system-user-services". My > intent is to modify this variable, and that should be how a good-old > reconfigure will change your layout. I think we’ll have to use ‘console-setup’. The difficulty is that we want a single ‘keyboard-layout’ field (say) in the OS config that would have an effect on GRUB, the Linux console, Xorg, and Wayland, *if* they are used (setting the keyboard layout shouldn’t require you to use Xorg, for instance.) So I think we cannot use the standard Guix-y static approach where services are instantiated directly with the right configuration. Instead, Xorg & co. may need to look for a config file at a fixed location, say /etc/guix/keyboard-layout.conf, pretty much the same way it’s done on Debian & co. Thoughts? Ludo’.