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 文件
189 lines
4.5 KiB
Bash
189 lines
4.5 KiB
Bash
#!/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 |