summary refs log tree commit diff
path: root/nixos/modules/services/x11/xserver.nix
diff options
context:
space:
mode:
authorLinus Heckemann <git@sphalerite.org>2017-03-23 20:06:52 +0000
committerLinus Heckemann <git@sphalerite.org>2017-03-23 21:02:38 +0000
commitc5c0459a60c1e64afc66c3b76434b88961d67abb (patch)
tree95104367e463730888639f8903119d70b54f1e5d /nixos/modules/services/x11/xserver.nix
parentc2b9b8031f302d936ed798c716eecd01ae270f8b (diff)
downloadnixpkgs-c5c0459a60c1e64afc66c3b76434b88961d67abb.tar
nixpkgs-c5c0459a60c1e64afc66c3b76434b88961d67abb.tar.gz
nixpkgs-c5c0459a60c1e64afc66c3b76434b88961d67abb.tar.bz2
nixpkgs-c5c0459a60c1e64afc66c3b76434b88961d67abb.tar.lz
nixpkgs-c5c0459a60c1e64afc66c3b76434b88961d67abb.tar.xz
nixpkgs-c5c0459a60c1e64afc66c3b76434b88961d67abb.tar.zst
nixpkgs-c5c0459a60c1e64afc66c3b76434b88961d67abb.zip
xserver: check that selected layout exists
Fixes #5638
Diffstat (limited to 'nixos/modules/services/x11/xserver.nix')
-rw-r--r--nixos/modules/services/x11/xserver.nix29
1 files changed, 29 insertions, 0 deletions
diff --git a/nixos/modules/services/x11/xserver.nix b/nixos/modules/services/x11/xserver.nix
index 8438e6dcc70..2e2d567a060 100644
--- a/nixos/modules/services/x11/xserver.nix
+++ b/nixos/modules/services/x11/xserver.nix
@@ -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"