{stdenv, makeWrapper, ed, libopensc_dnie}: let opensc = libopensc_dnie.opensc; in stdenv.mkDerivation rec { name = "${opensc.name}-dnie-wrapper"; buildInputs = [ makeWrapper ]; phases = [ "installPhase" ]; installPhase = '' mkdir -p $out/etc cp ${opensc}/etc/opensc.conf $out/etc chmod +w $out/etc/opensc.conf # NOTE: The libopensc-dnie.so driver requires /usr/bin/pinentry available, to sign ${ed}/bin/ed $out/etc/opensc.conf << EOF /card_drivers a card_drivers = dnie; card_driver dnie { module = ${libopensc_dnie}/lib/libopensc-dnie.so; } . w q EOF # Disable pkcs15 file caching, otherwise the card does not work sed -i 's/use_caching = true/use_caching = false/' $out/etc/opensc.conf for a in ${opensc}/bin/*; do makeWrapper $a $out/bin/`basename $a` \ --set OPENSC_CONF $out/etc/opensc.conf done # Special wrapper for pkcs11-tool, which needs an additional parameter rm $out/bin/pkcs11-tool makeWrapper ${opensc}/bin/pkcs11-tool $out/bin/pkcs11-tool \ --set OPENSC_CONF $out/etc/opensc.conf \ --add-flags "--module ${opensc}/lib/opensc-pkcs11.so" # Add, as bonus, a wrapper for the firefox in the PATH, that loads the # proper opensc configuration. cat > $out/bin/firefox-dnie << EOF #!${stdenv.shell} export OPENSC_CONF=$out/etc/opensc.conf exec firefox EOF chmod +x $out/bin/firefox-dnie ''; meta = { description = "Access to the opensc tools and firefox using the Spanish national ID SmartCard"; longDescription = '' Opensc needs a special configuration and special drivers to use the SmartCard the Spanish government provides to the citizens as ID card. Some wrapper scripts take care for the proper opensc configuration to be used, in order to access the certificates in the SmartCard through the opensc tools or firefox. Opensc will require a pcscd daemon running, managing the access to the card reader. ''; maintainers = with stdenv.lib.maintainers; [viric]; }; }