nixos/zsa: init at unstable-2020-12-16

add support for ZSA keyboards

Co-authored-by: Julien Debon <julien.debon@pm.me>

davidak 0d0ff21f 0e01df64

Changed files
+62
nixos
modules
hardware
keyboard
pkgs
os-specific
linux
zsa-udev-rules
top-level
+27
nixos/modules/hardware/keyboard/zsa.nix
···
+
{ 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 = {};
+
};
+
}
+1
nixos/modules/module-list.nix
···
./hardware/digitalbitbox.nix
./hardware/device-tree.nix
./hardware/sensor/iio.nix
+
./hardware/keyboard/zsa.nix
./hardware/ksm.nix
./hardware/ledger.nix
./hardware/logitech.nix
+33
pkgs/os-specific/linux/zsa-udev-rules/default.nix
···
+
{ stdenv, fetchFromGitHub }:
+
+
stdenv.mkDerivation {
+
pname = "zsa-udev-rules";
+
version = "unstable-2020-12-16";
+
+
# TODO: use version and source from nixpkgs/pkgs/development/tools/wally-cli/default.nix after next release
+
src = fetchFromGitHub {
+
owner = "zsa";
+
repo = "wally";
+
rev = "e5dde3c700beab39fb941c6941e55535bf9b2af6";
+
sha256 = "0pkybi32r1hrmpa1mc8qlzhv7xy5n5rr5ah25lbr0cipp1bda417";
+
};
+
+
# it only installs files
+
dontConfigure = true;
+
dontBuild = true;
+
dontFixup = true;
+
+
installPhase = ''
+
mkdir -p $out/lib/udev/rules.d
+
cp dist/linux64/50-oryx.rules $out/lib/udev/rules.d/
+
cp dist/linux64/50-wally.rules $out/lib/udev/rules.d/
+
'';
+
+
meta = with stdenv.lib; {
+
description = "udev rules for ZSA devices";
+
license = licenses.mit;
+
maintainers = with maintainers; [ davidak ];
+
platforms = platforms.linux;
+
homepage = "https://github.com/zsa/wally/wiki/Linux-install#2-create-a-udev-rule-file";
+
};
+
}
+1
pkgs/top-level/all-packages.nix
···
waffle = callPackage ../development/libraries/waffle { };
wally-cli = callPackage ../development/tools/wally-cli { };
+
zsa-udev-rules = callPackage ../os-specific/linux/zsa-udev-rules { };
wavpack = callPackage ../development/libraries/wavpack { };