summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/system/activation-scripts.nix1
-rw-r--r--modules/system/keyboard.nix54
2 files changed, 55 insertions, 0 deletions
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
+ '';
+
+ };
+}