diff --git a/templates/zshrc.zsh-template b/templates/zshrc.zsh-template index 4a998c2fc..7cb87078c 100644 --- a/templates/zshrc.zsh-template +++ b/templates/zshrc.zsh-template @@ -23,14 +23,12 @@ ZSH_THEME="robbyrussell" # 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 automatically update without prompting. -# DISABLE_UPDATE_PROMPT="true" +# Uncomment the following lines to change the auto-update behavior +# zstyle ':omz:update' mode disabled # disable automatic updates +# zstyle ':omz:update' mode auto # update automatically without asking # Uncomment the following line to change how often to auto-update (in days). -# export UPDATE_ZSH_DAYS=13 +# zstyle ':omz:update' frequency 13 # Uncomment the following line if pasting URLs and other text is messed up. # DISABLE_MAGIC_FUNCTIONS="true" diff --git a/tools/check_for_upgrade.sh b/tools/check_for_upgrade.sh index e87da3487..fa832ffac 100644 --- a/tools/check_for_upgrade.sh +++ b/tools/check_for_upgrade.sh @@ -3,17 +3,30 @@ if [[ -f ~/.zsh-update && ! -f "${ZSH_CACHE_DIR}/.zsh-update" ]]; then mv ~/.zsh-update "${ZSH_CACHE_DIR}/.zsh-update" fi +# Get user's update preferences +# +# Supported update modes: +# - prompt (default): the user is asked before updating when it's time to update +# - auto: the update is performed automatically when it's time +# - reminder: a reminder is shown to the user when it's time to update +# - disabled: automatic update is turned off +zstyle -s ':omz:update' mode update_mode || update_mode=prompt + +# Support old-style settings +[[ "$DISABLE_UPDATE_PROMPT" != true ]] || update_mode=auto +[[ "$DISABLE_AUTO_UPDATE" != true ]] || update_mode=disabled + # Cancel update if: # - the automatic update is disabled. # - the current user doesn't have write permissions nor owns the $ZSH directory. # - git is unavailable on the system. -if [[ "$DISABLE_AUTO_UPDATE" = true ]] \ +if [[ "$update_mode" = disabled ]] \ || [[ ! -w "$ZSH" || ! -O "$ZSH" ]] \ || ! command -v git &>/dev/null; then + unset update_mode return fi - function current_epoch() { zmodload zsh/datetime echo $(( EPOCHSECONDS / 60 / 60 / 24 )) @@ -56,7 +69,6 @@ function update_ohmyzsh() { # the shell actually exits what it's running. trap " ret=\$? - unset -f current_epoch update_last_updated_file update_ohmyzsh 2>/dev/null command rm -rf '$ZSH/log/update.lock' return \$ret " EXIT INT QUIT @@ -68,14 +80,14 @@ function update_ohmyzsh() { fi # Number of days before trying to update again - epoch_target=${UPDATE_ZSH_DAYS:-13} + zstyle -s ':omz:update' frequency epoch_target || epoch_target=${UPDATE_ZSH_DAYS:-13} # Test if enough time has passed until the next update if (( ( $(current_epoch) - $LAST_EPOCH ) < $epoch_target )); then return fi - # Ask for confirmation before updating unless disabled - if [[ "$DISABLE_UPDATE_PROMPT" = true ]]; then + # Ask for confirmation before updating unless in auto mode + if [[ "$update_mode" = auto ]]; then update_ohmyzsh else # input sink to swallow all characters typed before the prompt @@ -92,3 +104,6 @@ function update_ohmyzsh() { esac fi } + +unset update_mode +unset -f current_epoch update_last_updated_file update_ohmyzsh