git.fiddlerwoaroof.com
Raw Blame History
# -*- mode: sh; sh-shell: zsh;-*-
#zmodload zsh/zprof
PLUGIN_DIR="${PLUGIN_DIR:-$HOME/.zsh.d}"

local script_depends loaded_depends
typeset -A script_depends
typeset -A loaded_depends
get_depends() {
  awk -F: '$0=="###" || $1 != "#" { exit } $1="depends-on" {print $3}' "$1"
}

build_depends() {
  local -a depends
  depends=(${(@f)$(get_depends "$1")})
  for depend in $depends; do
    script_depends[$1]+="$depend:"
  done
}

load_depends() {
  for depend in ${(s<:>)script_depends[$1]}; do
    if [[ -z $loaded_depends[$depend] ]]; then
      local fn="$PLUGIN_DIR/dependencies/$depend.zsh"
      if [[ -f $fn ]]; then
        if [[ -z $script_depends[$fn] ]]; then
          build_depends "$fn"
        fi
        load_depends "$fn"
        source $fn
      else
        echo "$fn missing for $1"
      fi
      loaded_depends[$depend]=1
    else
    fi
  done
}

init_scripts=( $PLUGIN_DIR/*.{,z}sh(N) ) 

PATH="<<<:$PATH:>>>"
for x in $init_scripts; do
  build_depends "$x"
  load_depends "$x"
  source "$x"
done