X-Git-Url: https://git.sev.monster/~sev/dotfiles.git/blobdiff_plain/8a92a2c03c1ea03829e44bf80771a08153261e2a..d3e867c038fcb05cce5a72fd5134ff7b531c4f31:/etc/zsh/.zprofile?ds=sidebyside diff --git a/etc/zsh/.zprofile b/etc/zsh/.zprofile index a55b7e6..38b34c5 100644 --- a/etc/zsh/.zprofile +++ b/etc/zsh/.zprofile @@ -50,8 +50,9 @@ if [[ ! -v DBUS_SESSION_BUS_ADDRESS && -v commands[dbus-launch] ]] { # therefore, the safest way to ensure unique sockets while not having to # write specific logic for both scenarios is to simply change GNUPGHOME. # the easiest way to do this is to create a new dir and link the contents -# of GNUPGHOME to the new home. we can then replace the agent sockets -# there with the forwarded one. +# of GNUPGHOME to the new home. we can then replace all of the agent +# sockets wherever they now are with the forwarded one. in either case we +# will be overwriting the session-specific sockets. # # NOTE: since Unix sockets are not supported under Windows, this will not work # under msys, cygwin, mingw, etc., but may work under wsl2. @@ -70,7 +71,7 @@ if [[ ! -v DBUS_SESSION_BUS_ADDRESS && -v commands[dbus-launch] ]] { # clunky (e.g. asking for password twice) to make it worth it. function _gpg_socketpath { # dirs are percent-encoded: https://stackoverflow.com/a/64312099 - echo ${1//(#b)%([[:xdigit:]](#c2))/${(#):-0x$match[1]}} + echo -E - ${1//(#b)%([[:xdigit:]](#c2))/${(#):-0x$match[1]}} } if [[ ! -v _sev_setup_gpg_forward && -v commands[gpg] ]] { # XXX: assuming /tmp exists and is writable on destination @@ -142,18 +143,15 @@ if [[ -v commands[gpg-connect-agent] && export GPG_TTY=$(tty) if [[ ( -v DISPLAY || -v WAYLAND_DISPLAY ) && ${PINENTRY_USER_DATA/USE_TTY=0} == $PINENTRY_USER_DATA ]] - export PINENTRY_USER_DATA=USE_TTY=$(( - ${+DISPLAY} + ${+WAYLAND_DISPLAY} == 0)) - # XXX: don't know if gpg-agent supports comments after directives - # XXX: path could have # + export PINENTRY_USER_DATA=USE_TTY=0 # XXX: we are assuming this is our pinentry from .local/bin - sed -Ei 's#^([[:space:]]*pinentry-program[[:space:]]).*$#\1'$HOME'/.local/bin/pinentry#' \ + sed -Ei 's^([[:space:]]*pinentry-program[[:space:]]).*$\1'$HOME'/.local/bin/pinentry' \ ${GNUPGHOME:-~/.gnupg}/gpg-agent.conf 2>/dev/null # XXX: could check for changes before doing this to save perf gpg-connect-agent RELOADAGENT UPDATESTARTUPTTY /bye >/dev/null 2>&1 if {$p} { gpg-connect-agent /subst /serverpid \ - "/echo pid \${get serverpid} on $GPG_TTY" /bye 2>/dev/null + "/echo pid \${get serverpid} on ${WAYLAND_DISPLAY:-${DISPLAY:-$GPG_TTY}}" /bye 2>/dev/null print -nP '%f' } } elif {$p} { @@ -179,7 +177,7 @@ if [[ ! -v _sev_setup_ssh ]] { if [[ -f $e ]] { IFS=$'\0' read -r sock pid <$e } - if [[ -S $sock && $pid > 0 ]] && kill -0 $pid; then + if [[ -S $sock && $pid > 0 ]] && kill -0 $pid >/dev/null 2>&1; then [[ -o interactive ]] && print -P "Reusing agent PID $pid%f" export SSH_AUTH_SOCK=$sock export SSH_AGENT_PID=$pid @@ -190,12 +188,13 @@ if [[ ! -v _sev_setup_ssh ]] { # subshells can't be used to capture output and print. c='TMPDIR=$_sev_tmp ${okc}ssh-agent' if [[ -o interactive ]] { + [[ -n $okc ]] && echo -n 'OKC-' eval $(eval $=c) print -nP '%f' } else { eval $(eval $=c) >/dev/null 2>&1 } - echo -n $SSH_AUTH_SOCK$'\0'$SSH_AGENT_PID >!$e + echo -En - $SSH_AUTH_SOCK$'\0'$SSH_AGENT_PID >!$e unset c fi unset okc e sock pid @@ -222,5 +221,8 @@ if [[ ! -v _sev_setup_ssh ]] { } unfunction _gpg_socketpath +### plugins +load-plugins zprofile + ### load site-specific load-site-dotfile zprofile