@@ -6,44 +6,66 @@ set -euo pipefail
# - 不使用 chezmoi 的 .tmpl 模板语法;通过运行时检测 apt/pacman/dnf。
# - 脚本尽量保持幂等(包已安装会自动跳过)。
SUDO = ""
if [ " $( id -u) " -ne 0 ] ; then
if command -v sudo >/dev/null 2>& 1; then
SUDO = "sudo"
# 包管理器配置
PACKAGE_LIST = "zoxide exa bat fd fd-find ripgrep btop tldr fzf git vim tmux fish fastfetch thefuck"
declare -A UPDATE_COMMAND
declare -A INSTALL_COMMAND
UPDATE_COMMAND = (
[ pacman] = "pacman -Syu --noconfirm"
[ apt] = "apt update"
[ dnf] = "dnf makecache -y"
)
INSTALL_COMMAND = (
[ pacman] = "pacman -S --noconfirm"
[ apt] = "apt install -y"
[ dnf] = "dnf install -y"
)
# 输出函数
log( ) { echo -e " \033[34m $1 \033[0m " ; }
# 检查 sudo 权限(假设普通用户运行)
if ! command -v sudo >/dev/null 2>& 1; then
log "❌ 需要sudo 权限才能安装包。"
exit 1
fi
SUDO = "sudo"
# 安装单个包函数
install_package( ) {
local install_cmd = " $1 "
local package = " $2 "
if $SUDO $install_cmd " $package " ; then
log " ✨ 安装 $package : ✓ 成功 "
else
echo "需要 sudo 权限才能安装包(当前非 root, 且找不到 sudo) 。" >& 2
exit 1
log " ⚠️ 安装 $package : ✗ 跳过 "
fi
fi
}
# 安装包函数
install_packages( ) {
local package_manager = " $1 "
log " 🔍 检测到 $package_manager ,开始安装包... "
log "📦 更新包..."
$SUDO ${ UPDATE_COMMAND [ $package_manager ] }
log "🚀 开始安装包..."
for package in $PACKAGE_LIST ; do
install_package " ${ INSTALL_COMMAND [ $package_manager ] } " " $package "
done
log " ✅ $package_manager 包安装完成! "
}
# 主逻辑:检测包管理器并安装
if command -v pacman >/dev/null 2>& 1; then
echo "检测到 pacman, 开始安装 Arch/Manjaro 包... "
echo "更新系统包..."
$SUDO pacman -Syu --noconfirm
echo "安装 Bash 常用命令增强/替代工具..."
$SUDO pacman -S --noconfirm zoxide exa bat fd ripgrep btop tldr fzf
echo "安装其他常用工具..."
$SUDO pacman -S --noconfirm git vim tmux fish fastfetch thefuck
echo "Arch/Manjaro 包安装完成!"
install_packages "pacman "
elif command -v apt >/dev/null 2>& 1; then
echo "检测到 apt, 开始安装 Debian/Ubuntu 包... "
echo "更新包索引..."
$SUDO apt update -y || true
echo "安装 Bash 常用命令增强/替代工具..."
$SUDO apt install -y zoxide exa bat fd-find ripgrep btop tldr fzf
echo "安装其他常用工具..."
$SUDO apt install -y git vim tmux fish fastfetch thefuck
echo "Debian/Ubuntu 包安装完成!"
install_packages "apt "
elif command -v dnf >/dev/null 2>& 1; then
echo "检测到 dnf, 开始安装 Fedora 包... "
echo "更新包元数据..."
$SUDO dnf makecache -y || true
echo "安装 Bash 常用命令增强/替代工具..."
$SUDO dnf install -y zoxide exa bat fd-find ripgrep btop tldr fzf
echo "安装其他常用工具..."
$SUDO dnf install -y git vim tmux fish fastfetch thefuck
echo "Fedora 包安装完成!"
install_packages "dnf "
else
echo "未检测到 apt / pacman / dnf, 跳过安装。" >& 2
log "❌ 未检测到 apt / pacman / dnf, 跳过安装。"
fi