180 lines
4.4 KiB
Bash
180 lines
4.4 KiB
Bash
typeset -g globaldots_path="${HOME}/.global"
|
|
if [[ -a $(realpath -m $(dirname $0)/../../.globaldir ) ]]
|
|
then
|
|
typeset -g globaldots_path=$(realpath -m $(dirname $0)/../../)
|
|
fi
|
|
|
|
if [[ -n ${GLOBALDOTS_PATH} ]]
|
|
then
|
|
typeset -g globaldots_path=${GLOBALDOTS_PATH}
|
|
fi
|
|
|
|
if [[ -z $globaldots_path ]]; then
|
|
echo 'functions require $globaldots_path to be set!'
|
|
fi
|
|
|
|
#### BASIC ZSHLIBS TOOLS
|
|
|
|
function zshlibs_update()
|
|
{
|
|
zbootstrap_message zlibs_update "preparing self update …"
|
|
if [[ -n "$zshlibs_install" ]]
|
|
then
|
|
zbootstrap_message zlibs_update "cd into '$zshlibs_install' …"
|
|
pushd $zshlibs_install 2>&1 > /dev/null
|
|
zbootstrap_message zlibs_update "git pull …"
|
|
(
|
|
git pull 2>&1 > "${HOME}/.log/z_zshlibs_update" &
|
|
)
|
|
zbootstrap_message zlibs_update "update done"
|
|
popd 2>&1 > /dev/null
|
|
else
|
|
echo "\$zshlibs_install not set!"
|
|
return 1
|
|
zlibs_install
|
|
fi
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
##### CONFIGURATION LIBRARIES
|
|
|
|
|
|
function zlibs_path_expand()
|
|
{
|
|
|
|
}
|
|
|
|
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 zconfig_loaded
|
|
if [[ ! ${zconfig_loaded[(r)${1}]} ]]
|
|
then
|
|
zbootstrap_message zbootstrap "sourcing config '$1'"
|
|
source -- $1 2>&1 >> "${HOME}/.log/z_zbootstrap.log"
|
|
zconfig_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 zshlibs_boot()
|
|
{
|
|
# ensure log directory
|
|
zbootstrap_message zbootstrap "ensure directory '${HOME}/.log/'"
|
|
ztools_ensure -d "${HOME}/.log/"
|
|
# loading configs
|
|
typeset -a -g zconfig_loaded
|
|
typeset -a -g path_extra
|
|
typeset -a -g config_extra
|
|
typeset -g zconfig_shared_path="${zshlibs_install}/config"
|
|
typeset -g zconfig_local_path="${HOME}/.config/zsh"
|
|
}
|
|
|
|
function zbootstrap_noninteractive()
|
|
{
|
|
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 ()
|
|
{
|
|
zshlibs_boot
|
|
zbootstrap_noninteractive
|
|
zconfig_checkload ${globaldots_path}/config/zsh/global.style.zsh
|
|
zshlibs_update
|
|
zbootstrap_message zbootstrap "done loading interactive config"
|
|
}
|