nixpkgs/pkgs/tools/X11
aszlig 6e5d2f8963
nixos/xserver: Properly validate XKB options
Checking the keyboard layout has been a long set of hurdles so far, with
several attempts. Originally, the checking was introduced by @lheckemann
in .

The initial implementation just was trying to check whether the symbols/
directory contained the layout name.

Unfortunately, that wasn't enough and keyboard variants weren't
recognized, so if you set layout to eg. "dvorak" it will fail with an
error ().

So my improvement on that was to use sed to filter rules/base.lst and
match the layout against that. I fucked up twice with this, first
because layout can be a comma-separated list which I didn't account for
and second because I ran into a Nix issue ().

After fixing this, it still wasn't enough (and this is btw. what
localectl also does), because we were *only* matching rules but not
symbols, so using "eu" as a layout won't work either.

I decided now it's the time to actually use libxkbcommon to try
compiling the keyboard options and see whether it succeeds. This comes
in the form of a helper tool called xkbvalidate.

IMHO this approach is a lot less error-prone and we can be sure that we
don't forget about anything because that's what the X server itself uses
to compile the keymap.

Another advantage of this is that we now validate the full set of XKB
options rather than just the layout.

Tested this against a variety of wrong and correct keyboard
configurations and against the "keymap" NixOS VM tests.

Signed-off-by: aszlig <aszlig@redmoonstudios.org>
Cc: @lheckemann, @peti, @7c6f434c, @tohl, @vcunat, @lluchs
Fixes: 
2017-07-28 12:39:55 +02:00
..
arandr arandr: use python2 2016-11-24 22:28:02 +01:00
autocutsel
bgs
bumblebee linuxPackages.nvidia_x11: refactor, build more from source 2017-02-08 16:57:46 +03:00
ckbcomp
dex
dispad
dragon-drop treewide: Add lots of meta.platforms 2016-08-02 21:42:43 +03:00
ffcast ffcast: remove unnecessary DESTDIR=$out 2017-03-03 12:58:43 +01:00
go-sct buildGoPackage: deps.json -> deps.nix in NIXON 2016-09-16 00:04:55 +01:00
hsetroot
keynav
ksuperkey
nitrogen nitrogen: 1.6.0 -> 1.6.1 2017-02-20 21:44:56 -05:00
numlockx
obconf obconf: add libSM to fix build 2017-02-26 20:11:25 +01:00
oblogout oblogout: init at 2009-11-18 2016-10-23 11:45:30 +02:00
primus primus: fix if nvidia is not used 2017-03-08 23:10:43 +03:00
ratmen
runningx runningx: fix darwin build 2016-08-16 19:25:45 +00:00
screen-message screen-message: 0.24 -> 0.25 2017-06-20 03:45:39 +02:00
sct sct: Updated sha256 in default.nix () 2016-07-28 09:21:21 +02:00
setroot setroot: 1.4.4 -> 2.0.1 2017-07-24 05:38:06 +10:00
skippy-xd
sselp
vdpauinfo
virtualgl virtualglLib: 2.5.1 -> 2.5.2 2017-07-27 17:07:45 +03:00
wayv wayv: install docs 2017-03-18 12:41:09 +01:00
winswitch Do not use top-level buildPythonPackage or buildPythonApplication 2016-09-26 11:10:51 +02:00
wmctrl
wmutils-core
wmutils-opt wmutils-opt: init at v1.0 2017-01-30 20:42:16 +00:00
x2vnc x2vnc: disable format hardening 2016-08-05 18:09:35 +00:00
x2x x2x: disable format hardening 2016-08-04 11:05:29 +02:00
x11vnc Getting rid of the var indirection and using a bin path instead 2017-01-29 04:11:01 -06:00
xannotate xannotate: init at 20150301 2017-03-18 12:41:09 +01:00
xautomation xautomation: init at 1.09 2017-07-12 14:13:10 +08:00
xbanish
xbindkeys guile rev-deps: fix build by adding pkgconfig 2017-02-18 08:23:07 +01:00
xbindkeys-config
xbrightness treewide: Add lots of meta.platforms 2016-08-02 21:42:43 +03:00
xcalib
xcape xcape: git-2015-03-01 -> 1.2 2016-11-23 07:30:00 -02:00
xchainkeys xchainkeys: fix source and homepage url 2017-01-26 03:52:50 +01:00
xcwd xcwd: init at 2016-09-30 2017-07-13 13:56:22 +01:00
xdg-user-dirs
xdg-utils fix 2017-06-05 23:37:53 +00:00
xdotool xdotool: 3.20150503.1 -> 3.20160805.1 2016-11-08 05:24:06 +08:00
xgeometry-select
xinput_calibrator treewide: Add lots of meta.platforms 2016-08-02 21:42:43 +03:00
xkb-switch
xkbset xkbset: init at 0.5 2017-04-02 02:17:30 +03:00
xkbvalidate nixos/xserver: Properly validate XKB options 2017-07-28 12:39:55 +02:00
xmacro treewide: Add lots of platforms to packages with no meta 2016-08-02 21:17:44 +03:00
xmagnify xmagnify: init at 0.1.0 () () 2016-07-25 06:00:27 +02:00
xnee treewide: explicitly specify gtk and related package versions 2016-09-12 18:26:06 +03:00
xpra xpra: fix missed ffmpeg_3_2 reference 2017-04-30 16:58:33 -07:00
xprintidle-ng
xrectsel xrectsel: remove unnecessary DESTDIR=$out 2017-03-03 12:59:54 +01:00
xrestop treewide: Add lots of platforms to packages with no meta 2016-08-02 21:17:44 +03:00
xsettingsd
xtrace
xvkbd xvkbd: 3.7 -> 3.8 2017-07-11 22:44:44 +02:00
xwinmosaic