From 586aa7f20799d6e1bb21d43648cf7a687c8c9722 Mon Sep 17 00:00:00 2001
From: Oliver Davies <oliver@oliverdavies.dev>
Date: Thu, 31 Oct 2024 18:01:23 +0000
Subject: [PATCH] Try `kanata` for configuring my laptop keyboard

---
 modules/nixos/default.nix |  7 ++++++-
 modules/nixos/kanata.nix  | 42 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 1 deletion(-)
 create mode 100644 modules/nixos/kanata.nix

diff --git a/modules/nixos/default.nix b/modules/nixos/default.nix
index b982d108..d21b3cb1 100644
--- a/modules/nixos/default.nix
+++ b/modules/nixos/default.nix
@@ -1 +1,6 @@
-{ imports = [ ./docker.nix ]; }
+{
+  imports = [
+    ./docker.nix
+    ./kanata.nix
+  ];
+}
diff --git a/modules/nixos/kanata.nix b/modules/nixos/kanata.nix
new file mode 100644
index 00000000..763bcd5d
--- /dev/null
+++ b/modules/nixos/kanata.nix
@@ -0,0 +1,42 @@
+{
+  services.kanata = {
+    enable = true;
+
+    keyboards = {
+      internalKeyboard = {
+        devices = [
+          "/dev/input/event18" # lemp11
+        ];
+
+        extraDefCfg = "process-unmapped-keys yes";
+
+        config = ''
+          (defsrc
+            caps a s d f j k l ;
+          )
+
+          (defvar
+            tap-time 150
+            hold-time 200
+          )
+
+          (defalias
+            escctrl (tap-hold 100 100 esc lctl)
+            a (tap-hold $tap-time $hold-time a lmet)
+            s (tap-hold $tap-time $hold-time s lalt)
+            d (tap-hold $tap-time $hold-time d lsft)
+            f (tap-hold $tap-time $hold-time f lctl)
+            j (tap-hold $tap-time $hold-time j rctl)
+            k (tap-hold $tap-time $hold-time k rsft)
+            l (tap-hold $tap-time $hold-time l ralt)
+            ; (tap-hold $tap-time $hold-time ; rmet)
+          )
+
+          (deflayer base
+            @escctrl @a @s @d @f @j @k @l @;
+          )
+        '';
+      };
+    };
+  };
+}