1{ config, lib, pkgs, ... }:
2
3let
4 cfgFile = pkgs.writeText "reader.conf" "";
5in
6
7with lib;
8
9{
10
11 ###### interface
12
13 options = {
14
15 services.pcscd = {
16
17 enable = mkOption {
18 default = false;
19 description = "Whether to enable the PCSC-Lite daemon.";
20 };
21
22 };
23
24 };
25
26
27 ###### implementation
28
29 config = mkIf config.services.pcscd.enable {
30
31 systemd.sockets.pcscd = {
32 description = "PCSC-Lite Socket";
33 wantedBy = [ "sockets.target" ];
34 before = [ "multi-user.target" ];
35 socketConfig.ListenStream = "/run/pcscd/pcscd.comm";
36 };
37
38 systemd.services.pcscd = {
39 description = "PCSC-Lite daemon";
40 preStart = ''
41 mkdir -p /var/lib/pcsc
42 rm -Rf /var/lib/pcsc/drivers
43 ln -s ${pkgs.ccid}/pcsc/drivers /var/lib/pcsc/
44 '';
45 serviceConfig = {
46 Type = "forking";
47 ExecStart = "${pkgs.pcsclite}/sbin/pcscd --auto-exit -c ${cfgFile}";
48 ExecReload = "${pkgs.pcsclite}/sbin/pcscd --hotplug";
49 };
50 };
51
52 };
53
54}