summaryrefslogtreecommitdiffstats
path: root/nixos/modules/hardware/keyboard/zsa.nix
blob: 5cb09e5af499f68ea9e1b90ff9ab61108b9d7f10 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{ config, lib, pkgs, ... }:

let
  inherit (lib) mkOption mkIf types;
  cfg = config.hardware.keyboard.zsa;
in
{
  # TODO: make group configurable like in https://github.com/NixOS/nixpkgs/blob/0b2b4b8c4e729535a61db56468809c5c2d3d175c/pkgs/tools/security/nitrokey-app/udev-rules.nix ?
  options.hardware.keyboard.zsa = {
    enable = mkOption {
      type = types.bool;
      default = false;
      description = ''
        Enables udev rules for keyboards from ZSA like the ErgoDox EZ, Planck EZ and Moonlander Mark I.
        You need it when you want to flash a new configuration on the keyboard
        or use their live training in the browser.
        Access to the keyboard is granted to users in the "plugdev" group.
        You may want to install the wally-cli package.
      '';
    };
  };

  config = mkIf cfg.enable {
    services.udev.packages = [ pkgs.zsa-udev-rules ];
    users.groups.plugdev = {};
  };
}