#!/bin/bash # ============================================================================ # 文件名: install_oh_my_zsh.sh # 描述: 安装和配置 Oh My Zsh 及常用插件 # 作者: Cloud Tools Project # 版本: 2.0.0 # ============================================================================ set -euo pipefail # 获取脚本目录 readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" # 加载公共库 source "${PROJECT_ROOT}/common/logging.sh" source "${PROJECT_ROOT}/common/error_handler.sh" # 配置路径 readonly INSTALL_DIR="${HOME}/.oh-my-zsh" readonly ZSH_CONFIG="${HOME}/.zshrc" readonly ZSH_CUSTOM="${INSTALL_DIR}/custom" # # 检查并安装缺失的软件包 # # 参数: # $@ - 要检查的软件包列表 # check_and_install_packages() { local packages=("$@") local missing_packages=() for package in "${packages[@]}"; do if ! check_command "$package"; then missing_packages+=("$package") fi done if [[ ${#missing_packages[@]} -gt 0 ]]; then log_warning "缺少以下软件包: ${missing_packages[*]}" if command -v apt-get &>/dev/null; then run_command "安装软件包" apt-get update run_command "安装软件包" apt-get install -y "${missing_packages[@]}" else log_error "只支持 apt-get 包管理器" exit 1 fi fi log_success "所有软件包已安装" } # # 安装 Oh My Zsh # install_zsh() { log_info "安装 zsh..." run_command "更新软件包" sudo apt update run_command "安装 zsh" sudo apt install zsh -y sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" } # # 主函数 # main() { log_info "============ Oh My Zsh 安装程序 ============" check_and_install_packages "sudo" "git" "curl" "zsh" if [ ! -d "$INSTALL_DIR" ]; then install_zsh else log_success "oh-my-zsh 已安装" fi # 安装插件 if [ ! -d "$ZSH_CUSTOM/plugins/zsh-autosuggestions" ]; then log_info "安装 zsh-autosuggestions..." run_command "克隆插件" git clone https://github.com/zsh-users/zsh-autosuggestions "$ZSH_CUSTOM/plugins/zsh-autosuggestions" fi if [ ! -d "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" ]; then log_info "安装 zsh-syntax-highlighting..." run_command "克隆插件" git clone https://github.com/zsh-users/zsh-syntax-highlighting.git "$ZSH_CUSTOM/plugins/zsh-syntax-highlighting" fi log_success "安装完成" # 配置 .zshrc log_info "修改 .zshrc 文件..." cp "$ZSH_CONFIG" "$ZSH_CONFIG.bak" sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting extract)/' "$ZSH_CONFIG" sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="random"/' "$ZSH_CONFIG" log_success "配置完成" # 设置默认 shell log_info "设置 zsh 为默认 shell..." chsh -s /bin/zsh log_success "设置完成" log_info "重启 zsh..." zsh } # 执行主函数 main "$@"