zmodule() { local -r zusage="Usage: %B${0}%b [%B-n%b|%B--name%b ] [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. Required repository URL or path. The following formats are equivalent: %Bname%b, %Bzimfw/name%b, %Bhttps://github.com/zimfw/name.git%b. %B-n%b|%B--name%b Set a custom module name. Default: the last component in the . Repository options: %B-b%b|%B--branch%b Use specified branch when installing and updating the module. Overrides the tag option. Default: %Bmaster%b. %B-t%b|%B--tag%b Use specified tag when installing and updating the module. Overrides the branch option. %B-z%b|%B--frozen%b Don't install or update the module. Initialization options: %B-f%b|%B--fpath%b 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 Autoload specified function. Default: all valid names inside the module's specified fpath paths. %B-s%b|%B--source%b Source specified file. The file path is relative to the module root directory. Default: the file with largest size matching %B{init.zsh,module_name.{zsh,plugin.zsh,zsh-theme,sh}}%b, if any exist. %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 1 fi if (( ! # )); then print -u2 -PR "%F{red}<%= error %>${funcfiletrace[1]}: Missing zmodule url%f"$'\n\n'${zusage} _zfailed=1 return 1 fi setopt LOCAL_OPTIONS CASE_GLOB EXTENDED_GLOB local zmodule=${1:t} zurl=${1} local ztype=branch zrev=master local -i zdisabled=0 zfrozen=0 local -a zfpaths zfunctions zscripts local zarg 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 1 fi shift zmodule=${1} shift fi local -r zdir=${ZIM_HOME}/modules/${zmodule} while (( # > 0 )); do case ${1} in -b|--branch|-t|--tag|-f|--fpath|-a|--autoload|-s|--source) 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 1 fi ;; esac case ${1} in -b|--branch) shift ztype=branch zrev=${1} ;; -t|--tag) shift ztype=tag zrev=${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} zscripts+=(${zarg}) ;; -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 1 ;; esac shift done if (( _zprepare_zargs )); then if (( ! zfrozen )); then _zmodules_zargs+=(${zmodule} ${zdir} ${zurl} ${ztype} ${zrev} ${_zprintlevel}) 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 if (( ! ${#zfpaths} )) zfpaths+=(${zdir}/functions(NF)) 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 (( ! ${#zscripts} )); then zscripts+=(${zdir}/(init.zsh|${zmodule:t}.(zsh|plugin.zsh|zsh-theme|sh))(NOL[1])) fi if (( ! ${#zfpaths} && ! ${#zfunctions} && ! ${#zscripts} )); 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 _zfpaths+=(${zfpaths}) _zfunctions+=(${zfunctions}) _zscripts+=(${zscripts}) _zmodules+=(${zmodule}) fi fi }