I'm trying to use my nitrokey on GuixSD. --8<---------------cut here---------------start------------->8--- > gpg --card-status gpg: selecting openpgp failed: No such device gpg: OpenPGP card not available: No such device --8<---------------cut here---------------end--------------->8--- It turns out that the nitrokey needs some udev rules to be driven by gpg: https://www.nitrokey.com/documentation/installation#p:nitrokey-start&os:linux Thus I tried to configure the following rule: --8<---------------cut here---------------start------------->8--- (define %nitrokey-udev-rule (udev-rule "41-nitrokey.rules" (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", " "ATTR{idVendor}==\"20a0\", ATTR{idProduct}==\"4211\", " "ENV{ID_SMARTCARD_READER}=\"1\", ENV{ID_SMARTCARD_READER_DRIVER}=\"gnupg\", GROUP+=\"users\", TAG+=\"uaccess\""))) ; ... (modify-services %desktop-services (udev-service-type config => (udev-configuration (inherit config) (rules (append (udev-configuration-rules config) (list %nitrokey-udev-rule)))))) --8<---------------cut here---------------end--------------->8--- I've tried the "plugdev" (as suggested on the website) and "users" GROUP, to no avail: I get the same error from `gpg --card-status`. I tried testing the rule with udevadm: --8<---------------cut here---------------start------------->8--- sudo udevadm test ${udevadm info -q path -n /dev/bus/usb/001/008} calling: test version 3.2.5 This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run. === trie on-disk === tool version: 3 file size: 7431994 bytes header size 80 bytes strings 1901394 bytes nodes 5530520 bytes Load module index timestamp of '/gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/etc/udev/rules.d' changed Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/50-udev-default.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-block.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-cdrom_id.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-drm.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-evdev.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-persistent-alsa.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-persistent-input.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-persistent-storage-tape.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-persistent-storage.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-persistent-v4l.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-sensor.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/60-serial.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/64-btrfs.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/70-mouse.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/70-touchpad.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/75-net-description.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/75-probe_mtd.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/78-sound-card.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/80-drivers.rules Reading rules file: /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/80-net-name-slot.rules rules contain 24576 bytes tokens (2048 * 12 bytes), 8930 bytes strings 1035 strings (15626 bytes), 649 de-duplicated (7083 bytes), 387 trie nodes used IMPORT builtin 'usb_id' /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/50-udev-default.rules:13 IMPORT builtin 'hwdb' /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/50-udev-default.rules:13 MODE 0664 /gnu/store/if6kkgnbwx1lmb5wp8p8g68i8s9hqs58-eudev-3.2.5/lib/udev/rules.d/50-udev-default.rules:43 handling device node '/dev/bus/usb/001/008', devnum=c189:7, mode=0664, uid=0, gid=0 preserve permissions /dev/bus/usb/001/008, 020664, uid=0, gid=0 preserve already existing symlink '/dev/char/189:7' to '../bus/usb/001/008' created db file '/run/udev/data/c189:7' for '/devices/pci0000:00/0000:00:14.0/usb1/1-4' ACTION=add BUSNUM=001 DEVNAME=/dev/bus/usb/001/008 DEVNUM=008 DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-4 DEVTYPE=usb_device DRIVER=usb ID_BUS=usb ID_MODEL=Nitrokey_Start ID_MODEL_ENC=Nitrokey\x20Start ID_MODEL_ID=4211 ID_REVISION=0200 ID_SERIAL=Nitrokey_Nitrokey_Start_FSIJ-1.2.6-67143146 ID_SERIAL_SHORT=FSIJ-1.2.6-67143146 ID_USB_INTERFACES=:0b0000: ID_VENDOR=Nitrokey ID_VENDOR_ENC=Nitrokey ID_VENDOR_FROM_DATABASE=Clay Logic ID_VENDOR_ID=20a0 MAJOR=189 MINOR=7 PRODUCT=20a0/4211/200 SUBSYSTEM=usb TYPE=0/0/0 USEC_INITIALIZED=924747532 Unload module index --8<---------------cut here---------------end--------------->8--- As you can see, 41-nitrokey.rules does not show here. In fact I can't find it on the filesystem. I don't understand how GuixSD manages the udev rules. Am I missing something? -- Pierre Neidhardt Jenkinson's Law: It won't work.