Mars 6ddba3e722 Initial commit
feat: 完成 Zsh 插件配置脚本的优化和测试 - 修复 autojump 配置冲突 - 清理重复的插件安装 - 优化脚本结构和注释

feat: 优化shell脚本 - 1. 增强错误处理和恢复机制 2. 添加网络连接优化和镜像源支持 3. 改进进度显示和用户交互 4. 优化配置文件管理和备份 5. 改进插件管理机制 6. 增强依赖检查和安装 7. 添加完整的日志记录功能 8. 修复字体安装相关问题

docs: 完善shell、system和utils部分的README文档 - 1. 添加详细的脚本说明和使用方法 2. 补充依赖要求和注意事项 3. 添加常见问题解答 4. 更新版本日志

feat(editor): 优化 neovim 和 nvchad 安装脚本,添加性能优化配置和详细文档

feat: 优化Python开发环境安装脚本,分离基础包和机器学习包,修复virtualenvwrapper配置

feat: 优化开发工具安装脚本,统一使用common.sh中的函数,改进错误处理

fix: 修复DNMP安装脚本,跳过自动配置PHP开发环境

fix: 提交删除的 init.sh 和 mysql.sh 文件
2025-03-25 16:14:03 +08:00

189 lines
4.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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