···
77
77
services.udisks2.enable = true;
78
78
services.tailscale.enable = true;
79
79
80
80
+
# ZSA Keyboard udev rules for Oryx web flashing and live training
81
81
+
services.udev.extraRules = ''
82
82
+
# Rules for Oryx web flashing and live training
83
83
+
KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", MODE="0664", GROUP="plugdev"
84
84
+
KERNEL=="hidraw*", ATTRS{idVendor}=="3297", MODE="0664", GROUP="plugdev"
85
85
+
86
86
+
# Legacy rules for live training over webusb (Not needed for firmware v21+)
87
87
+
# Rule for all ZSA keyboards
88
88
+
SUBSYSTEM=="usb", ATTR{idVendor}=="3297", GROUP="plugdev"
89
89
+
# Rule for the Moonlander
90
90
+
SUBSYSTEM=="usb", ATTR{idVendor}=="3297", ATTR{idProduct}=="1969", GROUP="plugdev"
91
91
+
# Rule for the Ergodox EZ
92
92
+
SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="1307", GROUP="plugdev"
93
93
+
# Rule for the Planck EZ
94
94
+
SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="6060", GROUP="plugdev"
95
95
+
96
96
+
# Wally Flashing rules for the Ergodox EZ
97
97
+
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
98
98
+
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
99
99
+
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666"
100
100
+
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666"
101
101
+
102
102
+
# Keymapp / Wally Flashing rules for the Moonlander and Planck EZ
103
103
+
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666", SYMLINK+="stm32_dfu"
104
104
+
# Keymapp Flashing rules for the Voyager
105
105
+
SUBSYSTEMS=="usb", ATTRS{idVendor}=="3297", MODE:="0666", SYMLINK+="ignition_dfu"
106
106
+
# USB serial device access via Chrome/Chromium
107
107
+
KERNEL=="ttyUSB[0-9]*", MODE:="0666", GROUP="dialout"
108
108
+
KERNEL=="ttyACM[0-9]*", MODE:="0666", GROUP="dialout"
109
109
+
'';
110
110
+
80
111
# Define a user account. Don't forget to set a password with ‘passwd’.
81
112
users.groups.storage = { };
113
113
+
users.groups.plugdev = { };
82
114
users.users.sean = {
83
115
isNormalUser = true;
84
116
description = "Sean Aye";
···
90
122
"disk"
91
123
"storage"
92
124
"input"
125
125
+
"plugdev"
126
126
+
"dialout"
93
127
];
94
128
shell = pkgs.fish;
95
129
};