diff options
Diffstat (limited to 'nixpkgs/nixos/modules/services/hardware/pcscd.nix')
-rw-r--r-- | nixpkgs/nixos/modules/services/hardware/pcscd.nix | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/nixpkgs/nixos/modules/services/hardware/pcscd.nix b/nixpkgs/nixos/modules/services/hardware/pcscd.nix new file mode 100644 index 000000000000..f3fc4c3cc79e --- /dev/null +++ b/nixpkgs/nixos/modules/services/hardware/pcscd.nix @@ -0,0 +1,69 @@ +{ config, lib, pkgs, ... }: + +with lib; + +let + cfgFile = pkgs.writeText "reader.conf" config.services.pcscd.readerConfig; + + pluginEnv = pkgs.buildEnv { + name = "pcscd-plugins"; + paths = map (p: "${p}/pcsc/drivers") config.services.pcscd.plugins; + }; + +in { + + ###### interface + + options = { + + services.pcscd = { + enable = mkEnableOption "PCSC-Lite daemon"; + + plugins = mkOption { + type = types.listOf types.package; + default = [ pkgs.ccid ]; + defaultText = "[ pkgs.ccid ]"; + example = literalExample "[ pkgs.pcsc-cyberjack ]"; + description = "Plugin packages to be used for PCSC-Lite."; + }; + + readerConfig = mkOption { + type = types.lines; + default = ""; + example = '' + FRIENDLYNAME "Some serial reader" + DEVICENAME /dev/ttyS0 + LIBPATH /path/to/serial_reader.so + CHANNELID 1 + ''; + description = '' + Configuration for devices that aren't hotpluggable. + + See <citerefentry><refentrytitle>reader.conf</refentrytitle> + <manvolnum>5</manvolnum></citerefentry> for valid options. + ''; + }; + }; + }; + + ###### implementation + + config = mkIf config.services.pcscd.enable { + + systemd.sockets.pcscd = { + description = "PCSC-Lite Socket"; + wantedBy = [ "sockets.target" ]; + before = [ "multi-user.target" ]; + socketConfig.ListenStream = "/run/pcscd/pcscd.comm"; + }; + + systemd.services.pcscd = { + description = "PCSC-Lite daemon"; + environment.PCSCLITE_HP_DROPDIR = pluginEnv; + serviceConfig = { + ExecStart = "${getBin pkgs.pcsclite}/sbin/pcscd -f -x -c ${cfgFile}"; + ExecReload = "${getBin pkgs.pcsclite}/sbin/pcscd -H"; + }; + }; + }; +} |