Samuel Shuert | 24c0b33 | 2024-06-30 17:24:10 -0400 | [diff] [blame] | 1 | { config, lib, pkgs, ... }: { |
| 2 | options.chimera.framework-16.enable = lib.mkEnableOption "Enable fixes for Framework 16 laptops."; |
| 3 | |
| 4 | config = lib.mkIf config.chimera.framework-16.enable (let |
| 5 | frameworkKeyboardRule = pkgs.writeTextFile { |
| 6 | name = "50-qmk.rules"; |
| 7 | text = '' |
| 8 | # Atmel DFU |
| 9 | ### ATmega16U2 |
| 10 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2fef", TAG+="uaccess" |
| 11 | ### ATmega32U2 |
| 12 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", TAG+="uaccess" |
| 13 | ### ATmega16U4 |
| 14 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff3", TAG+="uaccess" |
| 15 | ### ATmega32U4 |
| 16 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", TAG+="uaccess" |
| 17 | ### AT90USB64 |
| 18 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff9", TAG+="uaccess" |
| 19 | ### AT90USB162 |
| 20 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffa", TAG+="uaccess" |
| 21 | ### AT90USB128 |
| 22 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", TAG+="uaccess" |
| 23 | |
| 24 | # Input Club |
| 25 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", ATTRS{idProduct}=="b007", TAG+="uaccess" |
| 26 | |
| 27 | # STM32duino |
| 28 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", TAG+="uaccess" |
| 29 | # STM32 DFU |
| 30 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", TAG+="uaccess" |
| 31 | |
| 32 | # BootloadHID |
| 33 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", TAG+="uaccess" |
| 34 | |
| 35 | # USBAspLoader |
| 36 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", TAG+="uaccess" |
| 37 | |
| 38 | # USBtinyISP |
| 39 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1782", ATTRS{idProduct}=="0c9f", TAG+="uaccess" |
| 40 | |
| 41 | # ModemManager should ignore the following devices |
| 42 | # Atmel SAM-BA (Massdrop) |
| 43 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 44 | |
| 45 | # Caterina (Pro Micro) |
| 46 | ## pid.codes shared PID |
| 47 | ### Keyboardio Atreus 2 Bootloader |
| 48 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1209", ATTRS{idProduct}=="2302", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 49 | ## Spark Fun Electronics |
| 50 | ### Pro Micro 3V3/8MHz |
| 51 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9203", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 52 | ### Pro Micro 5V/16MHz |
| 53 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 54 | ### LilyPad 3V3/8MHz (and some Pro Micro clones) |
| 55 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9207", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 56 | ## Pololu Electronics |
| 57 | ### A-Star 32U4 |
| 58 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="1ffb", ATTRS{idProduct}=="0101", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 59 | ## Arduino SA |
| 60 | ### Leonardo |
| 61 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 62 | ### Micro |
| 63 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 64 | ## Adafruit Industries LLC |
| 65 | ### Feather 32U4 |
| 66 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000c", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 67 | ### ItsyBitsy 32U4 3V3/8MHz |
| 68 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000d", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 69 | ### ItsyBitsy 32U4 5V/16MHz |
| 70 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="239a", ATTRS{idProduct}=="000e", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 71 | ## dog hunter AG |
| 72 | ### Leonardo |
| 73 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0036", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 74 | ### Micro |
| 75 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="2a03", ATTRS{idProduct}=="0037", TAG+="uaccess", ENV{ID_MM_DEVICE_IGNORE}="1" |
| 76 | |
| 77 | # hid_listen |
| 78 | KERNEL=="hidraw*", MODE="0660", GROUP="plugdev", TAG+="uaccess", TAG+="udev-acl" |
| 79 | |
| 80 | # hid bootloaders |
| 81 | ## QMK HID |
| 82 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2067", TAG+="uaccess" |
| 83 | ## PJRC's HalfKay |
| 84 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0478", TAG+="uaccess" |
| 85 | |
| 86 | # APM32 DFU |
| 87 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="314b", ATTRS{idProduct}=="0106", TAG+="uaccess" |
| 88 | |
| 89 | # GD32V DFU |
| 90 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="28e9", ATTRS{idProduct}=="0189", TAG+="uaccess" |
| 91 | |
| 92 | # WB32 DFU |
| 93 | SUBSYSTEMS=="usb", ATTRS{idVendor}=="342d", ATTRS{idProduct}=="dfa0", TAG+="uaccess" |
| 94 | ''; |
| 95 | destination = "/etc/udev/rules.d/50-qmk.rules"; |
| 96 | }; |
| 97 | in { |
| 98 | services.udev.packages = [ frameworkKeyboardRule ]; |
| 99 | boot.kernelPackages = pkgs.linuxPackages_latest; |
| 100 | }); |
| 101 | } |