记一次mac终端启动慢,针对zshrc配置文件的优化

1,242 阅读1分钟

配置主要优化几个部分:

  • 统一PATH 环境变量,其中包括多个路径,可能会导致查找路径变长,从而耗费一定时间。
  • 设置一些配置,包括禁止自动更新 Homebrew 软件包、关闭 Python HTTPS 证书验证等。
  • 封装各个组件,对加载比较慢的组件使用懒加载的方式加载,主要针对nvm的懒加载,nvm直接加载终端启动非常耗时

zshrc配置如下:

# 约束 PATH 环境变量
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:"
# 设置 JAVA_HOME
export JAVA_HOME=$(/usr/libexec/java_home)
# 设置一些配置
function _set_common_config {
    source "$HOME/.oh-my-zsh/oh-my-zsh.sh"
    export HOMEBREW_NO_AUTO_UPDATE=true
    export PYTHONHTTPSVERIFY=0
}

# 设置多个 JDK 版本 设置 jenv
function _set_jdk_version_and_jenv {
    export PATH="/usr/local/opt/openjdk@8/bin:/usr/local/opt/openjdk@17/bin:/usr/local/opt/openjdk/bin:$PATH"
    export PATH="$HOME/.jenv/bin:$PATH"
    eval "$(jenv init -)"
}
# 加载 Maven 环境变量
_setup_maven() {
    export MAVEN_HOME="/usr/local/Cellar/maven/3.9.2"
    export PATH="$MAVEN_HOME/bin:$PATH"
}

# 设置默认用户和 Homebrew 镜像源
function _set_default_user_brew_domain {
    export DEFAULT_USER="$(whoami)"
    export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/"
}

# 设置主题和插件
function _set_zsh_theme_plugins {
    ZSH_THEME="af-magic"
    plugins=(git fzf autojump zsh-autosuggestions zsh-syntax-highlighting web-search git-open)
    source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
    ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=6'
    source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
}

# 设置自动跳转目录
function _set_autojump {
    [[ -s $(brew --prefix)/etc/profile.d/autojump.sh ]] && . $(brew --prefix)/etc/profile.d/autojump.sh
}

# 设置 web-search
function _set_web_search {
    ZSH_WEB_SEARCH_ENGINES=(
        gg "https://www.google.com/search?q="
        bd "https://www.baidu.com/s?wd="
        gh "https://github.com/search?q="
    )
}

# 加载 Docker 相关脚本
function _load_docker_scripts {
    source "$HOME/.docker/init-zsh.sh" || true
}

# 加载 starship
_setup_starship() {
    eval "$(starship init zsh)"
}

# 设置 Node.js 环境变量
_setup_node() {
    export PATH="/usr/local/opt/node@18/bin:$PATH"
}

# 开始同步加载============================================================
_sync() {
    _set_autojump
    _setup_starship
    _set_common_config
    _set_zsh_theme_plugins
    _setup_maven
    _load_docker_scripts
    _set_web_search
    _set_default_user_brew_domain
    _set_jdk_version_and_jenv
}
[[ "$PS1" ]] && _sync
# 同步加载结束============================================================

# 开始懒加载设置=========================================================
_setup_nvm() {
    export NVM_DIR="$HOME/.nvm"
    [ -s "/usr/local/opt/nvm/nvm.sh" ] && \. "/usr/local/opt/nvm/nvm.sh"
    [ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && \. "/usr/local/opt/nvm/etc/bash_completion.d/nvm"
}
nvm() {
    command nvm "$@" || {
        echo "nvm命令不存在, 正在自动加载nvm相关配置"
        echo "加载完成,正在执行nvm "$@""
        echo "\n"
        _setup_nvm
        nvm "$@"
    }
}
npm() {
    command npm "$@" || {
        echo "npm命令不存在, 正在自动加载npm相关配置"
        echo "加载完成,正在执行npm "$@""
        echo "\n"
        _setup_nvm
        npm "$@"
    }
}

# 设置自定义别名
function _set_aliases {
    alias idea='/Users/kuangbendewoniu/Documents/idea-mac/macjihuo2022/mac.sh | pbcopy'
    alias wx='nohup /Applications/WeChat.app/Contents/MacOS/WeChat > /dev/null 2>&1 &'
}

# 获取idea破解链接
idea() {
    command idea "$@" || {
        echo "idea命令不存在, 正在自动加载idea相关配置"
        echo "加载完成,idea破解链接已经加入剪切板"
        _set_aliases
        $(idea)
    }
}

# 打开微信登录界面,用于微信多开
wx() {
    command wx "$@" || {
        echo "wx命令不存在, 正在自动加载wx相关配置"
        echo "加载完成, 正在打开微信登录界面"
        _set_aliases
        $(wx)
    }
}

# 懒加载设置结束=========================================================