at 17.09-beta 1.8 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfgFile = pkgs.writeText "reader.conf" config.services.pcscd.readerConfig; 7 8 pluginEnv = pkgs.buildEnv { 9 name = "pcscd-plugins"; 10 paths = map (p: "${p}/pcsc/drivers") config.services.pcscd.plugins; 11 }; 12 13in { 14 15 ###### interface 16 17 options = { 18 19 services.pcscd = { 20 enable = mkEnableOption "PCSC-Lite daemon"; 21 22 plugins = mkOption { 23 type = types.listOf types.package; 24 default = [ pkgs.ccid ]; 25 defaultText = "[ pkgs.ccid ]"; 26 example = literalExample "[ pkgs.pcsc-cyberjack ]"; 27 description = "Plugin packages to be used for PCSC-Lite."; 28 }; 29 30 readerConfig = mkOption { 31 type = types.lines; 32 default = ""; 33 example = '' 34 FRIENDLYNAME "Some serial reader" 35 DEVICENAME /dev/ttyS0 36 LIBPATH /path/to/serial_reader.so 37 CHANNELID 1 38 ''; 39 description = '' 40 Configuration for devices that aren't hotpluggable. 41 42 See <citerefentry><refentrytitle>reader.conf</refentrytitle> 43 <manvolnum>5</manvolnum></citerefentry> for valid options. 44 ''; 45 }; 46 }; 47 }; 48 49 ###### implementation 50 51 config = mkIf config.services.pcscd.enable { 52 53 systemd.sockets.pcscd = { 54 description = "PCSC-Lite Socket"; 55 wantedBy = [ "sockets.target" ]; 56 before = [ "multi-user.target" ]; 57 socketConfig.ListenStream = "/run/pcscd/pcscd.comm"; 58 }; 59 60 systemd.services.pcscd = { 61 description = "PCSC-Lite daemon"; 62 environment.PCSCLITE_HP_DROPDIR = pluginEnv; 63 serviceConfig = { 64 ExecStart = "${pkgs.pcsclite}/sbin/pcscd -f -x -c ${cfgFile}"; 65 ExecReload = "${pkgs.pcsclite}/sbin/pcscd -H"; 66 }; 67 }; 68 }; 69}