#!/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" [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