How to improve zsh boot time in windows granny?

I like the ZSH shell and its themes, but it is very slow. Download takes 7 to 10 seconds. I also use it as an integrated terminal in VS Code, even if it loads slowly. Here is a copy of my .zshrc file.

 # 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##*/}" } 

EDIT :: I found the 2 oh-my-zsh.sh file in my cygwin directory, so here they are both.

First one

 # 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}" ] && 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 $HOST changes with dhcp, etc. Use ComputerName if possible. SHORT_HOST=$(scutil --get ComputerName 2>/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 &>/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 

The second one is

 # 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}" ] && 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 $HOST changes with dhcp, etc. Use ComputerName if possible. SHORT_HOST=$(scutil --get ComputerName 2>/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 

Not against a long post: D.

+5
source share
3 answers

I installed babun on my machine under Windows 10.

Disabling bash autocompletion jobs improved my load time a bit. I renamed all my files to the extension ".bk" in the directory "bash_completion.d".

 { ~ } Β» ls -ltr /etc/bash_completion.d ~ total 68 -rwxrwx---+ 1 m.ortiz.montealegre Domain Users 998 Jun 23 2015 vim-completion.bk -rwxrwx---+ 1 m.ortiz.montealegre Domain Users 44924 Jun 23 2015 svn.bk -rwxrwx---+ 1 m.ortiz.montealegre Domain Users 1200 Jun 23 2015 gvim-completion.bk -rwxrwx---+ 1 m.ortiz.montealegre Domain Users 2609 Jun 23 2015 gsettings.bk -rwxrwx---+ 1 m.ortiz.montealegre Domain Users 1356 Jun 23 2015 gresource.bk -rwxrwx---+ 1 m.ortiz.montealegre Domain Users 935 Jun 23 2015 gdbus.bk -rwxrwx---+ 1 m.ortiz.montealegre Domain Users 1389 Jun 23 2015 gapplication.bk 

Debugging is also a good option with strace, to find out what happens when Cygwin boots up, please check the question .

EDIT:

About setting up Babun

The tool you can use to verify your installation is documented on the babun website, use babun check , maybe this will offer you some tips:

 { ~ } Β» babun check ~ Executing babun check Prompt speed [SLOW] Hint: your prompt is very slow. Check the installed 'BLODA' software. Connection check [OK] Update check [OK] Cygwin check [OK] 

I don’t know if you made any settings in your babun installation, check the ~ / .babunrc file and make sure you turn off automatic updates and startup checks (do not activate them):

 # JVM options export JAVA_OPTS="-Xms128m -Xmx256m" # Modify these lines to set your locale export LANG="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8" export LC_ALL="en_US.UTF-8" # Uncomment these lines to the set your machine default locale (and comment out the UTF-8 ones) # export LANG=$(locale -uU) # export LC_CTYPE=$(locale -uU) # export LC_ALL=$(locale -uU) # Uncomment this to disable daily auto-update & proxy checks on startup (not recommended!) # export DISABLE_CHECK_ON_STARTUP="true" # Uncomment to increase/decrease the check connection timeout # export CHECK_TIMEOUT_IN_SECS=4 # Uncomment this lines to set up your proxy # export http_proxy=http://user: password@server :port # export https_proxy=$http_proxy # export ftp_proxy=$http_proxy # export no_proxy=localhost 

About Cygwin

There are a few tweaks here and here that you could learn for Cygwin if you are not happy with debugging with Strace.

I think you should abstract away from "babun" and not forget about the built-in Cygwin, which I think is what you really want to speed up, the babun core is a Cygwin implementation with some changes:

The Babun kernel consists of pre-configured Cygwin.

+1
source

Often, long load times lead to the structure used by the shell.

$ zsh -xv which will print things loaded at runtime. You can see which plugin / process takes the most time to load and respond.

Have you also tried to clean asl files?

http://osxdaily.com/2010/05/06/speed-up-a-slow-terminal-by-clearing-log-files/

0
source

Run the zsh -xv command and see the detailed output, for example, watching TV (do not interfere with the mouse, the keys). At points, verbose output will be slower if possible, remove this plugin or check for errors. Then run source .zshrc . Again, a detailed output will begin. Launch a new shell window. You will realize that loading is getting faster.

I'm talking about the slower part of Oh-My-ZSH / ZSH. I am not a Windows user, you should exclude any Windows related issues. With Homebrew, iTerm, these minor issues are commonplace. Oh-My-ZSH with beautiful materials loads pathetically slower on a Mac with plugins, themes. Nothing new. You can search the entire Internet and you will find many Mac users and slow Oh-My-ZSH. You need to look for problems with a slow ZSH or Oh-My-ZSH rather than a slow window baboon. Mac users with Oh-My-ZSH are much more. In addition, there are GNU / Linux users.

You can read this Github discussion and this post . All corrections are performed a little faster.

Everything will provide you with general instructions, as we say, to make DISABLE_AUTO_UPDATE="true" active, the size of the ZSH history is smaller, etc. Run:

 cd ~ export HISTSIZE=2000 export HISTFILE="$HOME/.history" export SAVEHIST=$HISTSIZE setopt hist_ignore_all_dups # reload once source .zshrc # check cat .history 
0
source

Source: https://habr.com/ru/post/1268928/


All Articles