: ${AUTOENV_AUTH_FILE:=~/.autoenv_auth} : ${AUTOENV_FILE_ENTER:=.autoenv.zsh} : ${AUTOENV_FILE_LEAVE:=.autoenv_leave.zsh} : ${AUTOENV_DISABLED:=0} : ${AUTOENV_HANDLE_LEAVE:=1} _autoenv_hash_pair() { local env_file="${1:A}" if [ ! -s "${env_file}" ]; then return 1 fi local env_cksum=${${:-$(cksum "${env_file}")}[1]} echo "${env_file}:${env_cksum}" } _autoenv_envfile_authorize() { local env_file="${1}" local env_cksum="$(_autoenv_hash_pair "${env_file}")" local line while read -r line do if [ "${line}" == "${env_cksum}" ]; then return 0 fi done < "${AUTOENV_AUTH_FILE}" return 1 } _autoenv() { if ! _autoenv_envfile_authorize "${PWD}/${AUTOENV_FILE_ENTER}"; then return fi if [ -f "${PWD}/${AUTOENV_FILE_ENTER}" ]; then source "${PWD}/${AUTOENV_FILE_ENTER}" fi } _autoenv_leave() { if ! _autoenv_envfile_authorize "${OLDPWD}/${AUTOENV_FILE_LEAVE}"; then return fi if [ -f "${OLDPWD}/${AUTOENV_FILE_LEAVE}" ]; then source "${OLDPWD}/${AUTOENV_FILE_LEAVE}" fi } if [[ "${AUTOENV_DISABLED}" != 1 ]]; then autoload -U add-zsh-hook add-zsh-hook chpwd _autoenv if [[ "${AUTOENV_HANDLE_LEAVE}" == 1 ]]; then add-zsh-hook chpwd _autoenv_leave fi if [ -f "${PWD}/${AUTOENV_FILE_ENTER}" ]; then if _autoenv_envfile_authorize "${PWD}/${AUTOENV_FILE_ENTER}"; then source "${PWD}/${AUTOENV_FILE_ENTER}" fi fi fi autoenv-auth() { if [ -s "${PWD}/${AUTOENV_FILE_ENTER}" ]; then _autoenv_hash_pair "${PWD}/${AUTOENV_FILE_ENTER}" >> "${AUTOENV_AUTH_FILE}" fi if [ -s "${PWD}/${AUTOENV_FILE_LEAVE}" ]; then _autoenv_hash_pair "${PWD}/${AUTOENV_FILE_LEAVE}" >> "${AUTOENV_AUTH_FILE}" fi } # vim: ft=zsh