diff options
Diffstat (limited to 'nixos/modules/services/x11/xserver.nix')
-rw-r--r-- | nixos/modules/services/x11/xserver.nix | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix index 8438e6dcc702..262115b39e79 100644 --- a/nixos/modules/services/x11/xserver.nix +++ b/nixos/modules/services/x11/xserver.nix @@ -258,7 +258,7 @@ in type = types.str; default = "us"; description = '' - Keyboard layout. + Keyboard layout, or multiple keyboard layouts separated by commas. ''; }; @@ -578,6 +578,35 @@ in services.xserver.xkbDir = mkDefault "${pkgs.xkeyboard_config}/etc/X11/xkb"; + system.extraDependencies = [ + (pkgs.runCommand "xkb-layouts-exist" { + layouts=cfg.layout; + } '' + missing=() + while read -d , layout + do + [[ -f "${cfg.xkbDir}/symbols/$layout" ]] || missing+=($layout) + done <<< "$layouts," + if [[ ''${#missing[@]} -eq 0 ]] + then + touch $out + exit 0 + fi + + cat >&2 <<EOF + + Some of the selected keyboard layouts do not exist: + + ''${missing[@]} + + Set services.xserver.layout to the name of an existing keyboard + layout (check ${cfg.xkbDir}/symbols for options). + + EOF + exit -1 + '') + ]; + services.xserver.config = '' Section "ServerFlags" |