X-Git-Url: https://git.sev.monster/~sev/dotfiles.git/blobdiff_plain/8eb81f95a10b12c52faa4fcdeb1e4941f02e3050..43016843cfea7f857797fdc1d6e8a2b59557aaf1:/base/.zprofile diff --git a/base/.zprofile b/base/.zprofile index 82e70e4..f028728 100644 --- a/base/.zprofile +++ b/base/.zprofile @@ -1,63 +1,66 @@ -### general exports +### exports +## reset PATH to prevent /etc/zprofile from changing it +# some distros put non-interactive PATH in env and interactive PATH in profile; +# we want to make sure to always use ours regardless +if [[ -v _sev_backup_path ]] { + path=("${_backup_path[@]}" "${path[@]}") + export PATH + unset _sev_backup_path +} +## common export EDITOR=vim export PAGER=less -## lang -export CHARSET=UTF-8 -export LANG="en_US.UTF-8" -export LC_CTYPE="$LANG" +## grep +# XXX: deprecated in GNU +export GREP_OPTIONS=--color=auto ## histfile export HISTFILE=~/.histfile export HISTSIZE=1000 export SAVEHIST=1000 -## path -# /usr/{pkg,local,games} are unix/bsdisms -typeset -U PATH path -path=({~/,/,/usr/}sbin {~/,/,/usr/}bin /usr/pkg/{s,}bin /usr/X11R{7,6}/bin - /usr/local/{s,}bin /usr/games "${path[@]}") -export PATH -typeset -U FPATH fpath -fpath=(~/.zsh/functions/Prompts "${fpath[@]}") -export FPATH - -### applications ## python export PYTHONSTARTUP=~/.pythonrc ## perl -(( ${+commands[perl]} )) && eval $(perl -I $XDG_DATA_HOME/perl5/lib/perl5 -Mlocal::lib=$XDG_DATA_HOME/perl5 2>/dev/null) -## gpg -if (( ${+commands[gpg]} )) { - # SSH_AUTH_SOCK should be set in a remote SSH session for passthrough - # if it isn't, we are likely the first login shell on the local machine - if [[ ! -v SSH_AUTH_SOCK ]] { - export GPG_TTY=$(tty) - gpg-connect-agent UPDATESTARTUPTTY /bye >/dev/null - export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) +[[ -v commands[perl] ]] && eval $(perl -I $XDG_DATA_HOME/perl5/lib/perl5 -Mlocal::lib=$XDG_DATA_HOME/perl5 2>/dev/null) + +### ssh agents +# NOTE: preferred order of agents to check: okcagent, gnupg, openssh +# first block takes care of okcagent and openssh, second handles gnupg +if [[ ! -v SSH_AUTH_SOCK && ( -v commands[okc-ssh-agent] || + ( -v commands[ssh-agent] && ! -v commands[gpg] ) ) ]] { + okc=${commands[okc-ssh-agent]:+okc-} + agentfile=~/tmp/${okc}ssh-agent-exports + typeset sock= + typeset -i pid= + if [[ -f "$agentfile" ]] { + IFS=$'\0' read -r sock pid <"$agentfile" } + if [[ -S "$sock" && $pid > 0 ]] && kill -0 $pid; then + echo "Reusing agent pid $pid" + export SSH_AUTH_SOCK="$sock" + export SSH_AGENT_PID=$pid + else + # TODO: ensure ssh-agent path looks legit + # to avoid unsafe eval? + eval `${okc}ssh-agent` + echo -n "$SSH_AUTH_SOCK"$'\0'$SSH_AGENT_PID >!$agentfile + fi + unset okc agentfile sock pid +} elif [[ -v commands[gpg] && ! -S $_GNUPG_SOCK_DEST && \ + ( ! -v SSH_AUTH_SOCK || -v DISPLAY ) ]] { + export GPG_TTY=$(tty) + export PINENTRY_USER_DATA=USE_TTY=$((!${+DISPLAY})) + gpg-connect-agent UPDATESTARTUPTTY /bye >/dev/null 2>&1 + gpg-connect-agent /subst /serverpid \ + '/echo GPG agent pid ${get serverpid}' /bye + [[ ! -v SSH_AUTH_SOCK ]] && \ + export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) } -## xdg -export XDG_CONFIG_HOME=~/etc -export XDG_CONFIG_DIRS=~/.config:/usr/pkg/etc/xdg:/usr/local/etc/xdg:/etc/xdg -export XDG_DATA_HOME=~/share -export XDG_DATA_DIRS=~/.local/share:/usr/pkg/share:/usr/local/share:/usr/share -export XDG_CACHE_HOME=~/tmp -export XDG_RUNTIME_DIR=~/tmp -## grep -# XXX: deprecated in GNU -export GREP_OPTIONS=--color=auto -### tmp -t="${TMPDIR:-/tmp}/home-$LOGNAME" -h="$HOME/tmp" -if [[ ! -e "$t" ]] { - mkdir -m 700 "$t" > /dev/null 2>&1 - #TODO: check if dir exists after mkdir -} -#allow opaque entries to override link creation -if [[ ! -e "$h" ]] { - ln -sf "$t" "$h" > /dev/null 2>&1 +### gpg socket +if [[ -v _GNUPG_SOCK_SRC && -v _GNUPG_SOCK_DEST && -S $_GNUPG_SOCK_DEST ]] { + unlink $_GNUPG_SOCK_SRC >/dev/null 2>&1 + mv $_GNUPG_SOCK_DEST $_GNUPG_SOCK_SRC >/dev/null } -unset t -unset h ### load site-specific if [[ -f ~/.zprofile.local ]] { source ~/.zprofile.local }