diff options
Diffstat (limited to 'wsl/.config/zsh/gpg.sh')
-rwxr-xr-x | wsl/.config/zsh/gpg.sh | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/wsl/.config/zsh/gpg.sh b/wsl/.config/zsh/gpg.sh new file mode 100755 index 0000000..ac0bb4c --- /dev/null +++ b/wsl/.config/zsh/gpg.sh @@ -0,0 +1,66 @@ +export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock" +export GPG_AGENT_SOCK="$HOME/.gnupg/S.gpg-agent" + +gpg-init() ( + if ! ss -a | grep -q "$SSH_AUTH_SOCK"; then + rm -f "$SSH_AUTH_SOCK" + wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe" + if test -x "$wsl2_ssh_pageant_bin"; then + (setsid nohup socat UNIX-LISTEN:"$SSH_AUTH_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin" >/dev/null 2>&1 &) + else + echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable." + fi + unset wsl2_ssh_pageant_bin + fi + + if ! ss -a | grep -q "$GPG_AGENT_SOCK"; then + rm -rf "$GPG_AGENT_SOCK" + wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe" + if test -x "$wsl2_ssh_pageant_bin"; then + (setsid nohup socat UNIX-LISTEN:"$GPG_AGENT_SOCK,fork" EXEC:"$wsl2_ssh_pageant_bin --gpg S.gpg-agent" >/dev/null 2>&1 &) + else + echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable." + fi + unset wsl2_ssh_pageant_bin + fi + + if ! ss -a | grep -q "${GPG_AGENT_SOCK}.extra"; then + rm -rf "${GPG_AGENT_SOCK}.extra" + wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe" + if test -x "$wsl2_ssh_pageant_bin"; then + (setsid nohup socat UNIX-LISTEN:"${GPG_AGENT_SOCK}.extra,fork" EXEC:"$wsl2_ssh_pageant_bin --gpg S.gpg-agent.extra" >/dev/null 2>&1 &) + else + echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable." + fi + unset wsl2_ssh_pageant_bin + fi +) + +start-pageant() { + # TODO: WIP + if ! ss -a | grep -q "${GPG_AGENT_SOCK}.extra"; then + rm -rf "${GPG_AGENT_SOCK}.extra" + wsl2_ssh_pageant_bin="$HOME/.ssh/wsl2-ssh-pageant.exe" + if test -x "$wsl2_ssh_pageant_bin"; then + (setsid nohup socat UNIX-LISTEN:"${GPG_AGENT_SOCK}.extra,fork" EXEC:"$wsl2_ssh_pageant_bin --gpg S.gpg-agent.extra" >/dev/null 2>&1 &) + else + echo >&2 "WARNING: $wsl2_ssh_pageant_bin is not executable." + fi + unset wsl2_ssh_pageant_bin + fi +} + +# Reload +gpg-reset() { + gpg-connect-agent.exe KILLAGENT /bye &>/dev/null + pkill -f 'socat.*wsl2-ssh-pageant.exe' + gpg-connect-agent.exe /bye &>/dev/null + gpg-init +} + +# Relearn card serial number +gpg-learn() { + gpg-connect-agent.exe "scd serialno" "learn --force" /bye +} + +gpg-init |