Files
dotfiles/run_onchange_install-packages.sh

69 lines
1.7 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.
#!/usr/bin/env bash
set -euo pipefail
# 按存在的包管理器安装依赖包。
# 说明:
# - 不使用 chezmoi 的 .tmpl 模板语法;通过运行时检测 apt/pacman/dnf。
# - 脚本尽量保持幂等(包已安装会自动跳过)。
# 包管理器配置
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 -y || true"
[dnf]="dnf makecache -y || true"
)
INSTALL_COMMAND=(
[pacman]="pacman -S --noconfirm"
[apt]="apt install -y"
[dnf]="dnf install -y"
)
# 检查 sudo 权限(假设普通用户运行)
if ! command -v sudo >/dev/null 2>&1; then
echo "需要 sudo 权限才能安装包。" >&2
exit 1
fi
SUDO="sudo"
# 安装单个包函数
install_package() {
local install_cmd="$1"
local package="$2"
if $SUDO $install_cmd "$package" >/dev/null 2>&1; then
echo "安装 $package: ✓ 成功"
else
echo "安装 $package: ✗ 跳过"
fi
}
# 安装包函数
install_packages() {
local package_manager="$1"
echo "检测到 $package_manager,开始安装包..."
echo "更新包..."
$SUDO ${UPDATE_COMMAND[$package_manager]}
echo "开始安装包..."
for package in $PACKAGE_LIST; do
install_package "${INSTALL_COMMAND[$package_manager]}" "$package"
done
echo "$package_manager 包安装完成!"
}
# 主逻辑:检测包管理器并安装
if command -v pacman >/dev/null 2>&1; then
install_packages "pacman"
elif command -v apt >/dev/null 2>&1; then
install_packages "apt"
elif command -v dnf >/dev/null 2>&1; then
install_packages "dnf"
else
echo "未检测到 apt / pacman / dnf跳过安装。" >&2
fi