title: How to improve load time of zsh in babun on windows?
body: <p>I love ZSH shell and its themes but it is very slow. It takes 7 to 10 seconds to load. I also use it as a integrated terminal in VS Code even though it's slow to load. Here is a copy of my <code>.zshrc</code> file.</p>
  
  <pre><code># Path to your oh-my-zsh installation.
  export ZSH=$HOME/.oh-my-zsh
  export PS1="[%* - %D] %d %% "
  
  
  # Set name of the theme to load. 
  # Look in ~/.oh-my-zsh/themes/
  # Optionally, if you set this to "random", it'll load a random theme each
  # time that oh-my-zsh is loaded.
  ZSH_THEME="agnoster"
  DEFAULT_USER=13000
  
  # Uncomment the following line to use case-sensitive completion.
  # CASE_SENSITIVE="true"
  
  # Uncomment the following line to use hyphen-insensitive completion. Case
  # sensitive completion must be off. _ and - will be interchangeable.
  # HYPHEN_INSENSITIVE="true"
  
  # Uncomment the following line to disable bi-weekly auto-update checks.
  # DISABLE_AUTO_UPDATE="true"
  
  # Uncomment the following line to change how often to auto-update (in days).
  # export UPDATE_ZSH_DAYS=13
  
  # Uncomment the following line to disable colors in ls.
  # DISABLE_LS_COLORS="true"
  
  # Uncomment the following line to disable auto-setting terminal title.
  # DISABLE_AUTO_TITLE="true"
  
  # Uncomment the following line to enable command auto-correction.
  # ENABLE_CORRECTION="true"
  
  # Uncomment the following line to display red dots whilst waiting for 
    completion.
  # COMPLETION_WAITING_DOTS="true"
  
  # Uncomment the following line if you want to disable marking untracked 
    files
  # under VCS as dirty. This makes repository status check for large 
    repositories
  # much, much faster.
  # DISABLE_UNTRACKED_FILES_DIRTY="true"
  
  # Uncomment the following line if you want to change the command execution 
    time
  # stamp shown in the history command output.
  # The optional three formats: "mm/dd/yyyy"|"dd.mm.yyyy"|"yyyy-mm-dd"
  # HIST_STAMPS="mm/dd/yyyy"
  
  # Would you like to use another custom folder than $ZSH/custom?
  # ZSH_CUSTOM=/path/to/new-custom-folder
  
  # Which plugins would you like to load? (plugins can be found in ~/.oh-my-
    zsh/plugins/*)
  # Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
  # Example format: plugins=(rails git textmate ruby lighthouse)
  # Add wisely, as too many plugins slow down shell startup.
    plugins=(git)
  
  # User configuration
  
  export PATH=$HOME/bin:/usr/local/bin:$PATH
  # export MANPATH="/usr/local/man:$MANPATH"
  
  source $ZSH/oh-my-zsh.sh
  
  
  # You may need to manually set your language environment
  # export LANG=en_US.UTF-8
  
  # Preferred editor for local and remote sessions
  # if [[ -n $SSH_CONNECTION ]]; then
  #   export EDITOR='vim'
  # else
  #   export EDITOR='mvim'
  # fi
  
  # Compilation flags
  # export ARCHFLAGS="-arch x86_64"
  
  # ssh
  # export SSH_KEY_PATH="~/.ssh/dsa_id"
  
  # Set personal aliases, overriding those provided by oh-my-zsh libs,
  # plugins, and themes. Aliases can be placed here, though oh-my-zsh
  # users are encouraged to define aliases within the ZSH_CUSTOM folder.
  # For a full list of active aliases, run `alias`.
  #
  # Example aliases
  # alias zshconfig="mate ~/.zshrc"
  # alias ohmyzsh="mate ~/.oh-my-zsh"
  
  prompt_dir() {
    prompt_segment blue black "${PWD##*/}"
  }
  </code></pre>
  
  <p>EDIT :: I found 2 <code>oh-my-zsh.sh</code> file in my cygwin directory so here are the both of them.</p>
  
  <p><code>First one</code></p>
  
  <pre><code># Check for updates on initial load...
  if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then
    env ZSH=$ZSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT zsh -f 
  $ZSH/tools/check_for_upgrade.sh
  fi
  
  # Initializes Oh My Zsh
  
  # add a function path
  fpath=($ZSH/functions $ZSH/completions $fpath)
  
  # Load all stock functions (from $fpath files) called below.
  autoload -U compaudit compinit
  
  : ${ZSH_DISABLE_COMPFIX:=true}
  
  # Set ZSH_CUSTOM to the path where your custom config files
  # and plugins exists, or else we will use the default custom/
  if [[ -z "$ZSH_CUSTOM" ]]; then
      ZSH_CUSTOM="$ZSH/custom"
  fi
  
  # Set ZSH_CACHE_DIR to the path where cache files should be created
  # or else we will use the default cache/
  if [[ -z "$ZSH_CACHE_DIR" ]]; then
    ZSH_CACHE_DIR="$ZSH/cache"
  fi
  
  
  # Load all of the config files in ~/oh-my-zsh that end in .zsh
  # TIP: Add files you don't want in git to .gitignore
  for config_file ($ZSH/lib/*.zsh); do
    custom_config_file="${ZSH_CUSTOM}/lib/${config_file:t}"
    [ -f "${custom_config_file}" ] &amp;&amp; config_file=${custom_config_file}
    source $config_file
  done
  
  
  is_plugin() {
    local base_dir=$1
    local name=$2
    test -f $base_dir/plugins/$name/$name.plugin.zsh \
      || test -f $base_dir/plugins/$name/_$name
  }
  # Add all defined plugins to fpath. This must be done
  # before running compinit.
  for plugin ($plugins); do
    if is_plugin $ZSH_CUSTOM $plugin; then
  fpath=($ZSH_CUSTOM/plugins/$plugin $fpath)
    elif is_plugin $ZSH $plugin; then
      fpath=($ZSH/plugins/$plugin $fpath)
    fi
  done
  
  # Figure out the SHORT hostname
  if [[ "$OSTYPE" = darwin* ]]; then
    # macOS's $HOST changes with dhcp, etc. Use ComputerName if possible.
    SHORT_HOST=$(scutil --get ComputerName 2&gt;/dev/null) || 
  SHORT_HOST=${HOST/.*/}
  else
    SHORT_HOST=${HOST/.*/}
  fi
  
  # Save the location of the current completion dump file.
  if [ -z "$ZSH_COMPDUMP" ]; then
    ZSH_COMPDUMP="${ZDOTDIR:-${HOME}}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
  fi
  
  if [[ $ZSH_DISABLE_COMPFIX != true ]]; then
    # If completion insecurities exist, warn the user without enabling 
  completions.
    if ! compaudit &amp;&gt;/dev/null; then
      # This function resides in the "lib/compfix.zsh" script sourced above.
      handle_completion_insecurities
    # Else, enable and cache completions to the desired file.
    else
      compinit -d "${ZSH_COMPDUMP}"
    fi
  else
    compinit -i -d "${ZSH_COMPDUMP}"
  fi
  
  # Load all of the plugins that were defined in ~/.zshrc
  for plugin ($plugins); do
    if [ -f $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh ]; then
      source $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh
    elif [ -f $ZSH/plugins/$plugin/$plugin.plugin.zsh ]; then
      source $ZSH/plugins/$plugin/$plugin.plugin.zsh
    fi
  done
  
  # Load all of your custom configurations from custom/
  for config_file ($ZSH_CUSTOM/*.zsh(N)); do
    source $config_file
  done
  unset config_file
  
  # Load the theme
  if [ "$ZSH_THEME" = "random" ]; then
    themes=($ZSH/themes/*zsh-theme)
    N=${#themes[@]}
    ((N=(RANDOM%N)+1))
    RANDOM_THEME=${themes[$N]}
    source "$RANDOM_THEME"
    echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
  else
    if [ ! "$ZSH_THEME" = ""  ]; then
      if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then
        source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
      elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]; then
        source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme"
      else
        source "$ZSH/themes/$ZSH_THEME.zsh-theme"
      fi
    fi
  fi
  </code></pre>
  
  <p><code>The second one is</code></p>
  
  <pre><code># Check for updates on initial load...
  if [ "$DISABLE_AUTO_UPDATE" != "true" ]; then
    env ZSH=$ZSH DISABLE_UPDATE_PROMPT=$DISABLE_UPDATE_PROMPT zsh -f 
  $ZSH/tools/check_for_upgrade.sh
  fi
  
  # Initializes Oh My Zsh
  
  # add a function path
  fpath=($ZSH/functions $ZSH/completions $fpath)
  
  # Set ZSH_CUSTOM to the path where your custom config files
  # and plugins exists, or else we will use the default custom/
  if [[ -z "$ZSH_CUSTOM" ]]; then
      ZSH_CUSTOM="$ZSH/custom"
  fi
  
  # Set ZSH_CACHE_DIR to the path where cache files should be created
  # or else we will use the default cache/
  if [[ -z "$ZSH_CACHE_DIR" ]]; then
    ZSH_CACHE_DIR="$ZSH/cache/"
  fi
  
  
  # Load all of the config files in ~/oh-my-zsh that end in .zsh
  # TIP: Add files you don't want in git to .gitignore
  for config_file ($ZSH/lib/*.zsh); do
    custom_config_file="${ZSH_CUSTOM}/lib/${config_file:t}"
    [ -f "${custom_config_file}" ] &amp;&amp; config_file=${custom_config_file}
    source $config_file
  done
  
  # Load all of your custom configurations from custom/
  for config_file ($ZSH_CUSTOM/*.zsh(N)); do
    source $config_file
  done
  unset config_file
  
  is_plugin() {
    local base_dir=$1
    local name=$2
    test -f $base_dir/plugins/$name/$name.plugin.zsh \
      || test -f $base_dir/plugins/$name/_$name
  }
  # Add all defined plugins to fpath. This must be done
  # before running compinit.
  for plugin ($plugins); do
    if is_plugin $ZSH_CUSTOM $plugin; then
      fpath=($ZSH_CUSTOM/plugins/$plugin $fpath)
    elif is_plugin $ZSH $plugin; then
      fpath=($ZSH/plugins/$plugin $fpath)
    fi
  done
  
  # Figure out the SHORT hostname
  if [[ "$OSTYPE" = darwin* ]]; then
    # OS X's $HOST changes with dhcp, etc. Use ComputerName if possible.
    SHORT_HOST=$(scutil --get ComputerName 2&gt;/dev/null) || 
  SHORT_HOST=${HOST/.*/}
  else
    SHORT_HOST=${HOST/.*/}
  fi
  
  # Save the location of the current completion dump file.
  if [ -z "$ZSH_COMPDUMP" ]; then
    ZSH_COMPDUMP="${ZDOTDIR:-${HOME}}/.zcompdump-${SHORT_HOST}-${ZSH_VERSION}"
  fi
  
  # Load and run compinit
  autoload -U compinit
  compinit -i -d "${ZSH_COMPDUMP}"
  
  # Load all of the plugins that were defined in ~/.zshrc
  for plugin ($plugins); do
    if [ -f $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh ]; then
      source $ZSH_CUSTOM/plugins/$plugin/$plugin.plugin.zsh
    elif [ -f $ZSH/plugins/$plugin/$plugin.plugin.zsh ]; then
      source $ZSH/plugins/$plugin/$plugin.plugin.zsh
    fi
  done
  
  # Load the theme
  if [ "$ZSH_THEME" = "random" ]; then
    themes=($ZSH/themes/*zsh-theme)
    N=${#themes[@]}
    ((N=(RANDOM%N)+1))
    RANDOM_THEME=${themes[$N]}
    source "$RANDOM_THEME"
    echo "[oh-my-zsh] Random theme '$RANDOM_THEME' loaded..."
  else
    if [ ! "$ZSH_THEME" = ""  ]; then
      if [ -f "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme" ]; then
        source "$ZSH_CUSTOM/$ZSH_THEME.zsh-theme"
      elif [ -f "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme" ]; then
        source "$ZSH_CUSTOM/themes/$ZSH_THEME.zsh-theme"
      else
        source "$ZSH/themes/$ZSH_THEME.zsh-theme"
      fi
    fi
  fi
  </code></pre>
  
  <p>Do not mind the long post :D.   </p>