cffd456556
and rename previous to git. Tools allow for different install and update scripts. The git tool does what the previous implementation did (installs and updates using the git client). The new tool installs and updates with the GitHub API, not using the git client, but using curl/wget and tar instead. Closes #373
171 lines
6.4 KiB
Plaintext
171 lines
6.4 KiB
Plaintext
zmodule() {
|
|
local -r zusage="Usage: %B${0}%b <url> [%B-n%b|%B--name%b <module_name>] [options]
|
|
|
|
Add %Bzmodule%b calls to your %B${ZDOTDIR:-${HOME}}/.zimrc%b file to define the modules to be initialized.
|
|
The modules are initialized in the same order they are defined.
|
|
|
|
<url> Module absolute path or repository URL. The following URL formats
|
|
are equivalent: %Bname%b, %Bzimfw/name%b, %Bhttps://github.com/zimfw/name.git%b.
|
|
%B-n%b|%B--name%b <module_name> Set a custom module name. Default: the last component in the <url>.
|
|
|
|
Repository options:
|
|
%B-b%b|%B--branch%b <branch_name> Use specified branch when installing and updating the module.
|
|
Overrides the tag option. Default: the repository's default branch.
|
|
%B-t%b|%B--tag%b <tag_name> Use specified tag when installing and updating the module.
|
|
Overrides the branch option.
|
|
%B-u%b|%B--use%b <%%Bgit%b|%Bdegit%b> Install and update the module using the defined tool. Default: %Bgit%b
|
|
|
|
Initialization options:
|
|
%B-f%b|%B--fpath%b <path> Add specified path to fpath. The path is relative to the module
|
|
root directory. Default: %Bfunctions%b, if the subdirectory exists.
|
|
%B-a%b|%B--autoload%b <func_name> Autoload specified function. Default: all valid names inside the
|
|
module's specified fpath paths.
|
|
%B-s%b|%B--source%b <file_path> Source specified file. The file path is relative to the module root
|
|
directory. Default: %Binit.zsh%b, if the %Bfunctions%b subdirectory also
|
|
exists, or the file with largest size matching
|
|
%B{init.zsh,module_name.{zsh,plugin.zsh,zsh-theme,sh}}%b, if any exist.
|
|
%B-c%b|%B--cmd%b <command> Execute specified command. Occurrences of the %B{}%b placeholder in the
|
|
command are substituted by the module root directory path.
|
|
%B-s 'script.zsh'%b and %B-c 'source {}/script.zsh'%b are equivalent.
|
|
%B-d%b|%B--disabled%b Don't initialize or uninstall the module.
|
|
"
|
|
if [[ ${${funcfiletrace[1]%:*}:t} != .zimrc ]]; then
|
|
print -u2 -PR "%F{red}${0}: Must be called from %B<%= home %>/.zimrc%b%f"$'\n\n'${zusage}
|
|
return 2
|
|
fi
|
|
if (( ! # )); then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}: Missing zmodule url%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
fi
|
|
setopt LOCAL_OPTIONS CASE_GLOB EXTENDED_GLOB
|
|
local ztool=git
|
|
local zmodule=${1:t} zurl=${1}
|
|
local ztype zrev
|
|
local -i zdisabled=0 zfrozen=0
|
|
local -a zfpaths zfunctions zcmds
|
|
local zarg zdir
|
|
if [[ ${zurl} =~ ^[^:/]+: ]]; then
|
|
zmodule=${zmodule%.git}
|
|
elif [[ ${zurl} != /* ]]; then
|
|
# Count number of slashes
|
|
case ${#zurl//[^\/]/} in
|
|
0) zurl="https://github.com/zimfw/${zurl}.git" ;;
|
|
1) zurl="https://github.com/${zurl}.git" ;;
|
|
esac
|
|
fi
|
|
shift
|
|
if [[ ${1} == (-n|--name) ]]; then
|
|
if (( # < 2 )); then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Missing argument for zmodule option ${1}%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
fi
|
|
shift
|
|
zmodule=${1}
|
|
shift
|
|
fi
|
|
if [[ ${zurl} == /* ]]; then
|
|
zdir=${zurl}
|
|
else
|
|
zdir=${ZIM_HOME}/modules/${zmodule}
|
|
fi
|
|
while (( # > 0 )); do
|
|
case ${1} in
|
|
-b|--branch|-t|--tag|-u|--use|-f|--fpath|-a|--autoload|-s|--source|-c|--cmd)
|
|
if (( # < 2 )); then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Missing argument for zmodule option ${1}%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
fi
|
|
;;
|
|
esac
|
|
case ${1} in
|
|
-b|--branch)
|
|
shift
|
|
ztype=branch
|
|
zrev=${1}
|
|
;;
|
|
-t|--tag)
|
|
shift
|
|
ztype=tag
|
|
zrev=${1}
|
|
;;
|
|
-u|--use)
|
|
shift
|
|
ztool=${1}
|
|
;;
|
|
-z|--frozen) zfrozen=1 ;;
|
|
-f|--fpath)
|
|
shift
|
|
zarg=${1}
|
|
if [[ ${zarg} != /* ]] zarg=${zdir}/${zarg}
|
|
zfpaths+=(${zarg})
|
|
;;
|
|
-a|--autoload)
|
|
shift
|
|
zfunctions+=(${1})
|
|
;;
|
|
-s|--source)
|
|
shift
|
|
zarg=${1}
|
|
if [[ ${zarg} != /* ]] zarg=${zdir}/${zarg}
|
|
zcmds+=("source ${zarg:A}")
|
|
;;
|
|
-c|--cmd)
|
|
shift
|
|
zcmds+=(${1//{}/${zdir:A}})
|
|
;;
|
|
-d|--disabled) zdisabled=1 ;;
|
|
*)
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Unknown zmodule option ${1}%f"$'\n\n'${zusage}
|
|
_zfailed=1
|
|
return 2
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
if [[ -n ${_zargs_action} ]]; then
|
|
if (( ! zfrozen )); then
|
|
_zmodules_zargs+=("${ztool}" "${_zargs_action}" "${zmodule}" "${zdir}" "${zurl}" "${ztype}" "${zrev}")
|
|
fi
|
|
else
|
|
if (( zdisabled )); then
|
|
_zdisableds+=(${zmodule})
|
|
else
|
|
if [[ ! -d ${zdir} ]]; then
|
|
print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}:%B${zmodule}:%b Not installed. Run %Bzimfw install%b to install.%f"
|
|
_zfailed=1
|
|
return 1
|
|
fi
|
|
local -ra prezto_fpaths=(${zdir}/functions(NF))
|
|
local -ra prezto_scripts=(${zdir}/init.zsh(N))
|
|
if (( ! ${#zfpaths} && ! ${#zcmds} && ${#prezto_fpaths} && ${#prezto_scripts} )); then
|
|
# this follows the prezto module format, no need to check for other scripts
|
|
zfpaths=(${prezto_fpaths})
|
|
zcmds=("source ${^prezto_scripts[@]:A}")
|
|
else
|
|
if (( ! ${#zfpaths} )) zfpaths=(${prezto_fpaths})
|
|
if (( ! ${#zcmds} )); then
|
|
# get script with largest size (descending `O`rder by `L`ength, and return only `[1]` first)
|
|
local -r zscript=(${zdir}/(init.zsh|${zmodule:t}.(zsh|plugin.zsh|zsh-theme|sh))(NOL[1]))
|
|
zcmds=("source ${^zscript[@]:A}")
|
|
fi
|
|
fi
|
|
if (( ! ${#zfunctions} )); then
|
|
# _* functions are autoloaded by compinit
|
|
# prompt_*_setup functions are autoloaded by promptinit
|
|
zfunctions=(${^zfpaths}/^(*~|*.zwc(|.old)|_*|prompt_*_setup)(N-.:t))
|
|
fi
|
|
if (( ! ${#zfpaths} && ! ${#zfunctions} && ! ${#zcmds} )); then
|
|
print -u2 -PR "%F{yellow}<%= warn %>${funcfiletrace[1]}:%B${zmodule}:%b Nothing found to be initialized. Customize the module name or initialization with %Bzmodule%b options.%f"$'\n\n'${zusage}
|
|
fi
|
|
_zmodules+=(${zmodule})
|
|
_zdirs+=(${zdir})
|
|
_zfpaths+=(${zfpaths})
|
|
_zfunctions+=(${zfunctions})
|
|
_zcmds+=(${zcmds})
|
|
fi
|
|
fi
|
|
}
|