#!/bin/bash # 导入公共函数 source "$(dirname "$0")/../utils/common.sh" # 安装 Oh My Zsh install_oh_my_zsh() { show_progress "安装 Oh My Zsh" # 删除已存在的 Oh My Zsh 目录 if [ -d "${USER_HOME}/.oh-my-zsh" ]; then if confirm "检测到已存在的 Oh My Zsh 安装,是否重新安装?"; then log_info "删除已存在的 Oh My Zsh 目录..." rm -rf ${USER_HOME}/.oh-my-zsh else update_progress "安装 Oh My Zsh" "已跳过" return 0 fi fi # 获取安装脚本URL(可能使用镜像) local install_url="https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh" local mirror_url=$(get_mirror_url "$install_url" "omz") # 安装 Oh My Zsh su - $CURRENT_USER -c "curl -fsSL $mirror_url | sh -s -- --unattended" # 设置 zsh 为默认 shell show_progress "设置 zsh 为默认 shell" chsh -s $(which zsh) $CURRENT_USER update_progress "设置 zsh 为默认 shell" "完成" } # 安装主题和字体 install_theme_and_fonts() { show_progress "安装 Powerlevel10k 主题" local theme_url="https://github.com/romkatv/powerlevel10k.git" local theme_dir="${USER_HOME}/.oh-my-zsh/custom/themes/powerlevel10k" manage_plugin "powerlevel10k" "$theme_dir" "$theme_url" # 安装 MesloLGS NF 字体 local font_urls=( "https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Regular.ttf" "https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold.ttf" "https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Italic.ttf" "https://github.com/romkatv/powerlevel10k-media/raw/master/MesloLGS%20NF%20Bold%20Italic.ttf" ) show_progress "安装字体" for url in "${font_urls[@]}"; do local font_name=$(basename "$url" | sed 's/%20/ /g') install_font "$url" "$font_name" done update_progress "安装字体" "完成" } # 安装基础插件 install_base_plugins() { show_progress "安装基础插件" local plugins_dir="${USER_HOME}/.oh-my-zsh/custom/plugins" # 定义插件 local plugins=( "zsh-autosuggestions:https://github.com/zsh-users/zsh-autosuggestions" "zsh-syntax-highlighting:https://github.com/zsh-users/zsh-syntax-highlighting.git" ) # 安装每个插件 for plugin in "${plugins[@]}"; do local name="${plugin%%:*}" local url="${plugin#*:}" manage_plugin "$name" "${plugins_dir}/${name}" "$url" done update_progress "安装基础插件" "完成" } # 配置 Zsh configure_zsh() { show_progress "配置 Zsh" # 备份现有配置 manage_config "backup" "${USER_HOME}/.zshrc" # 创建新的配置文件 cat > ${USER_HOME}/.zshrc << 'EOL' # Enable Powerlevel10k instant prompt if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" fi # Path to oh-my-zsh installation export ZSH="$HOME/.oh-my-zsh" # Theme ZSH_THEME="powerlevel10k/powerlevel10k" # Plugins plugins=( git docker docker-compose npm node python pip zsh-autosuggestions zsh-syntax-highlighting ) # Source oh-my-zsh source $ZSH/oh-my-zsh.sh # User configuration export LANG=en_US.UTF-8 # 设置自动补全快捷键为逗号 bindkey ',' autosuggest-accept # 历史记录配置 HISTSIZE=10000 SAVEHIST=10000 HISTFILE=~/.zsh_history setopt SHARE_HISTORY setopt HIST_IGNORE_ALL_DUPS setopt HIST_REDUCE_BLANKS # 目录栈配置 setopt AUTO_PUSHD setopt PUSHD_IGNORE_DUPS setopt PUSHD_SILENT # 自动补全配置 autoload -Uz compinit && compinit zstyle ':completion:*' menu select zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' # To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. [[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh EOL # 添加常用别名 local aliases=( "ll:ls -la" "..:cd .." "...:cd ../.." "....:cd ../../.." "update:sudo apt-get update" "upgrade:sudo apt-get upgrade" "vi:nvim" "vim:nvim" "edit:nvim" ) for alias_pair in "${aliases[@]}"; do local name="${alias_pair%%:*}" local value="${alias_pair#*:}" add_alias "$name" "$value" "${USER_HOME}/.zshrc" done # 设置编辑器 add_env_var "EDITOR" "nvim" "${USER_HOME}/.zshrc" add_env_var "VISUAL" "nvim" "${USER_HOME}/.zshrc" update_progress "配置 Zsh" "完成" } # 主函数 main() { # 检查root权限 check_root # 获取用户信息 get_user_info # 设置日志 setup_logging # 检查依赖 check_dependencies "git" "curl" "wget" "zsh" "sudo" # 安装基础依赖 install_base_dependencies # 安装 zsh ensure_package "zsh" # 安装 Oh My Zsh install_oh_my_zsh # 安装主题和字体 install_theme_and_fonts # 安装基础插件 install_base_plugins # 配置 Zsh configure_zsh # 设置权限 show_progress "设置权限" chown -R $CURRENT_USER:$CURRENT_USER ${USER_HOME}/.oh-my-zsh chown -R $CURRENT_USER:$CURRENT_USER ${USER_HOME}/.zshrc chown -R $CURRENT_USER:$CURRENT_USER ${USER_HOME}/.local update_progress "设置权限" "完成" log_success "Zsh 环境配置完成!" log_info "请重新打开终端或运行 'source ~/.zshrc' 使配置生效" log_info "首次登录后,运行 p10k configure 来配置 Powerlevel10k 主题" } # 执行主函数 main