@ -11,41 +11,51 @@
## Functions
## Functions
source_env( ) {
source_env( ) {
if [ [ -f $ZSH_DOTENV_FILE ] ] ; then
if [ [ ! -f " $ZSH_DOTENV_FILE " ] ] ; then
if [ [ " $ZSH_DOTENV_PROMPT " != false ] ] ; then
return
local confirmation dirpath = " ${ PWD : A } "
fi
# make sure there is an (dis-)allowed file
if [ [ " $ZSH_DOTENV_PROMPT " != false ] ] ; then
touch " $ZSH_DOTENV_ALLOWED_LIST "
local confirmation dirpath = " ${ PWD : A } "
touch " $ZSH_DOTENV_DISALLOWED_LIST "
# make sure there is an (dis-)allowed file
# early return if disallowed
touch " $ZSH_DOTENV_ALLOWED_LIST "
if grep -q " $dirpath " " $ZSH_DOTENV_DISALLOWED_LIST " & >/dev/null; then
touch " $ZSH_DOTENV_DISALLOWED_LIST "
return ;
fi
# early return if disallowed
if command grep -q " $dirpath " " $ZSH_DOTENV_DISALLOWED_LIST " & >/dev/null; then
# check if current directory's .env file is allowed or ask for confirmation
return
if ! grep -q " $dirpath " " $ZSH_DOTENV_ALLOWED_LIST " & >/dev/null; then
# print same-line prompt and output newline character if necessary
echo -n " dotenv: found ' $ZSH_DOTENV_FILE ' file. Source it? ([Y]es/[n]o/[a]lways/n[e]ver) "
read -k 1 confirmation; [ [ " $confirmation " != $'\n' ] ] && echo
# check input
case " $confirmation " in
[ nN] ) return ; ;
[ aA] ) echo " $dirpath " >> " $ZSH_DOTENV_ALLOWED_LIST " ; ;
[ eE] ) echo " $dirpath " >> " $ZSH_DOTENV_DISALLOWED_LIST " ; return ; ;
*) ; ; # interpret anything else as a yes
esac
fi
fi
fi
# test .env syntax
# check if current directory's .env file is allowed or ask for confirmation
zsh -fn $ZSH_DOTENV_FILE || echo " dotenv: error when sourcing ' $ZSH_DOTENV_FILE ' file " >& 2
if ! command grep -q " $dirpath " " $ZSH_DOTENV_ALLOWED_LIST " & >/dev/null; then
# get cursor column and print new line before prompt if not at line beginning
local column
echo -ne "\e[6n" > /dev/tty
read -t 1 -s -d R column < /dev/tty
column = " ${ column ##* \[ *; } "
[ [ $column -eq 1 ] ] || echo
setopt localoptions allexport
# print same-line prompt and output newline character if necessary
source $ZSH_DOTENV_FILE
echo -n " dotenv: found ' $ZSH_DOTENV_FILE ' file. Source it? ([Y]es/[n]o/[a]lways/n[e]ver) "
read -k 1 confirmation
[ [ " $confirmation " = $'\n' ] ] || echo
# check input
case " $confirmation " in
[ nN] ) return ; ;
[ aA] ) echo " $dirpath " >> " $ZSH_DOTENV_ALLOWED_LIST " ; ;
[ eE] ) echo " $dirpath " >> " $ZSH_DOTENV_DISALLOWED_LIST " ; return ; ;
*) ; ; # interpret anything else as a yes
esac
fi
fi
fi
# test .env syntax
zsh -fn $ZSH_DOTENV_FILE || echo " dotenv: error when sourcing ' $ZSH_DOTENV_FILE ' file " >& 2
setopt localoptions allexport
source $ZSH_DOTENV_FILE
}
}
autoload -U add-zsh-hook
autoload -U add-zsh-hook