Files
hexdots/install-pkg.sh
2026-07-07 13:24:21 +07:00

67 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repo_root=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
official_file="$repo_root/packages-official.txt"
aur_file="$repo_root/packages-aur.txt"
install_official=true
install_aur=true
for arg in "$@"; do
case "$arg" in
--official-only)
install_official=true
install_aur=false
;;
--aur-only)
install_official=false
install_aur=true
;;
--help|-h)
cat <<'EOF'
Usage: ./install-pkg.sh [--official-only | --aur-only]
Installs packages listed in:
- packages-official.txt via pacman
- packages-aur.txt via yay or paru
EOF
exit 0
;;
*)
printf 'Unknown argument: %s\n' "$arg" >&2
exit 1
;;
esac
done
read_packages() {
local file=$1
mapfile -t packages < <(grep -vE '^\s*($|#)' "$file")
}
if [[ "$install_official" == true ]]; then
read_packages "$official_file"
if (( ${#packages[@]} > 0 )); then
sudo pacman -S --needed --noconfirm -- "${packages[@]}"
fi
fi
if [[ "$install_aur" == true ]]; then
helper=
if command -v yay >/dev/null 2>&1; then
helper=yay
elif command -v paru >/dev/null 2>&1; then
helper=paru
else
printf 'AUR helper not found. Install yay or paru first.\n' >&2
exit 1
fi
read_packages "$aur_file"
if (( ${#packages[@]} > 0 )); then
"$helper" -S --needed --noconfirm -- "${packages[@]}"
fi
fi