zshlibs/global.funcs.zsh
2021-11-10 17:41:19 +03:00

138 lines
3.6 KiB
Bash

if [[ -z $globaldots_path ]]; then
echo 'functions require $globaldots_path to be set!'
fi
function global_path_expand()
{
local bin_base=${globaldots_path}/bin
for pathnew in ${*}; do
if [[ ! ${path[(r)${pathnew}]} ]] ; then
path+=(${bin_base}/${pathnew});
fi
done;
}
function global_fpath_expand()
{
local bin_base=${globaldots_path}/bin
for pathnew in ${*}; do
if [[ ! ${fpath[(r)${pathnew}]} ]] ; then
fpath+=${bin_base}/${pathnew}
fi
done;
}
function zconfig_checkload()
{
typeset -a -g globaldots_configs_loaded
if [[ ! ${globaldots_configs_loaded[(r)${1}]} ]]
then
zbootstrap_message zbootstrap "sourcing config '$1'"
source -- $1 2>&1 >> "${HOME}/.log/z_zbootstrap.log"
globaldots_configs_loaded+=("$1")
zbootstrap_message zbootstrap "end sourcing config '$1'"
else
zbootstrap_message zbootstrap "config '$1' already loaded"
fi
}
function zconfigs_load()
{
for configfile in ${*}; do
zconfig_checkload $configfile
done
}
function zconfigs_local_load()
{
if [[ ! -a ${HOME}/.config/zsh ]]; then
mkdir -p -m 700 ${HOME}/.config/zsh
cp ${globaldots_path}/config/zsh/zshconfig.example ${HOME}/.config/zsh/local.config.zsh
fi
if [[ ! -d ${HOME}/.config/zsh ]]; then
zconfig_checkload ${HOME}/.config/zsh
else
zconfigs_load ${HOME}/.config/zsh/*.config.zsh;
fi
}
function zbootstrap_message()
{
local facility=$1
shift
echo "$(date -Ins) ${@}" >> "${HOME}/.log/z_$facility.log"
}
function ztools_ensure()
{
target=${2}
typ=${1}
if ! test -e ${target}
then
zbootstrap_message ztools_ensure "creating '${target}' ($typ) …"
case $typ in
-d)
mkdir -p ${target} \
|| zbootstrap_message ztools_ensure "unable to create directory '${target}'" \
&& return 2
;;
-f)
touch ${target} \
|| zbootstrap_message ztools_ensure "unable to create file '${target}'" \
&& return 2
esac
zbootstrap_message ztools_ensure "target '${target}' created"
elif test ${typ} ${target}
then
zbootstrap_message ztools_ensure "target '${target}' ($typ) present"
return 0
else
zbootstrap_message ztools_ensure "target '${target}' already exists and it is not a directory"
return 1
fi
}
function zbootstrap_noninteractive()
{
# ensure log directory
zbootstrap_message zbootstrap "ensure directory '${HOME}/.log/'"
ztools_ensure -d "${HOME}/.log/"
# if ! [[ -d "${HOME}/.log/" ]]
# then
# mkdir "${HOME}/.log/"
# else if [[ -e "${HOME}/.log/" ]]
# then
# zbootstrap_message zbootstrap "zbootstrap logdir '${HOME}/.log/' exist and is not a directory"
# fi
# fi
# loading configs
typeset -a -g globaldots_configs_loaded
typeset -a -g path_extra
typeset -a -g config_extra
zbootstrap_message zbootstrap 'load global config'
zconfig_checkload ${globaldots_path}/config/zsh/global.config.zsh
zbootstrap_message zbootstrap 'load local configs'
zconfigs_local_load
for zconfig in $config_extra; do
zbootstrap_message zbootstrap 'load config extra $zconfig'
zconfig_checkload ${globaldots_path}/config/zsh/${zconfig}.config.zsh
done
# expanding settings
zbootstrap_message zbootstrap "expanding path with '$path_extra'"
global_path_expand $path_extra
zbootstrap_message zbootstrap "expanding fpath with '$fpath_extra'"
global_fpath_expand vanilla
zbootstrap_message zbootstrap "done loading noninteractive config"
}
function zbootstrap ()
{
zbootstrap_noninteractive
zconfig_checkload ${globaldots_path}/config/zsh/global.style.zsh
zbootstrap_message zbootstrap "done loading interactive config"
}