mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-11-13 12:13:36 +01:00
feat: add CanoKey hardware security key support (#334)
This commit is contained in:
1 parent
14db49660b
commit
d690f45183
4 files changed
+54
-1
No files matched your search
@@ -1,4 +1,4 @@
|
||||
_:
|
||||
{ pkgs, ... }:
|
||||
#############################################################
|
||||
#
|
||||
# Fern - MacBook Pro 2024 14-inch M4 Pro 48G, mainly for business.
|
||||
@@ -11,4 +11,12 @@ in
|
||||
networking.hostName = hostname;
|
||||
networking.computerName = hostname;
|
||||
system.defaults.smb.NetBIOSName = hostname;
|
||||
|
||||
# CanoKey hardware security key: PC/SC tooling (`pcsc_scan`) for troubleshooting.
|
||||
# The key itself uses the macOS built-in PC/SC + HID stacks; the FIDO2/WebAuthn
|
||||
# udev rules used on Linux do not apply here.
|
||||
environment.systemPackages = with pkgs; [
|
||||
pcsclite
|
||||
pcsc-tools
|
||||
];
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
myvars,
|
||||
...
|
||||
}:
|
||||
let
|
||||
cfg = config.modules.desktop.canokey;
|
||||
in
|
||||
{
|
||||
options.modules.desktop.canokey = {
|
||||
enable = lib.mkEnableOption "CanoKey hardware security key support";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.pcscd.enable = true;
|
||||
|
||||
# The FIDO2 udev rule below hands the key to the plugdev group.
|
||||
users.users.${myvars.username}.extraGroups = [ "plugdev" ];
|
||||
|
||||
services.udev.extraRules = ''
|
||||
# CanoKey - GnuPG/pcsclite
|
||||
SUBSYSTEM!="usb", GOTO="canokey_rules_end"
|
||||
ACTION!="add|change", GOTO="canokey_rules_end"
|
||||
ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="42d4", ENV{ID_SMARTCARD_READER}="1"
|
||||
LABEL="canokey_rules_end"
|
||||
|
||||
# CanoKey - FIDO2
|
||||
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="42d4", TAG+="uaccess", GROUP="plugdev", MODE="0660"
|
||||
|
||||
# CanoKey - WebUSB
|
||||
# Upstream ships this as MODE:="0666" (world-writable), which lets any
|
||||
# local user access the key; restrict it to the plugdev group instead.
|
||||
SUBSYSTEMS=="usb", ATTR{idVendor}=="20a0", ATTR{idProduct}=="42d4", GROUP="plugdev", MODE="0660"
|
||||
'';
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
ccid
|
||||
pcsc-tools
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -34,6 +34,7 @@ let
|
||||
modules.secrets.preservation.enable = true;
|
||||
# not supported yet
|
||||
modules.desktop.gaming.enable = false;
|
||||
modules.desktop.canokey.enable = true;
|
||||
}
|
||||
];
|
||||
home-modules = map mylib.relativeToRoot [
|
||||
|
||||
@@ -34,6 +34,7 @@ let
|
||||
modules.secrets.desktop.enable = true;
|
||||
modules.secrets.preservation.enable = true;
|
||||
modules.desktop.gaming.enable = true;
|
||||
modules.desktop.canokey.enable = true;
|
||||
}
|
||||
];
|
||||
home-modules = map mylib.relativeToRoot [
|
||||
|
||||
Reference in new issue
Block a user