#!/bin/bash # 导入公共函数 source "$(dirname "$0")/../utils/common.sh" # 设置错误时立即退出 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查是否为root用户 if [ "$EUID" -ne 0 ]; then log_error "请使用root权限运行此脚本" exit 1 fi # 获取当前用户名 CURRENT_USER=$SUDO_USER if [ -z "$CURRENT_USER" ]; then CURRENT_USER=$(who | awk '{print $1}' | head -n1) fi # 设置用户主目录 USER_HOME="/home/$CURRENT_USER" ZSH_CUSTOM="${USER_HOME}/.oh-my-zsh/custom" # 检查 Oh My Zsh 是否已安装 check_oh_my_zsh() { if [ ! -d "${USER_HOME}/.oh-my-zsh" ]; then log_error "Oh My Zsh 未安装,请先运行 zsh.sh" exit 1 fi } # 安装autojump install_autojump() { show_progress "安装 autojump" ensure_package "autojump" # 确保 autojump 数据目录存在 ensure_dir "/usr/share/autojump" "root:root" ensure_dir "${USER_HOME}/.local/share/autojump" "$CURRENT_USER:$CURRENT_USER" update_progress "安装 autojump" "完成" } # 安装fzf install_fzf() { show_progress "安装 fzf" ensure_package "fzf" update_progress "安装 fzf" "完成" } # 安装zsh-nvm install_zsh_nvm() { show_progress "安装 zsh-nvm" local nvm_dir="${ZSH_CUSTOM}/plugins/zsh-nvm" local nvm_url="https://github.com/lukechilds/zsh-nvm" manage_plugin "zsh-nvm" "$nvm_dir" "$nvm_url" } # 安装pyenv install_pyenv() { show_progress "安装 pyenv" if [ ! -d "${USER_HOME}/.pyenv" ]; then local install_url="https://pyenv.run" local temp_script="/tmp/pyenv_installer.sh" if download_file "$install_url" "$temp_script"; then su - $CURRENT_USER -c "bash $temp_script" rm -f "$temp_script" update_progress "安装 pyenv" "完成" else update_progress "安装 pyenv" "失败" return 1 fi else update_progress "安装 pyenv" "已存在" fi } # 配置插件 configure_plugins() { show_progress "配置插件" # 备份现有配置 manage_config "backup" "${USER_HOME}/.zshrc" # 添加 autojump 配置 cat >> "${USER_HOME}/.zshrc" << 'EOF' # autojump配置 if [ -f /usr/share/autojump/autojump.zsh ]; then . /usr/share/autojump/autojump.zsh fi EOF # 添加 fzf 配置 cat >> "${USER_HOME}/.zshrc" << 'EOF' # fzf配置 if [ -f ~/.fzf.zsh ]; then source ~/.fzf.zsh fi export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border' export FZF_DEFAULT_COMMAND='find . -type f' export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" export FZF_CTRL_T_OPTS="--preview 'cat {}'" export FZF_CTRL_R_OPTS="--preview 'echo {}' --preview-window down:3:hidden:wrap --bind '?:toggle-preview'" export FZF_ALT_C_OPTS="--preview 'tree -C {} | head -200'" EOF # 添加 pyenv 配置 cat >> "${USER_HOME}/.zshrc" << 'EOF' # pyenv配置 export PYENV_ROOT="$HOME/.pyenv" command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)" EOF # 更新插件列表 local zshrc="${USER_HOME}/.zshrc" sed -i '/^plugins=(/,/^)/ c\plugins=(\n git\n docker\n docker-compose\n npm\n node\n python\n pip\n zsh-autosuggestions\n zsh-syntax-highlighting\n autojump\n fzf\n zsh-nvm\n)' "$zshrc" update_progress "配置插件" "完成" } # 主函数 main() { # 检查root权限 check_root # 获取用户信息 get_user_info # 设置日志 setup_logging # 设置 ZSH_CUSTOM 变量 ZSH_CUSTOM="${USER_HOME}/.oh-my-zsh/custom" # 检查 Oh My Zsh check_oh_my_zsh # 检查依赖 check_dependencies "git" "curl" "wget" "zsh" "sudo" # 安装插件 install_autojump install_fzf install_zsh_nvm install_pyenv # 配置插件 configure_plugins # 设置权限 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}/.pyenv update_progress "设置权限" "完成" log_success "Zsh插件安装完成!" log_info "请运行以下命令使配置生效:" log_info "source ~/.zshrc" } # 执行主函数 main