git.fiddlerwoaroof.com
Raw Blame History
# -*- mode: sh; sh-shell: zsh;-*-
# set -x
# zmodload zsh/zprof

if [[ "$TERM" == "dumb" ]]; then
    unsetopt zle
    unsetopt prompt_cr
    unsetopt prompt_subst
    unfunction precmd
    unfunction preexec
    PS1='$ '
else
  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")})
    if [[ -z $depends ]]; then
      script_depends[$1]=-
    fi
    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] && "$depend" != "-" ]]; then
          loaded_depends[$depend]=1
          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
      else
      fi
    done
  }

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

  if [[ -f ~/zshrc.depends ]]; then
    source ~/zshrc.depends
  fi

  unset __ETC_PROFILE_NIX_SOURCED
  for x in $init_scripts; do
    if ! [[ -f ~/zshrc.depends ]]; then
      build_depends "$x"
    fi
    load_depends "$x"
    source "$x"
  done

  if ! [[ -f ~/zshrc.depends ]]; then
    echo "script_depends=(${(kv)script_depends})" >| ~/zshrc.depends
  fi
fi