#!/usr/bin/env bash set -euo pipefail NOTIF_PERSIST=30000 NOTIF_INFORM=5000 stdout= caller= notif= while getopts "on:" o; do case "${o}" in o) stdout=1;; n) caller="${OPTARG}" ;; *) exec ykman oath accounts list ;; esac done shift $((OPTIND-1)) if [ $# -lt 1 ]; then exec ykman oath accounts list fi if [ -n "$caller" ]; then notif="$(notify-send -p -t $NOTIF_PERSIST "Touch your Yubikey" "$caller is requesting otp for $1")" trap 'notify-send -r $notif -t 1 "Touch your Yubikey" "$caller is requesting otp for $1"' EXIT fi code=$(ykman oath accounts code -s "$1") if [ -z "$stdout" ]; then echo "$code" | tee >(xclip -i) xdotool type "$code" else echo "$code" fi if [ -n "$code" ] && [ -n "$notif" ]; then trap : EXIT notify-send -r "$notif" -t $NOTIF_INFORM "Yubikey Touched" "otp generated for $caller" fi