summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaiderd Jordan <daiderd@gmail.com>2018-01-08 22:01:44 +0100
committerDaiderd Jordan <daiderd@gmail.com>2018-01-08 22:01:44 +0100
commitedc3be51cef94c0a0fe8ee6ce122be7f4329325d (patch)
tree69f85daa7d9cd09901ce520a2b703721801496b8
parent3bedff357a38f965be91b9a88cbe0a82be4a1b4c (diff)
keyboard: add options for keyboard mappings
Fixes #55
-rw-r--r--default.nix5
-rw-r--r--modules/system/activation-scripts.nix1
-rw-r--r--modules/system/keyboard.nix54
3 files changed, 58 insertions, 2 deletions
diff --git a/default.nix b/default.nix
index 2b42933..d1ef5ce 100644
--- a/default.nix
+++ b/default.nix
@@ -22,15 +22,16 @@ let
./modules/system
./modules/system/activation-checks.nix
./modules/system/activation-scripts.nix
+ ./modules/system/applications.nix
./modules/system/defaults-write.nix
- ./modules/system/defaults/NSGlobalDomain.nix
./modules/system/defaults/LaunchServices.nix
+ ./modules/system/defaults/NSGlobalDomain.nix
./modules/system/defaults/dock.nix
./modules/system/defaults/finder.nix
./modules/system/defaults/smb.nix
./modules/system/defaults/trackpad.nix
- ./modules/system/applications.nix
./modules/system/etc.nix
+ ./modules/system/keyboard.nix
./modules/system/launchd.nix
./modules/system/shells.nix
./modules/system/version.nix
diff --git a/modules/system/activation-scripts.nix b/modules/system/activation-scripts.nix
index dcf4762..43f20c2 100644
--- a/modules/system/activation-scripts.nix
+++ b/modules/system/activation-scripts.nix
@@ -59,6 +59,7 @@ in
${cfg.activationScripts.nix-daemon.text}
${cfg.activationScripts.time.text}
${cfg.activationScripts.networking.text}
+ ${cfg.activationScripts.keyboard.text}
${cfg.activationScripts.extraPostActivation.text}
diff --git a/modules/system/keyboard.nix b/modules/system/keyboard.nix
new file mode 100644
index 0000000..3b16c3b
--- /dev/null
+++ b/modules/system/keyboard.nix
@@ -0,0 +1,54 @@
+{ config, lib, pkgs, ... }:
+
+with lib;
+
+let
+ cfg = config.system.keyboard;
+in
+
+{
+ options = {
+ system.keyboard.enableKeyMapping = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Whether to enable keyboard mappings.";
+ };
+
+ system.keyboard.remapCapsLockToControl = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Whether to remap the Caps Lock key to Control.";
+ };
+
+ system.keyboard.remapCapsLockToEscape = mkOption {
+ type = types.bool;
+ default = false;
+ description = "Whether to remap the Caps Lock key to Escape.";
+ };
+
+ system.keyboard.userKeyMapping = mkOption {
+ internal = true;
+ type = types.listOf (types.attrsOf types.int);
+ default = [];
+ description = ''
+ List of keyboard mappings to apply, for more information see
+ <link xlink:href="https://developer.apple.com/library/content/technotes/tn2450/_index.html"/>.
+ '';
+ };
+ };
+
+ config = {
+
+ system.keyboard.userKeyMapping = mkMerge [
+ (mkIf cfg.remapCapsLockToControl [{ HIDKeyboardModifierMappingSrc = 30064771129; HIDKeyboardModifierMappingDst = 30064771296; }])
+ (mkIf cfg.remapCapsLockToEscape [{ HIDKeyboardModifierMappingSrc = 30064771129; HIDKeyboardModifierMappingDst = 30064771113; }])
+ ];
+
+ system.activationScripts.keyboard.text = optionalString cfg.enableKeyMapping ''
+ # Configuring keyboard
+ echo "configuring keyboard..." >&2
+ hidutil property --set '{"UserKeyMapping":${builtins.toJSON cfg.userKeyMapping}}' > /dev/null
+ '';
+
+ };
+}