AurManager/aurinstall
grayTerminal-sh 589116d516 first commit
2026-05-18 14:44:43 +02:00

124 lines
3.3 KiB
Bash
Executable file

#!/bin/bash
set -euo pipefail
AUR_DIR="$HOME/Aur"
EDITOR_CMD="${EDITOR:-nvim}"
ASK_EDIT=0
FORCE_EDIT=0
DOWNLOAD_ONLY=0
while getopts ":eEd" opt; do
case "$opt" in
e) ASK_EDIT=1 ;;
E) FORCE_EDIT=1 ;;
d) DOWNLOAD_ONLY=1 ;;
*)
echo "Usage: aurinstall [-e|-E] [-d] <paquet1> [paquet2 ...]"
exit 1
;;
esac
done
shift $((OPTIND - 1))
RESET='\033[0m'
BOLD='\033[1m'
RED='\033[1;31m'
GREEN='\033[1;32m'
YELLOW='\033[1;33m'
BLUE='\033[1;34m'
CYAN='\033[1;36m'
info() { printf "${BLUE}==>${RESET} %s\n" "$1"; }
ok() { printf "${GREEN}==>${RESET} %s\n" "$1"; }
warn() { printf "${YELLOW}==>${RESET} %s\n" "$1"; }
error() { printf "${RED}==>${RESET} %s\n" "$1"; }
section() { printf "\n${CYAN}${BOLD}>>> %s${RESET}\n" "$1"; }
if [[ $# -lt 1 ]]; then
error "Usage: aurinstall [-e|-E] [-d] <paquet1> [paquet2 ...]"
exit 1
fi
mkdir -p "$AUR_DIR"
if [[ "$DOWNLOAD_ONLY" -eq 0 ]]; then
sudo -v || exit 1
while true; do
sudo -n true || exit
sleep 30
done 2>/dev/null &
SUDO_LOOP_PID=$!
trap 'kill "$SUDO_LOOP_PID" 2>/dev/null' EXIT INT TERM
fi
for pkg in "$@" ; do
section "$pkg"
cd "$AUR_DIR" || exit 1
if [[ "$DOWNLOAD_ONLY" -eq 0 ]] && pacman -Q "$pkg" >/dev/null 2>&1; then
warn "$pkg est déjà installé, on passe."
continue
fi
if [[ -d "$pkg/.git" ]]; then
warn "$pkg déjà cloné, utilisation du dossier existant"
cd "$pkg" || { error "Impossible d'entrer dans $pkg"; continue; }
pull_output=$(git pull --ff-only 2>&1) || {
error "git pull failed pour $pkg"
cd "$AUR_DIR" || exit 1
continue
}
printf "%s\n" "$pull_output"
else
info "Clonage de $pkg"
if ! git clone "https://aur.archlinux.org/${pkg}.git"; then
error "Impossible de cloner $pkg"
continue
fi
cd "$pkg" || { error "Impossible d'entrer dans $pkg"; continue; }
fi
if [[ "$FORCE_EDIT" -eq 1 ]]; then
info "Ouverture de PKGBUILD et .SRCINFO dans $EDITOR_CMD"
"$EDITOR_CMD" PKGBUILD .SRCINFO
elif [[ "$ASK_EDIT" -eq 1 || "$DOWNLOAD_ONLY" -eq 1 ]]; then
printf "${YELLOW}Éditer PKGBUILD/.SRCINFO pour %s ? [y/N] ${RESET}" "$pkg"
read -r ans
if [[ "$ans" == "y" || "$ans" == "Y" ]]; then
"$EDITOR_CMD" PKGBUILD .SRCINFO
fi
fi
if [[ "$DOWNLOAD_ONLY" -eq 1 ]]; then
ok "$pkg prêt pour audit dans $AUR_DIR/$pkg"
continue
fi
info "Vérifie au minimum source=(), checksums, prepare()/build()/package() et validpgpkeys si présents"
rm -f ./*.pkg.tar ./*.pkg.tar.*
if ! makepkg -sf; then
error "Build failed pour $pkg"
cd "$AUR_DIR" || exit 1
continue
fi
pkgfile=$(find . -maxdepth 1 -type f \( -name '*.pkg.tar' -o -name '*.pkg.tar.*' \) ! -name '*.sig' | head -n1 || true)
echo "DEBUG: pkgfile='$pkgfile'"
if [[ -z "$pkgfile" ]]; then
error "Aucun paquet généré pour $pkg"
cd "$AUR_DIR" || exit 1
continue
fi
info "Installation de $pkgfile"
if ! sudo pacman -U --noconfirm "$pkgfile"; then
error "Install failed pour $pkg"
cd "$AUR_DIR" || exit 1
continue
fi
ok "$pkg installé avec succès"
done