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

402 lines
10 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"
# 检查neovim版本
check_neovim() {
log_info "检查Neovim是否已安装..."
if ! command -v nvim &> /dev/null; then
log_error "Neovim未安装请先运行 neovim.sh"
exit 1
fi
# 检查版本是否 >= 0.10.0
local nvim_version=$(nvim --version | head -n1 | cut -d ' ' -f2)
if [ "$(echo -e "${nvim_version}\n0.10.0" | sort -V | head -n1)" != "0.10.0" ]; then
log_error "Neovim版本必须 >= 0.10.0,当前版本: ${nvim_version}"
log_info "正在安装最新版本的Neovim..."
# 下载最新版本的Neovim
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim-linux-x86_64.tar.gz
# 删除旧的安装
sudo rm -rf /opt/nvim
# 解压到/opt目录
sudo tar -C /opt -xzf nvim-linux-x86_64.tar.gz
# 删除下载的压缩包
rm nvim-linux-linux-x86_64.tar.gz
# 创建符号链接
sudo ln -sf /opt/nvim-linux-x86_64/bin/nvim /usr/local/bin/nvim
# 重新检查版本
nvim_version=$(nvim --version | head -n1 | cut -d ' ' -f2)
if [ "$(echo -e "${nvim_version}\n0.10.0" | sort -V | head -n1)" != "0.10.0" ]; then
log_error "Neovim版本仍然不满足要求尝试从源码编译安装..."
# 安装编译依赖
sudo apt-get install -y ninja-build gettext cmake unzip curl
# 克隆源码
git clone https://github.com/neovim/neovim
cd neovim
# 编译安装
make CMAKE_BUILD_TYPE=Release
sudo make install
# 返回上级目录
cd ..
# 删除源码
rm -rf neovim
# 再次检查版本
nvim_version=$(nvim --version | head -n1 | cut -d ' ' -f2)
if [ "$(echo -e "${nvim_version}\n0.10.0" | sort -V | head -n1)" != "0.10.0" ]; then
log_error "Neovim版本仍然不满足要求请手动安装最新版本"
exit 1
fi
fi
fi
log_success "Neovim版本检查通过: ${nvim_version}"
}
# 备份现有配置
backup_config() {
log_info "备份现有配置..."
# 检查是否存在配置目录
if [ -d "${USER_HOME}/.config/nvim" ]; then
# 创建备份目录
local backup_dir="${USER_HOME}/.config/nvim.backup.$(date +%Y%m%d_%H%M%S)"
log_info "备份原配置到: $backup_dir"
# 移动现有配置到备份目录
mv "${USER_HOME}/.config/nvim" "$backup_dir"
fi
# 确保删除所有可能存在的缓存和配置
log_info "清理旧配置和缓存..."
rm -rf "${USER_HOME}/.config/nvim"
rm -rf "${USER_HOME}/.local/share/nvim"
rm -rf "${USER_HOME}/.cache/nvim"
rm -rf "${USER_HOME}/.local/state/nvim"
rm -rf "${USER_HOME}/.local/share/lazy"
rm -rf "${USER_HOME}/.local/share/nvim"
rm -rf "${USER_HOME}/.local/state/nvim"
rm -rf "${USER_HOME}/.cache/nvim"
# 确保目录存在且权限正确
mkdir -p "${USER_HOME}/.config/nvim"
chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim"
}
# 安装NvChad
install_nvchad() {
log_info "安装NvChad..."
# 确保目录存在且权限正确
sudo mkdir -p "${USER_HOME}/.config/nvim"
sudo chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim"
# 使用当前用户克隆starter仓库
su - $CURRENT_USER -c "git clone https://github.com/NvChad/starter ${USER_HOME}/.config/nvim"
# 删除.git文件夹
rm -rf "${USER_HOME}/.config/nvim/.git"
# 确保目录权限正确
sudo chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim"
if [ $? -eq 0 ]; then
log_success "NvChad安装成功"
else
log_error "NvChad安装失败"
exit 1
fi
}
# 配置NvChad
configure_nvchad() {
log_info "配置NvChad..."
# 创建自定义配置目录
su - $CURRENT_USER -c "mkdir -p ${USER_HOME}/.config/nvim/lua/custom/configs"
# 创建自定义chadrc.lua
cat > "${USER_HOME}/.config/nvim/lua/custom/chadrc.lua" << 'EOF'
---@type ChadrcConfig
local M = {}
-- UI配置
M.ui = {
theme = 'catppuccin',
transparency = false,
-- 性能优化相关设置
statusline = {
theme = "minimal", -- minimal主题性能更好
separator_style = "default",
overriden_modules = nil,
},
-- 延迟加载文件树
nvdash = {
load_on_startup = false,
},
-- 禁用不必要的图标
hl_override = {
Comment = { italic = false },
},
}
-- 插件配置
M.plugins = "custom.plugins"
-- 映射配置
M.mappings = require "custom.mappings"
return M
EOF
# 创建插件配置文件
cat > "${USER_HOME}/.config/nvim/lua/custom/plugins.lua" << 'EOF'
local plugins = {
{
"nvim-treesitter/nvim-treesitter",
opts = {
ensure_installed = { "lua", "vim", "bash" }, -- 只安装最基础的语言支持
sync_install = false, -- 异步安装
auto_install = false, -- 禁用自动安装
highlight = {
enable = true,
disable = function(_, buf)
local max_filesize = 100 * 1024 -- 100 KB
local ok, stats = pcall(vim.loop.fs_stat, vim.api.nvim_buf_get_name(buf))
if ok and stats and stats.size > max_filesize then
return true
end
end,
additional_vim_regex_highlighting = false,
},
},
},
{
"williamboman/mason.nvim",
opts = {
ensure_installed = {}, -- 按需安装LSP
PATH = "skip",
ui = {
border = "none",
icons = {
package_installed = "✓",
package_pending = "➜",
package_uninstalled = "✗"
},
keymaps = {
toggle_server_expand = "<CR>",
install_server = "i",
update_server = "u",
check_server_version = "c",
update_all_servers = "U",
check_outdated_servers = "C",
uninstall_server = "X",
cancel_installation = "<C-c>",
},
},
},
},
{
"nvim-telescope/telescope.nvim",
opts = function()
local conf = require "plugins.configs.telescope"
conf.defaults.file_ignore_patterns = {
"node_modules",
"build",
"dist",
"yarn.lock",
".git",
}
conf.defaults.vimgrep_arguments = {
"rg",
"--color=never",
"--no-heading",
"--with-filename",
"--line-number",
"--column",
"--smart-case",
"--hidden",
}
conf.pickers = {
find_files = {
find_command = { "fd", "--type", "f", "--strip-cwd-prefix" }
},
}
return conf
end,
},
}
return plugins
EOF
# 创建按键映射配置文件
cat > "${USER_HOME}/.config/nvim/lua/custom/mappings.lua" << 'EOF'
local M = {}
M.general = {
n = {
["<leader>ff"] = { "<cmd> Telescope find_files <cr>", "查找文件" },
["<leader>fg"] = { "<cmd> Telescope live_grep <cr>", "全局搜索" },
["<leader>fb"] = { "<cmd> Telescope buffers <cr>", "查找缓冲区" },
["<leader>fh"] = { "<cmd> Telescope help_tags <cr>", "帮助标签" },
},
}
return M
EOF
# 创建性能优化配置文件
cat > "${USER_HOME}/.config/nvim/lua/custom/configs/performance.lua" << 'EOF'
local M = {}
-- 性能优化设置
M.setup = function()
-- 禁用一些内置的vim插件
local disabled_built_ins = {
"2html_plugin",
"getscript",
"getscriptPlugin",
"gzip",
"logipat",
"netrw",
"netrwPlugin",
"netrwSettings",
"netrwFileHandlers",
"matchit",
"tar",
"tarPlugin",
"rrhelper",
"spellfile_plugin",
"vimball",
"vimballPlugin",
"zip",
"zipPlugin",
"tutor",
"rplugin",
"syntax",
"synmenu",
"optwin",
"compiler",
"bugreport",
"ftplugin",
}
for _, plugin in pairs(disabled_built_ins) do
vim.g["loaded_" .. plugin] = 1
end
-- 设置python主机
vim.g.python3_host_prog = vim.fn.exepath('python3')
vim.g.loaded_python_provider = 0
-- 优化启动时间
vim.loader.enable()
-- UI性能优化
vim.opt.lazyredraw = true
vim.opt.shadafile = "NONE"
vim.opt.updatetime = 300
vim.opt.timeoutlen = 500
vim.opt.redrawtime = 1500
vim.opt.synmaxcol = 200
vim.opt.laststatus = 2
-- 禁用一些不必要的状态更新
vim.opt.ruler = false
vim.opt.showcmd = false
-- 使用新的正则引擎
vim.opt.regexpengine = 1
-- 设置更快的macro执行
vim.opt.maxmapdepth = 1000
-- 优化滚动性能
vim.opt.scrolljump = 5
-- 优化文件打开性能
vim.opt.hidden = true
end
return M
EOF
# 设置权限
chown -R $CURRENT_USER:$CURRENT_USER "${USER_HOME}/.config/nvim"
}
# 检查并安装依赖
install_base_dependencies() {
log_info "检查并安装依赖..."
# 安装基础依赖
local dependencies=(
"git"
"ripgrep"
"gcc"
"make"
)
for dep in "${dependencies[@]}"; do
if ! command -v $dep &> /dev/null; then
log_info "安装 $dep..."
apt-get install -y $dep
else
log_info "$dep 已安装"
fi
done
}
# 主函数
main() {
# 检查root权限
check_root
# 获取用户信息
get_user_info
# 检查neovim版本
check_neovim
# 检查并安装依赖
install_base_dependencies
# 备份现有配置
backup_config
# 安装NvChad
install_nvchad
# 配置NvChad
configure_nvchad
log_success "NvChad安装完成"
log_info "请按照以下步骤完成配置:"
log_info "1. 运行 nvim 启动编辑器"
log_info "2. 等待 lazy.nvim 完成插件下载"
log_info "3. 运行 :MasonInstallAll 命令安装所有工具"
log_info "4. 使用 :h nvui 学习 UI 和 base46 的自定义配置"
log_info "5. 确保终端字体设置为 'JetBrainsMono Nerd Font'不要选择带Mono后缀的版本"
}
# 执行主函数
main