summaryrefslogtreecommitdiff
path: root/intcp-mapper.nix
diff options
context:
space:
mode:
authorJulian T <julian@jtle.dk>2022-03-13 18:17:43 +0100
committerJulian T <julian@jtle.dk>2022-03-13 18:17:43 +0100
commit2025ebe1d91525c69b4b7d486da3a5d2f4278617 (patch)
tree0900f26d108f7410c4e536f0a4c865b131f44e7d /intcp-mapper.nix
parent70c847f1a716df9c91c48d625d9f510cd37d5fd9 (diff)
Use interception-tools for mapping keys
Diffstat (limited to 'intcp-mapper.nix')
-rw-r--r--intcp-mapper.nix46
1 files changed, 46 insertions, 0 deletions
diff --git a/intcp-mapper.nix b/intcp-mapper.nix
new file mode 100644
index 0000000..5863f85
--- /dev/null
+++ b/intcp-mapper.nix
@@ -0,0 +1,46 @@
+{ lib, stdenv, writeText, mappings ? [] }:
+
+stdenv.mkDerivation rec {
+ name = "intcp-mapper";
+
+ src = writeText "intcp-mapper.c" ''
+#include <stdio.h>
+#include <stdlib.h>
+#include <linux/input.h>
+
+int main(void) {
+ setbuf(stdin, NULL), setbuf(stdout, NULL);
+
+ struct input_event event;
+ while (fread(&event, sizeof(event), 1, stdin) == 1) {
+ /* Example
+ if (event.type == EV_KEY && event.code == KEY_X) {
+ event.code = KEY_Y;
+ }
+ */
+
+ if (event.type == EV_KEY) {
+ ${ lib.concatStrings (map (m: ''
+ if (event.code == ${m.from}) {
+ event.code = ${m.to};
+ }
+ '') mappings) }
+ }
+
+ fwrite(&event, sizeof(event), 1, stdout);
+ };
+}
+ '';
+
+ dontUnpack = true;
+
+ buildPhase = ''
+ cat $src
+ gcc $src -o mapper
+ '';
+
+ installPhase = ''
+ mkdir -p $out/bin
+ install -m 555 mapper $out/bin/mapper
+ '';
+}