]> git.wincent.com - wincent.git/commitdiff
feat(interception): set up udev rules
authorGreg Hurrell <greg@hurrell.net>
Tue, 1 Jun 2021 20:55:56 +0000 (22:55 +0200)
committerGreg Hurrell <greg@hurrell.net>
Tue, 1 Jun 2021 20:55:56 +0000 (22:55 +0200)
As noted in the comment, having this in here is a bit of an abuse, but
the alternatives suck in different ways too:

- Putting it in the "dotfiles" aspect: now we would need `sudo` to
  install dotfiles, and `udev` has nothing to do with dotfiles, really.
- Making a separate "udev" aspect: lots of overhead for a little thing;
  also, it relies on scripts installed in our home directory... maybe we
  should think about installing elsewhere, but still, pretending that
  this will ever be used by more than just `glh` is a joke.

So, here it goes. Note that I had to adjust the TS config because `tsc`
was choking on ".ts" (timestamp) files

    aspects/interception/support/CMakeFiles/mac2linux.dir/compiler_depend.ts:1:1 - error TS18016: Private identifiers are not allowed outside class bodies.

    1 # CMAKE generated file: DO NOT EDIT!

    (etc)

aspects/interception/index.ts
aspects/interception/templates/50-realforce-layout.rules.erb [new file with mode: 0644]
tsconfig.json

index 4141f58a9333e6435cce142a35dd92a26cbcbca8..4ea423f68975793764e5b5d6d0e23ef95b5a5dda 100644 (file)
@@ -62,8 +62,27 @@ task('create /etc/interception/udevmon.yaml', async () => {
   });
 });
 
+// This being in here is semi-sketchy because it isn't strictly related to
+// Interception Tools, but it _is_ related to the keyboard and udev, so we
+// put it here. Depends on scripts installed by the dotfiles aspect, so the
+// separation of concerns is unclear.
+task('create /etc/udev/rules.d/50-realforce-layout.rules', async () => {
+  await template({
+    notify: 'reload udevadm',
+    path: '/etc/udev/rules.d/50-realforce-layout.rules',
+    src: resource.template('50-realforce-layout.rules.erb'),
+    sudo: true,
+  });
+});
+
 handler('enable udevmon', async () => {
   await command('systemctl', ['enable', 'udevmon', '--now'], {
     sudo: true,
   });
 });
+
+handler('reload udevadm', async () => {
+  await command('udevadm', ['control', '--reload'], {
+    sudo: true,
+  });
+});
diff --git a/aspects/interception/templates/50-realforce-layout.rules.erb b/aspects/interception/templates/50-realforce-layout.rules.erb
new file mode 100644 (file)
index 0000000..867c5af
--- /dev/null
@@ -0,0 +1,3 @@
+# <%= variables.figManaged %>
+
+SUBSYSTEM=="usb", ACTION=="add", ATTRS{idProduct}=="0111", ATTRS{idVendor}=="0853" RUN+="/usr/bin/su <%= variables.username %> -c <%= variables.home %>/.zsh/bin/asdf-wrapper"
index 1a0384c8e0ad38150e67d61cfc0d7c326beb30f6..11e7f9821eddd68fd351bb9eb0e5ec5cfe5f8314 100644 (file)
@@ -16,5 +16,6 @@
     "strict": true,
     "target": "ES2019"
   },
+  "exclude": ["aspects/interception/support/CMakeFiles/**", "node_modules"],
   "include": ["aspects/**/*.ts", "fig/**/*.ts", "variables.ts"]
 }