diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 0948524fc6a4..7065ddde4ea1 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -13989,6 +13989,12 @@ name = "Tomas Krupka"; matrix = "@krupkat:matrix.org"; }; + kruziikrel13 = { + github = "kruziikrel13"; + name = "Michael Petersen"; + email = "dev@michaelpetersen.io"; + githubId = 72793125; + }; krzaczek = { name = "Pawel Krzaczkowski"; email = "pawel@printu.pl"; diff --git a/nixos/modules/hardware/keyboard/qmk.nix b/nixos/modules/hardware/keyboard/qmk.nix index 6690deca3506..b3fb02858b1d 100644 --- a/nixos/modules/hardware/keyboard/qmk.nix +++ b/nixos/modules/hardware/keyboard/qmk.nix @@ -8,15 +8,18 @@ let cfg = config.hardware.keyboard.qmk; inherit (lib) mkEnableOption mkIf; - in { options.hardware.keyboard.qmk = { enable = mkEnableOption "non-root access to the firmware of QMK keyboards"; + keychronSupport = mkEnableOption "udev rules for keychron QMK based keyboards"; }; config = mkIf cfg.enable { - services.udev.packages = [ pkgs.qmk-udev-rules ]; + services.udev.packages = [ + pkgs.qmk-udev-rules + ] + ++ lib.optionals cfg.keychronSupport [ pkgs.keychron-udev-rules ]; users.groups.plugdev = { }; }; } diff --git a/pkgs/by-name/ke/keychron-udev-rules/package.nix b/pkgs/by-name/ke/keychron-udev-rules/package.nix new file mode 100644 index 000000000000..374ef9ff2a57 --- /dev/null +++ b/pkgs/by-name/ke/keychron-udev-rules/package.nix @@ -0,0 +1,37 @@ +{ + lib, + stdenvNoCC, + udevCheckHook, + writeTextFile, +}: +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "keychron-udev-rules"; + version = "23-10-2025"; + + nativeBuildInputs = [ udevCheckHook ]; + + src = writeTextFile { + name = "69-keychron.rules"; + text = '' + KERNEL=="event*", SUBSYSTEM=="input", ENV{ID_VENDOR_ID}=="3434", ENV{ID_INPUT_JOYSTICK}=="*?", ENV{ID_INPUT_JOYSTICK}="" + ''; + }; + + dontConfigure = true; + dontUnpack = true; + dontBuild = true; + dontFixup = true; + + installPhase = '' + runHook preInstall + install -Dm644 $src $out/lib/udev/rules.d/69-keychron.rules + runHook postInstall + ''; + + meta = with lib; { + description = "Keychron Keyboard Udev Rules, fixes issues with keyboard detection on Linux"; + license = licenses.mit; + platforms = platforms.linux; + maintainers = with maintainers; [ kruziikrel13 ]; + }; +})