{ ... }: {
	text = ''
		# Check smartcard pin.
		function scunlock() {
			pkill keyboxd   &> /dev/null
			# pkill gpg-agent &> /dev/null
			echo verify | gpg --card-edit --no-tty --command-fd=0
		}

		# Encrypt files to myself.
		# Usage: encrypt <FILES>
		function encrypt() {
			local IFS=$'\n'
			local targets=(''${@})

			if [[ "''${targets}" = "" ]]; then
				help encrypt
				return 2
			fi

			process() {
				gpg --encrypt --armor --recipient hi@voronind.com --output "''${target}.gpg" "''${target}"
			}

			_iterate_targets process ''${targets[@]}
		}

		# Decrypt files to myself.
		# Usage: decrypt [FILES]
		function decrypt() {
			local IFS=$'\n'
			local targets=(''${@})

			[[ "''${targets}" = "" ]] && targets=(*.gpg)

			process() {
				gpg --decrypt --output "''${target%.gpg}" "''${target}"
			}

			_iterate_targets process ''${targets[@]}
		}

		# Sign a file.
		# Usage: sign <FILES>
		function sign() {
			local IFS=$'\n'
			local targets=(''${@})

			if [[ "''${targets}" = "" ]]; then
				help sign
				return 2
			fi

			process() {
				gpg --detach-sig --armor --output "''${target}.sig" "''${target}"
			}

			_iterate_targets process ''${targets[@]}
		}

		# Verify a signature. All .sig files by default.
		# Usage: verify [FILES]
		function verify() {
			local IFS=$'\n'
			local targets=(''${@})

			[[ "''${targets}" = "" ]] && targets=(*.sig)

			process() {
				gpg --verify "''${target}"
			}

			_iterate_targets process ''${targets[@]}
		}

		# Find user keys using keyservers.
		# Usage: gpg_find <EMAIL>
		function gpg_find() {
			local email="''${1}"

			if [[ "''${email}" = "" ]]; then
				help gpg_find
				return 2
			fi

			gpg --locate-keys "''${email}" \
			|| gpg --locate-keys --auto-key-locate hkps://keys.openpgp.org "''${email}"
		}

		# Update keys.
		function gpg_refresh() {
			gpg --refresh-keys
		}
	'';
}