{
  pkgs,
  host,
  ...
}:
let
  vars = import ../../hosts/${host}/variables.nix;
in
{
  # Udev rules for YubiKey
  services.udev.packages = [ pkgs.yubikey-personalization ];

  # Smartcard daemon (for CCID / GPG smartcard mode)
  services.pcscd.enable = true;

  # GPG agent with SSH support
  programs.gnupg.agent = {
    enable = true;
    enableSSHSupport = true;
  };

  # Yubico PAM — challenge-response authentication
  security.pam.yubico = {
    enable = true;
    debug = false;
    mode = "challenge-response";
    id = vars.yubikeyIds;
  };

  # Lock all sessions when a YubiKey is unplugged
  services.udev.extraRules = ''
    ACTION=="remove",\
     ENV{ID_BUS}=="usb",\
     ENV{ID_MODEL_ID}=="0407",\
     ENV{ID_VENDOR_ID}=="1050",\
     ENV{ID_VENDOR}=="Yubico",\
     RUN+="${pkgs.systemd}/bin/loginctl lock-sessions"
  '';

  # Useful CLI tools for managing YubiKeys
  environment.systemPackages = with pkgs; [
    yubikey-personalization
    yubikey-manager
    yubico-pam
    pam_u2f
  ];
}
