81 lines
1.7 KiB
Bash
81 lines
1.7 KiB
Bash
#!/usr/bin/env zsh
|
|
|
|
eval "$_z4h_opt"
|
|
|
|
unset _z4h_direnv_err
|
|
|
|
if (( ARGC )); then
|
|
local direnv=$1
|
|
else
|
|
local direnv=${commands[direnv]-}
|
|
if [[ -z $direnv ]]; then
|
|
unset _z4h_direnv_sig
|
|
return 1
|
|
fi
|
|
fi
|
|
|
|
# { print -n '\x1f\x8b\x08\x00\x00\x00\x00\x00'; base64 -d <<<${${DIRENV_WATCHES//-/+}//_//} } | zcat 2>/dev/null
|
|
|
|
# zcat
|
|
# gzcat
|
|
# uncompress -c
|
|
# gunzip -c
|
|
# gzip -cd
|
|
|
|
local sig
|
|
local envrc=(./(../)#.envrc(NY1:a))
|
|
if (( $#envrc )); then
|
|
local -a deps=(
|
|
${XDG_DATA_HOME:-~/.local/share}/direnv/allow
|
|
${XDG_CONFIG_HOME:-~/.config}/{direnv.toml,config.toml})
|
|
local -a stat
|
|
local files=($^deps(N))
|
|
local non_files=(${deps:|files})
|
|
if zstat -A stat +mtime -- $envrc $files 2>/dev/null; then
|
|
local sig=$envrc$'\0'${(pj:\0:)stat}
|
|
else
|
|
local sig=stat-error
|
|
fi
|
|
elif [[ ! -v DIRENV_WATCHES ]]; then
|
|
typeset -g _z4h_direnv_sig=none
|
|
return
|
|
else
|
|
local sig=none
|
|
fi
|
|
|
|
[[ $sig == ${_z4h_direnv_sig-} ]] && return
|
|
|
|
unset _z4h_direnv_sig
|
|
|
|
local data
|
|
data=$(
|
|
local out
|
|
out=$($direnv export zsh) 2>&1
|
|
builtin printf '%s%18d%d' "$out" $#out $(( ! $? ))
|
|
) || return
|
|
|
|
local -i success=$data[-1]
|
|
local -i out_len=$data[-19,-2]
|
|
local out=$data[-out_len-19,-20]
|
|
local err=${data[1,-out_len-20]%%$'\n'#}
|
|
|
|
if [[ -n $err ]]; then
|
|
local ctx=:z4h:direnv:
|
|
(( success )) && ctx+='success' || ctx+='error'
|
|
if zstyle -T $ctx notify; then
|
|
if builtin zle; then
|
|
typeset -g _p9k__raw_msg=${err//\%/%%}$'\n'
|
|
else
|
|
print -ru2 -- $err
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
emulate -L zsh
|
|
if [[ ! -v __p9k_trapped ]]; then
|
|
local -i __p9k_trapped
|
|
builtin trap : INT
|
|
builtin trap "builtin trap ${(q)__p9k_trapint:--} INT" EXIT
|
|
fi
|
|
builtin eval -- $out
|
|
typeset -g _z4h_direnv_sig=$sig
|