about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--modules/workstation/hardware/default.nix13
-rw-r--r--modules/workstation/hardware/events.dyon12
-rw-r--r--modules/workstation/windowing/default.nix4
-rw-r--r--sys/x220.nix2
4 files changed, 27 insertions, 4 deletions
diff --git a/modules/workstation/hardware/default.nix b/modules/workstation/hardware/default.nix
index a81508c7ed3b..bd5bd9ce12e8 100644
--- a/modules/workstation/hardware/default.nix
+++ b/modules/workstation/hardware/default.nix
@@ -1,6 +1,17 @@
-{ ... }:
+{ pkgs, config, ... }:
 
+let
+  xcfg = config.services.xserver;
+
+in
 {
   i18n.consoleUseXkbConfig = true;
   services.xserver.layout = "dvorak";
+  services.xserver.xkbOptions = "ctrl:nocaps";
+
+  environment.variables.XKB_DEFAULT_LAYOUT = xcfg.layout;
+  environment.variables.XKB_DEFAULT_OPTIONS = xcfg.xkbOptions;
+
+  services.evscript.enable = true;
+  services.evscript.script = ./events.dyon;
 }
diff --git a/modules/workstation/hardware/events.dyon b/modules/workstation/hardware/events.dyon
new file mode 100644
index 000000000000..2d8c8bfa87df
--- /dev/null
+++ b/modules/workstation/hardware/events.dyon
@@ -0,0 +1,12 @@
+//! [events]
+//! keys = ['ESC']
+fn main() ~ evdevs, uinput {
+    should_esc := false
+    loop {
+        evts := next_events(evdevs)
+        for i {
+            evt := evts[i]
+            xcape(mut should_esc, evt, KEY_CAPSLOCK(), [KEY_ESC()])
+        }
+    }
+}
diff --git a/modules/workstation/windowing/default.nix b/modules/workstation/windowing/default.nix
index 0ee51bf20e3c..abe794ce2622 100644
--- a/modules/workstation/windowing/default.nix
+++ b/modules/workstation/windowing/default.nix
@@ -1,7 +1,5 @@
-{ pkgs, ... }:
+{ ... }:
 
 {
   imports = [ ./alacritty ./firefox ./sway ];
-
-  environment.variables.XKB_DEFAULT_LAYOUT = "dvorak";
 }
diff --git a/sys/x220.nix b/sys/x220.nix
index d525ae368087..b8b973152f0a 100644
--- a/sys/x220.nix
+++ b/sys/x220.nix
@@ -47,4 +47,6 @@
 
   hardware.opengl.enable = true;
   hardware.opengl.extraPackages = with pkgs; [ libGL ];
+
+  services.evscript.devices = [ "/dev/input/by-path/platform-i8042-serio-0-event-kbd" ];
 }