typeset -g -a run args zsv_hooks
typeset -g -A zsv_default_handler handler zsv_hooks
if (($UID)); then
: ${ZSVDIR:=$HOME/.zsv}
else
: ${ZSVDIR:=/run/zsv}
fi
if ! (($+zsv_dir)); then
zsv_dir=$ZSVDIR/foo
fi
zsv_name=$zsv_dir:t
zsv_svdir=$zsv_dir:h
zsv_hooks[run]=zsv_apply_flags
zsv_default_handler[run]=zsv_generic
zsv_default_handler[log]=zsv_logger
zsv_default_handler[cond]=check
zsv_default_flags=E
[[ -e /etc/zsvrc ]] && source /etc/zsvrc
: ${zsv_svtab:=/etc/svtab}
: ${zsv_svd:=/etc/sv.d}
# autoload all zsv_ functions
local -a func_files hook_funcs
local f
func_files=( $^fpath/zsv_*(N) )
for f in $func_files ; do
if ! [[ -r "$f" ]]; then
print -r >&2 - "$f is not readable"
continue
fi
autoload -Uz ${f:t}
[[ $f:t == zsv_hook_* ]] && hook_funcs+=( $f:t )
done
# run all zsv_hook_* functions (after all zsv_* functions were autoloaded)
for f in $hook_funcs; do
$f
done
if ! (($+commands[zsv.run])); then
# try to find zsv.run executable by emulating login shell
for SRC in /etc/zsh/zprofile ${ZDOTDIR:-${HOME}}/.z{shenv,profile,login}; do
[[ -e $SRC ]] && source $SRC
done
rehash
if ! (($+commands[zsv.run])); then
path+=$0:a:h
rehash
if ! (($+commands[zsv.run])); then
print -r >&2 'could not find zsv.run executable'
exit 1
fi
fi
fi
(($+functions[zsv_post_hooks])) && zsv_post_hooks
[[ -n $zsv_dir ]] && zsv_setdirs
# vim: ft=zsh noet ts=4 sts=4 sw=4