summary refs log tree commit diff
path: root/nixos/modules/hardware/i2c.nix
diff options
context:
space:
mode:
authorrnhmjoj <rnhmjoj@inventati.org>2021-02-05 08:52:51 +0100
committerrnhmjoj <rnhmjoj@inventati.org>2021-02-06 15:08:13 +0100
commitafde0286728e1933ead350d7aabc72668db0194c (patch)
tree94c5fc0a2048056297fd481b2bf6ae4fa3cb6273 /nixos/modules/hardware/i2c.nix
parent64c12484642a76783c7c5b5e033b1ac76944697d (diff)
downloadnixpkgs-afde0286728e1933ead350d7aabc72668db0194c.tar
nixpkgs-afde0286728e1933ead350d7aabc72668db0194c.tar.gz
nixpkgs-afde0286728e1933ead350d7aabc72668db0194c.tar.bz2
nixpkgs-afde0286728e1933ead350d7aabc72668db0194c.tar.lz
nixpkgs-afde0286728e1933ead350d7aabc72668db0194c.tar.xz
nixpkgs-afde0286728e1933ead350d7aabc72668db0194c.tar.zst
nixpkgs-afde0286728e1933ead350d7aabc72668db0194c.zip
nixos/i2c: add module to set up i2c permissions
This is a very simple module that installs a single udev rule.
The rule set the ownership of all /dev/i2c-* devices to a
group, "i2c" by default but can be changed. The "uaccess" tag
also makes systemd add an ACL for users with a seat[1].

Fix issue #91771

[1]: https://enotty.pipebreaker.pl/2012/05/23/linux-automatic-user-acl-management/
Diffstat (limited to 'nixos/modules/hardware/i2c.nix')
-rw-r--r--nixos/modules/hardware/i2c.nix43
1 files changed, 43 insertions, 0 deletions
diff --git a/nixos/modules/hardware/i2c.nix b/nixos/modules/hardware/i2c.nix
new file mode 100644
index 00000000000..ff14b4b1c89
--- /dev/null
+++ b/nixos/modules/hardware/i2c.nix
@@ -0,0 +1,43 @@
+{ config, lib, ... }:
+
+with lib;
+
+let
+  cfg = config.hardware.i2c;
+in
+
+{
+  options.hardware.i2c = {
+    enable = mkEnableOption ''
+      i2c devices support. By default access is granted to users in the "i2c"
+      group (will be created if non-existent) and any user with a seat, meaning
+      logged on the computer locally.
+    '';
+
+    group = mkOption {
+      type = types.str;
+      default = "i2c";
+      description = ''
+        Grant access to i2c devices (/dev/i2c-*) to users in this group.
+      '';
+    };
+  };
+
+  config = mkIf cfg.enable {
+
+    boot.kernelModules = [ "i2c-dev" ];
+
+    users.groups = mkIf (cfg.group == "i2c") {
+      i2c = { };
+    };
+
+    services.udev.extraRules = ''
+      # allow group ${cfg.group} and users with a seat use of i2c devices
+      ACTION=="add", KERNEL=="i2c-[0-9]*", TAG+="uaccess", GROUP="${cfg.group}", MODE="660"
+    '';
+
+  };
+
+  meta.maintainers = [ maintainers.rnhmjoj ];
+
+}