From b62b482989091d82f857def7f2346ebf55bb4642 Mon Sep 17 00:00:00 2001 From: Jakob Guddas Date: Tue, 12 Jun 2018 14:44:00 +0200 Subject: [PATCH] added support for external modules --- init.zsh | 39 ++++++++++++++++++++++++--------------- tools/zim_install | 22 ++++++++++++++++++++++ tools/zim_update | 23 +++++++++++++++++++++++ 3 files changed, 69 insertions(+), 15 deletions(-) create mode 100644 tools/zim_install diff --git a/init.zsh b/init.zsh index 3de17fd..04c07a6 100755 --- a/init.zsh +++ b/init.zsh @@ -20,15 +20,25 @@ else bindkey -e fi +# Map modules to dirs +for zmodule in ${zmodules}; do + dir=${${${zmodule%/}%.git}##*/} + if [ -d ${ZIM_HOME}/modules/${dir} ]; then + zmodule_dirs+=(${dir}) + else + print "No such module \"${zmodule}\", run \"zmanage install\" to install missing modules" >&2 + fi +done + # Autoload module functions () { local mod_function setopt LOCAL_OPTIONS EXTENDED_GLOB # autoload searches fpath for function locations; add enabled module function paths - fpath=(${ZIM_HOME}/modules/${^zmodules}/functions(/FN) ${fpath}) + fpath=(${ZIM_HOME}/modules/${^zmodule_dirs}/functions(/FN) ${fpath}) - for mod_function in ${ZIM_HOME}/modules/${^zmodules}/functions/^(_*|prompt_*_setup|*.*)(-.N:t); do + for mod_function in ${ZIM_HOME}/modules/${^zmodule_dirs}/functions/^(_*|prompt_*_setup|*.*)(-.N:t); do autoload -Uz ${mod_function} done } @@ -37,26 +47,23 @@ fi () { local zmodule zmodule_dir zmodule_file - for zmodule in ${zmodules}; do + for zmodule in ${zmodule_dirs}; do zmodule_dir=${ZIM_HOME}/modules/${zmodule} - if [[ ! -d ${zmodule_dir} ]]; then - print "No such module \"${zmodule}\"." >&2 - else - for zmodule_file in ${zmodule_dir}/init.zsh \ - ${zmodule_dir}/{,zsh-}${zmodule}.{zsh,plugin.zsh,zsh-theme,sh}; do - if [[ -f ${zmodule_file} ]]; then - source ${zmodule_file} - break - fi - done - fi + for zmodule_file in ${zmodule_dir}/init.zsh \ + ${zmodule_dir}/{,zsh-}${zmodule}.{zsh,plugin.zsh,zsh-theme,sh}; do + if [[ -f ${zmodule_file} ]]; then + source ${zmodule_file} + break + fi + done done } zmanage() { local usage="zmanage [action] Actions: - update Fetch and merge upstream zim commits if possible + install Install zmodules + update Update zim and zmodules info Print zim and system info issue Create a template for reporting an issue clean-cache Clean the zim cache @@ -72,6 +79,8 @@ Actions: fi case ${1} in + install) zsh ${ZIM_HOME}/tools/zim_install + ;; update) zsh ${ZIM_HOME}/tools/zim_update ;; info) zsh ${ZIM_HOME}/tools/zim_info diff --git a/tools/zim_install b/tools/zim_install new file mode 100644 index 0000000..5fb5268 --- /dev/null +++ b/tools/zim_install @@ -0,0 +1,22 @@ +# Source user configuration +[[ -s ${ZDOTDIR:-${HOME}}/.zimrc ]] && source ${ZDOTDIR:-${HOME}}/.zimrc + +# Install Modules +mkdir -p ${ZIM_HOME}/modules +for zmodule in ${zmodules}; do + dir=$ZIM_HOME/modules/${${${zmodule%/}%.git}##*/} + if [ -d ${dir} ]; then + print "${zmodule} is already installed" + else + arr=("${(@s|/|)${zmodule%/}}") + if [ ${#arr} = 1 ]; then + repo="https://github.com/zimfw/${zmodule}" + elif [ ${#arr} = 2 ]; then + repo="https://github.com/${zmodule}" + else + repo=${zmodule} + fi + GIT_ASKPASS=/bin/echo git clone --recursive ${repo} ${dir} 2> /dev/null \ + && print "${zmodule} got installed" || print "${repo} could not be installed" + fi +done diff --git a/tools/zim_update b/tools/zim_update index 38c9e38..5f064d6 100644 --- a/tools/zim_update +++ b/tools/zim_update @@ -9,3 +9,26 @@ git remote update -p git merge --ff-only @\{u\} # and update the submodules git submodule update --init --recursive + +# Source user configuration +[[ -s ${ZDOTDIR:-${HOME}}/.zimrc ]] && source ${ZDOTDIR:-${HOME}}/.zimrc + +# Update zmodules +for zmodule in ${zmodules}; do + dir=${${${zmodule%/}%.git}##*/} + if [ -d ${ZIM_HOME}/modules/${dir} ]; then + + echo "\nUpdating ${zmodule} module." + cd ${ZIM_HOME}/modules/${dir} + + # update the modules repository + git remote update -p + git merge --ff-only @\{u\} + + # and update the submodules + git submodule update --init --recursive + + else + print "No such module \"${zmodule}\", run \"zmanage install\" to install missing modules" >&2 + fi +done