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

215 lines
5.6 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"
# 安装 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