Files
debian_gaming_deployment_tool/install_gaming.sh
Phiippe Favre 074f90b280 Remplace les messages de succès individuels par un récapitulatif final
- Supprime les 26 dialogues "Succès application installée" individuels
- Ajoute un système de suivi des applications installées (tableaux INSTALLED_APPS et INSTALLATION_MESSAGES)
- Crée une fonction show_installation_summary() qui affiche un récapitulatif consolidé
- Évite les validations multiples et économise du temps utilisateur
- Affiche le nombre d'applications installées, temps économisé et notes importantes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-27 05:26:56 +02:00

2771 lines
105 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Debian Gaming Deployment Tool
# Copyright (C) 2025 Philippe Favre
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
# Debian Gaming Deployment Tool - Script d'installation gaming avec interface graphique pour Debian
# Permet à l'utilisateur de choisir quoi installer via une fenêtre
# Configuration des logs d'erreur
LOG_FILE="./gaming_installer_$(date +%Y%m%d_%H%M%S).log"
# Variable globale pour stocker le mot de passe sudo
GLOBAL_SUDO_PASSWORD=""
# Variables pour l'installation groupée
BATCH_INSTALL_MODE=false
BATCH_TOTAL_APPS=0
BATCH_CURRENT_APP=0
# Tableau pour stocker les applications installées avec succès
INSTALLED_APPS=()
INSTALLATION_MESSAGES=()
# Initialiser le fichier de log
initialize_log() {
# Vérifier les permissions d'écriture sur le répertoire
if [ ! -w "$(dirname "$LOG_FILE")" ]; then
echo "ERREUR: Pas de permission d'écriture sur $(dirname "$LOG_FILE")" >&2
return 1
fi
# Créer le fichier de log avec du contenu initial
{
echo "=== Debian Gaming Deployment Tool Log - Démarré le $(date) ==="
echo "Fichier de log: $LOG_FILE"
echo "Utilisateur: $(whoami)"
echo "Répertoire de travail: $(pwd)"
echo ""
} > "$LOG_FILE"
# Forcer l'écriture sur le disque
sync
# Vérifier que le fichier a été créé avec du contenu
if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then
echo "Log initialisé avec succès: $LOG_FILE ($(wc -c < "$LOG_FILE") octets)" >&2
return 0
else
echo "ERREUR: Échec de l'initialisation du log: $LOG_FILE" >&2
echo "Permissions du répertoire: $(ls -ld "$(dirname "$LOG_FILE")")" >&2
return 1
fi
}
# Configuration des timeouts pour éviter les boucles infinies
TIMEOUT_DOWNLOAD=300 # 5 minutes pour les téléchargements
TIMEOUT_INSTALL=600 # 10 minutes pour les installations
TIMEOUT_APT=180 # 3 minutes pour les commandes apt
# Fonction pour afficher les logs en cas d'erreur
show_error_logs() {
local error_message="$1"
local show_logs="${2:-true}"
# D'abord afficher l'erreur, puis demander si l'utilisateur veut voir les logs
zenity --error --title="Erreur" --text="$error_message"
if [ "$show_logs" = "true" ] && [ -f "$LOG_FILE" ]; then
if zenity --question --title="Voir les logs" --text="Voulez-vous consulter les logs d'erreur pour plus de détails ?"; then
# Vérifier si le fichier de log existe et contient des données
if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then
# Afficher les logs dans une fenêtre scrollable avec le contenu complet
zenity --text-info \
--title="Logs d'erreur - $error_message" \
--filename="$LOG_FILE" \
--width=800 --height=550 \
--no-wrap
else
# Informations de débogage pour le fichier de log
local log_info=""
if [ ! -f "$LOG_FILE" ]; then
log_info="Le fichier de log n'existe pas."
elif [ ! -s "$LOG_FILE" ]; then
log_info="Le fichier de log existe mais est vide."
else
log_info="Problème inconnu avec le fichier de log."
fi
log_info="$log_info\n\nFichier de log : $LOG_FILE"
log_info="$log_info\nTaille du fichier : $(ls -la "$LOG_FILE" 2>/dev/null || echo "N/A")"
zenity --info --title="Logs vides" --text="$log_info"
fi
fi
fi
}
# Fonction pour afficher le récapitulatif des installations
show_installation_summary() {
if [ ${#INSTALLED_APPS[@]} -eq 0 ]; then
zenity --warning --title="Aucune installation" --text="Aucune application n'a été installée."
return
fi
local summary_text="=== RÉCAPITULATIF DES INSTALLATIONS ===\n\n"
summary_text+="${#INSTALLED_APPS[@]} application(s) installée(s) avec succès :\n\n"
for i in "${!INSTALLED_APPS[@]}"; do
summary_text+="${INSTALLED_APPS[$i]}\n"
done
# Ajout d'informations sur le temps estimé économisé
local time_saved=$((${#INSTALLED_APPS[@]} * 30)) # 30 secondes par dialogue évité
if [ $time_saved -gt 60 ]; then
local minutes=$((time_saved / 60))
summary_text+="\n⏱ Temps économisé : environ ${minutes} minute(s)\n"
fi
# Ajout des notes importantes si certaines apps sont installées
if [[ " ${INSTALLED_APPS[*]} " =~ " Flatpak + Flathub " ]]; then
summary_text+="\n📝 Note : Redémarrage de session recommandé pour Flatpak\n"
fi
if [[ " ${INSTALLED_APPS[*]} " =~ " Drivers NVIDIA " ]]; then
summary_text+="\n🔄 Important : Redémarrage système requis pour les drivers NVIDIA\n"
fi
zenity --info --title="Installation terminée" --text="$summary_text" --width=500
}
# Fonction de logging
log_error() {
# S'assurer que le fichier de log existe
if [ ! -f "$LOG_FILE" ]; then
initialize_log
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERREUR: $1" >> "$LOG_FILE"
# S'assurer que le fichier est synchronisé
sync
}
log_info() {
# S'assurer que le fichier de log existe
if [ ! -f "$LOG_FILE" ]; then
initialize_log
fi
echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1" >> "$LOG_FILE"
# S'assurer que le fichier est synchronisé
sync
}
# Fonction pour capturer et logger les erreurs de commandes
log_command() {
local command="$1"
local description="$2"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] COMMANDE: $description" >> "$LOG_FILE"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] EXECUTE: $command" >> "$LOG_FILE"
eval "$command" >> "$LOG_FILE" 2>&1
local exit_code=$?
if [ $exit_code -ne 0 ]; then
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERREUR: La commande a échoué avec le code $exit_code" >> "$LOG_FILE"
fi
sync
return $exit_code
}
# Fonction pour vérifier le succès d'une commande apt
check_apt_success() {
local exit_code=$1
local package_name="$2"
local operation="$3"
if [ $exit_code -ne 0 ]; then
log_error "$operation de $package_name a échoué (code: $exit_code)"
return 1
else
log_info "$operation de $package_name réussie"
return 0
fi
}
# Fonction pour vérifier les permissions sudo
check_sudo_password() {
local password="$1"
echo "$password" | sudo -S true 2>/dev/null
if [ $? -ne 0 ]; then
log_error "Mot de passe sudo incorrect"
zenity --error --title="Erreur d'authentification" --text="Mot de passe sudo incorrect."
return 1
fi
return 0
}
# Fonction pour demander et stocker le mot de passe sudo globalement
get_global_sudo_password() {
local app_list="$1"
# Si le mot de passe est déjà stocké et valide, ne pas le redemander
if [ -n "$GLOBAL_SUDO_PASSWORD" ]; then
if check_sudo_password "$GLOBAL_SUDO_PASSWORD"; then
return 0
fi
fi
# Demander le mot de passe sudo pour toutes les installations
GLOBAL_SUDO_PASSWORD=$(zenity --password --title="Authentification - Debian Gaming Deployment Tool" --text="Mot de passe sudo requis pour installer :\n$app_list")
if [ $? -eq 1 ]; then
return 1
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$GLOBAL_SUDO_PASSWORD"; then
GLOBAL_SUDO_PASSWORD=""
return 1
fi
log_info "Authentification sudo réussie pour les installations multiples"
return 0
}
# Fonction pour vérifier si l'utilisateur veut utiliser le mot de passe global ou en demander un nouveau
use_global_password_or_ask() {
local app_name="$1"
# Si le mot de passe global n'est pas défini, demander un nouveau
if [ -z "$GLOBAL_SUDO_PASSWORD" ]; then
password=$(zenity --password --title="Authentification - Installation $app_name" --text="Mot de passe sudo requis pour installer $app_name:")
if [ $? -eq 1 ]; then
return 1
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return 1
fi
else
# Utiliser le mot de passe global
password="$GLOBAL_SUDO_PASSWORD"
fi
return 0
}
# Fonctions pour l'installation groupée
start_batch_install() {
local app_count=$1
local app_list="$2"
BATCH_INSTALL_MODE=true
BATCH_TOTAL_APPS=$app_count
BATCH_CURRENT_APP=0
log_info "Mode installation groupée activé pour $app_count applications"
# Afficher une notification de début au lieu d'une barre de progression complexe
zenity --info --timeout=3 \
--title="Debian Gaming Deployment Tool" \
--text="Installation de $app_count applications en cours...\n\nApplications sélectionnées:$app_list" &
}
update_batch_progress() {
local app_name="$1"
local step_message="$2"
local step_percent="$3"
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
# Simplement logger le progrès
log_info "[$((BATCH_CURRENT_APP + 1))/$BATCH_TOTAL_APPS] $app_name: $step_message"
fi
}
next_batch_app() {
local app_name="$1"
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
BATCH_CURRENT_APP=$((BATCH_CURRENT_APP + 1))
log_info "Application $BATCH_CURRENT_APP/$BATCH_TOTAL_APPS terminée: $app_name"
fi
}
end_batch_install() {
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
BATCH_INSTALL_MODE=false
BATCH_TOTAL_APPS=0
BATCH_CURRENT_APP=0
log_info "Mode installation groupée terminé"
fi
}
# Fonction pour gérer l'affichage de progression (individuelle ou groupée)
show_progress() {
local app_name="$1"
local percent="$2"
local message="$3"
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
# Mode groupé: utiliser la progression globale
update_batch_progress "$app_name" "$message" "$percent"
else
# Mode individuel: afficher la progression normale
echo "$percent"
echo "# $message"
fi
}
# Fonction wrapper pour zenity progress en mode individuel
run_individual_progress() {
local app_name="$1"
local commands="$2"
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
# En mode groupé, exécuter directement les commandes sans zenity progress
eval "$commands"
else
# En mode individuel, utiliser zenity progress
eval "$commands" | zenity --progress \
--title="Installation de $app_name" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
fi
}
# Vérifier si zenity est installé, sinon l'installer
check_zenity() {
if ! command -v zenity &> /dev/null; then
echo "Installation de zenity pour l'interface graphique..."
apt-get update
apt-get install -y zenity
fi
}
# Vérifier et configurer les sources Flathub si nécessaire
ensure_flathub_sources() {
log_info "Vérification des sources Flathub"
# Vérifier si Flatpak est installé
if ! command -v flatpak &> /dev/null; then
log_info "Flatpak n'est pas installé, installation en cours..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y flatpak >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "flatpak" "installation"; then
log_error "Échec de l'installation de Flatpak"
return 1
fi
fi
# Vérifier si Flathub est configuré
if ! flatpak remotes --show-details | grep -q "flathub" 2>/dev/null; then
log_info "Configuration des sources Flathub"
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la configuration de Flathub"
return 1
fi
fi
log_info "Sources Flathub configurées avec succès"
return 0
}
# Fonction pour afficher la fenêtre de sélection d'installation
show_install_selection() {
zenity --list --checklist \
--title="Debian Gaming Deployment Tool" \
--text="Sélectionnez les composants à installer :" \
--column="Installer" --column="Composant" --column="Description" \
--width=600 --height=450 \
--ok-label="Installer" \
--extra-button="Désinstaller" \
FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" \
FALSE "flatpak" "📦 Flatpak + Flathub - Magasin d'applications" \
FALSE "steam" "🎮 Steam - Plateforme gaming Valve" \
FALSE "heroic" "🎮 Heroic - Epic Games & GOG" \
FALSE "lutris" "🎮 Lutris - Gestionnaire de jeux" \
FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur (Flatpak)" \
FALSE "utils" "⚡ Utilitaires Gaming - gamemode, mangohud, goverlay" \
FALSE "wine" "🍷 Wine + Winetricks - Compatibilité Windows" \
FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne (Flatpak)" \
FALSE "discord" "💬 Discord - Chat vocal & texte (Flatpak)" \
FALSE "vesktop" "💬 Vesktop - Client Discord alternatif (Flatpak)" \
FALSE "teamspeak" "💬 TeamSpeak - Communication vocale (Flatpak)" \
FALSE "mumble" "💬 Mumble - Communication vocale libre" \
FALSE "flatseal" "📦 Flatseal - Gestionnaire permissions Flatpak" \
FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage (Flatpak)"
}
# Fonction pour afficher la fenêtre de sélection de désinstallation
show_uninstall_selection() {
zenity --list --checklist \
--title="Debian Gaming Deployment Tool - Désinstallation" \
--text="Sélectionnez les composants à désinstaller :" \
--column="Désinstaller" --column="Composant" --column="Description" \
--width=850 --height=550 \
--ok-label="Désinstaller" \
FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" \
FALSE "flatpak" "📦 Flatpak + Flathub - Magasin d'applications" \
FALSE "steam" "🎮 Steam - Plateforme gaming Valve" \
FALSE "heroic" "🎮 Heroic - Epic Games & GOG" \
FALSE "lutris" "🎮 Lutris - Gestionnaire de jeux" \
FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur (Flatpak)" \
FALSE "utils" "⚡ Utilitaires Gaming - gamemode, mangohud, goverlay" \
FALSE "wine" "🍷 Wine + Winetricks - Compatibilité Windows" \
FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne (Flatpak)" \
FALSE "discord" "💬 Discord - Chat vocal & texte (Flatpak)" \
FALSE "vesktop" "💬 Vesktop - Client Discord alternatif (Flatpak)" \
FALSE "teamspeak" "💬 TeamSpeak - Communication vocale (Flatpak)" \
FALSE "mumble" "💬 Mumble - Communication vocale libre" \
FALSE "flatseal" "📦 Flatseal - Gestionnaire permissions Flatpak" \
FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage (Flatpak)"
}
# Fonction d'installation Steam
install_steam() {
log_info "Début de l'installation de steam-installer"
# Vérifier si steam-installer est déjà installé
if dpkg -l | grep -q "^ii.*steam-installer"; then
log_info "steam-installer déjà installé"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
zenity --info --title="Déjà installé" --text="steam-installer est déjà installé sur le système."
fi
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "steam-installer"; then
return
fi
# Fonction interne pour l'installation
install_steam_steps() {
show_progress "Steam" 10 "Mise à jour des sources..."
log_info "Début mise à jour des sources pour Steam"
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
local result=$?
log_info "Résultat apt-get update: $result"
if ! check_apt_success $result "sources" "mise à jour"; then
log_error "Échec mise à jour des sources pour Steam"
return 1
fi
show_progress "Steam" 30 "Installation des dépendances..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "wget curl" "installation"; then
return 1
fi
show_progress "Steam" 50 "Ajout de l'architecture 32-bit..."
echo "$password" | timeout $TIMEOUT_APT sudo -S dpkg --add-architecture i386 >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "architecture i386" "ajout"; then
return 1
fi
show_progress "Steam" 70 "Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
return 1
fi
show_progress "Steam" 90 "Installation de steam-installer..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y steam-installer >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "steam-installer" "installation"; then
return 1
fi
show_progress "Steam" 100 "Vérification de l'installation..."
return 0
}
# Exécuter l'installation selon le mode
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
# Mode groupé: exécution directe
if ! install_steam_steps; then
log_error "Échec de l'installation de Steam"
return 1
fi
else
# Mode individuel: avec zenity progress
(
install_steam_steps
if [ $? -ne 0 ]; then
echo "# Erreur lors de l'installation"
exit 1
fi
) | zenity --progress \
--title="Installation de steam-installer" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de steam-installer"
return 1
fi
fi
# Vérifier si l'installation a réussi
if dpkg -l | grep -q "^ii.*steam-installer"; then
log_info "Installation steam-installer réussie"
INSTALLED_APPS+=("Steam")
INSTALLATION_MESSAGES+=("Steam a été installé avec succès")
else
log_error "steam-installer non trouvé après installation"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
show_error_logs "steam-installer non trouvé après installation"
fi
return 1
fi
}
# Fonction d'installation Lutris
install_lutris() {
log_info "Début de l'installation de Lutris"
# Vérifier si Lutris est déjà installé
if dpkg -l | grep -q "^ii.*lutris" || command -v lutris &> /dev/null; then
log_info "Lutris déjà installé"
zenity --info --title="Déjà installé" --text="Lutris est déjà installé sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Lutris"; then
return
fi
(
echo "10" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
echo "# Erreur lors de la mise à jour des sources"
exit 1
fi
echo "20" ; echo "# Installation des dépendances..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "dépendances" "installation"; then
echo "# Erreur lors de l'installation des dépendances"
exit 1
fi
echo "50" ; echo "# Ajout de l'architecture 32-bit..."
echo "$password" | timeout $TIMEOUT_APT sudo -S dpkg --add-architecture i386 >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "architecture i386" "ajout"; then
echo "# Erreur lors de l'ajout de l'architecture i386"
exit 1
fi
echo "70" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
echo "# Erreur lors de la mise à jour des sources"
exit 1
fi
echo "90" ; echo "# Installation de Lutris..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y lutris >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "lutris" "installation"; then
echo "# Erreur lors de l'installation de Lutris"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Lutris" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Lutris"
return
fi
# Vérifier si l'installation a réussi
if dpkg -l | grep -q "^ii.*lutris" || command -v lutris &> /dev/null; then
log_info "Installation Lutris réussie"
INSTALLED_APPS+=("Lutris")
INSTALLATION_MESSAGES+=("Lutris a été installé avec succès")
else
log_error "Lutris non trouvé après installation"
show_error_logs "Lutris non trouvé après installation"
fi
}
# Fonction d'installation Bottles
install_bottles() {
log_info "Début de l'installation de Bottles"
# Vérifier si Bottles est déjà installé
if command -v bottles &> /dev/null || flatpak list | grep -q "com.usebottles.bottles"; then
log_info "Bottles déjà installé"
zenity --info --title="Déjà installé" --text="Bottles est déjà installé sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Bottles"; then
return
fi
(
echo "40" ; echo "# Vérification des sources Flathub..."
if ! ensure_flathub_sources; then
echo "# Erreur lors de la configuration de Flathub"
exit 1
fi
echo "70" ; echo "# Installation de Bottles via Flatpak..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub com.usebottles.bottles >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'installation de Bottles"
echo "# Erreur lors de l'installation de Bottles"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Bottles" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Bottles"
return
fi
# Vérifier si l'installation a réussi
if flatpak list | grep -q "com.usebottles.bottles"; then
log_info "Installation Bottles réussie"
INSTALLED_APPS+=("Bottles")
INSTALLATION_MESSAGES+=("Bottles a été installé avec succès via Flatpak")
else
log_error "Bottles non trouvé après installation"
show_error_logs "Bottles non trouvé après installation"
fi
}
# Fonction d'installation Wine + Winetricks
install_wine() {
log_info "Début de l'installation de Wine + Winetricks"
# Vérifier si Wine et Winetricks sont déjà installés
wine_installed=$(dpkg -l | grep -q "^ii.*winehq-stable\|^ii.*wine\b" && echo "oui" || echo "non")
winetricks_installed=$(command -v winetricks &> /dev/null && echo "oui" || echo "non")
if [ "$wine_installed" = "oui" ] && [ "$winetricks_installed" = "oui" ]; then
log_info "Wine et Winetricks déjà installés"
zenity --info --title="Déjà installés" --text="Wine et Winetricks sont déjà installés sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Wine + Winetricks"; then
return
fi
(
echo "5" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
echo "# Erreur lors de la mise à jour des sources"
exit 1
fi
echo "10" ; echo "# Installation des dépendances..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "dépendances" "installation"; then
echo "# Erreur lors de l'installation des dépendances"
exit 1
fi
echo "15" ; echo "# Ajout de l'architecture 32-bit..."
echo "$password" | timeout $TIMEOUT_APT sudo -S dpkg --add-architecture i386 >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "architecture i386" "ajout"; then
echo "# Erreur lors de l'ajout de l'architecture i386"
exit 1
fi
echo "25" ; echo "# Téléchargement de la clé Wine..."
timeout $TIMEOUT_DOWNLOAD wget -O /tmp/winehq-archive.key https://dl.winehq.org/wine-builds/winehq.key >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec du téléchargement de la clé Wine"
echo "# Erreur lors du téléchargement de la clé Wine"
exit 1
fi
echo "35" ; echo "# Ajout de la clé Wine..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-key add /tmp/winehq-archive.key >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'ajout de la clé Wine"
echo "# Erreur lors de l'ajout de la clé Wine"
exit 1
fi
echo "45" ; echo "# Ajout du dépôt Wine..."
echo "$password" | timeout $TIMEOUT_APT sudo -S add-apt-repository \"deb https://dl.winehq.org/wine-builds/debian/ bookworm main\" -y >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'ajout du dépôt Wine"
echo "# Erreur lors de l'ajout du dépôt Wine"
exit 1
fi
echo "55" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources après ajout Wine" "mise à jour"; then
echo "# Erreur lors de la mise à jour après ajout Wine"
exit 1
fi
echo "70" ; echo "# Installation de Wine..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y winehq-stable >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "winehq-stable" "installation"; then
echo "# Erreur lors de l'installation de Wine"
exit 1
fi
echo "85" ; echo "# Installation de Winetricks..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y winetricks >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "winetricks" "installation"; then
echo "# Erreur lors de l'installation de Winetricks"
exit 1
fi
echo "95" ; echo "# Nettoyage..."
rm -f /tmp/winehq-archive.key
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Wine + Winetricks" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Wine + Winetricks"
return
fi
# Vérifier si l'installation a réussi
wine_ok=$(dpkg -l | grep -q "^ii.*winehq-stable" && echo "✓" || echo "✗")
winetricks_ok=$(command -v winetricks &> /dev/null && echo "✓" || echo "✗")
if [ "$wine_ok" = "✓" ] && [ "$winetricks_ok" = "✓" ]; then
log_info "Installation Wine + Winetricks réussie"
INSTALLED_APPS+=("Wine + Winetricks")
INSTALLATION_MESSAGES+=("Wine + Winetricks ont été installés avec succès")
else
log_info "Installation partielle de Wine + Winetricks"
message="Résultats de l'installation :\n\nWine: $wine_ok\nWinetricks: $winetricks_ok"
zenity --info --title="Installation partielle" --text="$message"
if [ "$wine_ok" = "✗" ] || [ "$winetricks_ok" = "✗" ]; then
show_error_logs "Installation partielle de Wine + Winetricks"
fi
fi
}
# Fonction d'installation RetroArch
install_retroarch() {
log_info "Début de l'installation de RetroArch"
# Vérifier si RetroArch est déjà installé
if dpkg -l | grep -q "^ii.*retroarch" || command -v retroarch &> /dev/null || flatpak list | grep -q "org.libretro.RetroArch"; then
log_info "RetroArch déjà installé"
zenity --info --title="Déjà installé" --text="RetroArch est déjà installé sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "RetroArch"; then
return
fi
(
echo "40" ; echo "# Vérification des sources Flathub..."
if ! ensure_flathub_sources; then
echo "# Erreur lors de la configuration de Flathub"
exit 1
fi
echo "70" ; echo "# Installation de RetroArch via Flatpak..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub org.libretro.RetroArch >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'installation de RetroArch"
echo "# Erreur lors de l'installation de RetroArch"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de RetroArch" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de RetroArch"
return
fi
# Vérifier si l'installation a réussi
if flatpak list | grep -q "org.libretro.RetroArch"; then
log_info "Installation RetroArch réussie"
INSTALLED_APPS+=("RetroArch")
INSTALLATION_MESSAGES+=("RetroArch a été installé avec succès via Flatpak")
else
log_error "RetroArch non trouvé après installation"
show_error_logs "RetroArch non trouvé après installation"
fi
}
# Fonction d'installation Flatpak + Flathub
install_flatpak() {
log_info "Début de l'installation de Flatpak + Flathub"
# Vérifier si Flatpak est déjà installé et Flathub configuré
flatpak_installed=$(command -v flatpak &> /dev/null && echo "oui" || echo "non")
flathub_configured=$(flatpak remotes --show-details | grep -q "flathub" && echo "oui" || echo "non")
if [ "$flatpak_installed" = "oui" ] && [ "$flathub_configured" = "oui" ]; then
log_info "Flatpak et Flathub déjà configurés"
zenity --info --title="Déjà configurés" --text="Flatpak et Flathub sont déjà installés et configurés sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Flatpak + Flathub"; then
return
fi
(
echo "20" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
echo "# Erreur lors de la mise à jour des sources"
exit 1
fi
echo "50" ; echo "# Installation de Flatpak..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y flatpak >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "flatpak" "installation"; then
echo "# Erreur lors de l'installation de Flatpak"
exit 1
fi
echo "80" ; echo "# Ajout du dépôt Flathub..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'ajout du dépôt Flathub"
echo "# Erreur lors de l'ajout de Flathub"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Flatpak + Flathub" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Flatpak + Flathub"
return
fi
# Vérifier si l'installation a réussi
flatpak_ok=$(command -v flatpak &> /dev/null && echo "✓" || echo "✗")
flathub_ok=$(flatpak remotes --show-details | grep -q "flathub" && echo "✓" || echo "✗")
if [ "$flatpak_ok" = "✓" ] && [ "$flathub_ok" = "✓" ]; then
log_info "Installation Flatpak + Flathub réussie"
INSTALLED_APPS+=("Flatpak + Flathub")
INSTALLATION_MESSAGES+=("Flatpak + Flathub ont été installés avec succès (redémarrage de session recommandé)")
else
log_info "Installation partielle de Flatpak + Flathub"
message="Résultats de l'installation :\n\nFlatpak: $flatpak_ok\nFlathub: $flathub_ok"
zenity --info --title="Installation partielle" --text="$message"
if [ "$flatpak_ok" = "✗" ] || [ "$flathub_ok" = "✗" ]; then
show_error_logs "Installation partielle de Flatpak + Flathub"
fi
fi
}
# Fonction d'installation Flatseal
install_flatseal() {
log_info "Début de l'installation de Flatseal"
# Vérifier si Flatseal est déjà installé via Flatpak
if flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then
log_info "Flatseal déjà installé via Flatpak"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
zenity --info --title="Déjà installé" --text="Flatseal est déjà installé via Flatpak sur le système."
fi
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Flatseal"; then
return
fi
# Fonction interne pour l'installation
install_flatseal_steps() {
show_progress "Flatseal" 40 "Vérification des sources Flathub..."
if ! ensure_flathub_sources; then
log_error "Échec de la configuration de Flathub pour Flatseal"
return 1
fi
show_progress "Flatseal" 70 "Installation de Flatseal via Flatpak..."
log_info "Installation de Flatseal via Flatpak"
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub com.github.tchx84.Flatseal >> "$LOG_FILE" 2>&1
local result=$?
log_info "Résultat installation Flatseal: $result"
if [ $result -ne 0 ]; then
log_error "Échec de l'installation de Flatseal via Flatpak"
return 1
fi
show_progress "Flatseal" 100 "Vérification de l'installation..."
return 0
}
# Exécuter l'installation selon le mode
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
# Mode groupé: exécution directe
if ! install_flatseal_steps; then
log_error "Échec de l'installation de Flatseal"
return 1
fi
else
# Mode individuel: avec zenity progress
(
install_flatseal_steps
if [ $? -ne 0 ]; then
echo "# Erreur lors de l'installation"
exit 1
fi
) | zenity --progress \
--title="Installation de Flatseal" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Flatseal"
return 1
fi
fi
# Vérifier si l'installation a réussi
if flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then
log_info "Installation Flatseal réussie"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
INSTALLED_APPS+=("Flatseal")
INSTALLATION_MESSAGES+=("Flatseal a été installé avec succès via Flatpak")
fi
else
log_error "Flatseal non trouvé après installation"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
show_error_logs "Flatseal non trouvé après installation"
fi
return 1
fi
}
# Fonction d'installation Gear Lever (AppImage Manager)
install_gearlever() {
log_info "Début de l'installation de Gear Lever"
# Vérifier si Gear Lever est déjà installé
if command -v gear-lever &> /dev/null || flatpak list | grep -q "it.mijorus.gearlever"; then
log_info "Gear Lever déjà installé"
zenity --info --title="Déjà installé" --text="Gear Lever est déjà installé sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Gear Lever"; then
return
fi
(
echo "40" ; echo "# Vérification des sources Flathub..."
if ! ensure_flathub_sources; then
echo "# Erreur lors de la configuration de Flathub"
exit 1
fi
echo "70" ; echo "# Installation de Gear Lever via Flatpak..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub it.mijorus.gearlever >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'installation de Gear Lever"
echo "# Erreur lors de l'installation de Gear Lever"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Gear Lever" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Gear Lever"
return
fi
# Vérifier si l'installation a réussi
if flatpak list | grep -q "it.mijorus.gearlever"; then
log_info "Installation Gear Lever réussie"
INSTALLED_APPS+=("Gear Lever")
INSTALLATION_MESSAGES+=("Gear Lever a été installé avec succès via Flatpak")
else
log_error "Gear Lever non trouvé après installation"
show_error_logs "Gear Lever non trouvé après installation"
fi
}
# Fonction d'installation Discord
install_discord() {
log_info "Début de l'installation de Discord"
# Vérifier si Discord est déjà installé
if command -v discord &> /dev/null || flatpak list | grep -q "com.discordapp.Discord"; then
log_info "Discord déjà installé"
zenity --info --title="Déjà installé" --text="Discord est déjà installé sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Discord"; then
return
fi
(
echo "40" ; echo "# Vérification des sources Flathub..."
if ! ensure_flathub_sources; then
echo "# Erreur lors de la configuration de Flathub"
exit 1
fi
echo "70" ; echo "# Installation de Discord via Flatpak..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub com.discordapp.Discord >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'installation de Discord"
echo "# Erreur lors de l'installation de Discord"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Discord" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Discord"
return
fi
# Vérifier si l'installation a réussi
if flatpak list | grep -q "com.discordapp.Discord"; then
log_info "Installation Discord réussie"
INSTALLED_APPS+=("Discord")
INSTALLATION_MESSAGES+=("Discord a été installé avec succès via Flatpak")
else
log_error "Discord non trouvé après installation"
show_error_logs "Discord non trouvé après installation"
fi
}
# Fonction d'installation Vesktop
install_vesktop() {
log_info "Début de l'installation de Vesktop via Flatpak"
# Vérifier si Vesktop est déjà installé via Flatpak
if flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then
log_info "Vesktop déjà installé via Flatpak"
zenity --info --title="Déjà installé" --text="Vesktop est déjà installé via Flatpak sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Vesktop"; then
return
fi
(
echo "40" ; echo "# Vérification des sources Flathub..."
if ! ensure_flathub_sources; then
echo "# Erreur lors de la configuration de Flathub"
exit 1
fi
echo "70" ; echo "# Installation de Vesktop via Flatpak..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub dev.vencord.Vesktop >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'installation de Vesktop via Flatpak"
echo "# Erreur lors de l'installation de Vesktop"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Vesktop" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Vesktop"
return
fi
# Vérifier si l'installation a réussi
if flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then
log_info "Installation Vesktop réussie"
INSTALLED_APPS+=("Vesktop")
INSTALLATION_MESSAGES+=("Vesktop a été installé avec succès via Flatpak")
else
log_error "Vesktop non trouvé après installation"
show_error_logs "Vesktop non trouvé après installation"
fi
}
# Fonction d'installation TeamSpeak
install_teamspeak() {
log_info "Début de l'installation de TeamSpeak via Flatpak"
# Vérifier si TeamSpeak est déjà installé via Flatpak
if flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then
log_info "TeamSpeak déjà installé via Flatpak"
zenity --info --title="Déjà installé" --text="TeamSpeak est déjà installé via Flatpak sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "TeamSpeak"; then
return
fi
(
echo "20" ; echo "# Vérification des sources Flathub..."
if ! ensure_flathub_sources; then
echo "# Erreur lors de la configuration de Flathub"
exit 1
fi
echo "70" ; echo "# Installation de TeamSpeak via Flatpak..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub com.teamspeak.TeamSpeak3 >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'installation de TeamSpeak via Flatpak"
echo "# Erreur lors de l'installation de TeamSpeak"
exit 1
fi
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de TeamSpeak" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de TeamSpeak"
return
fi
# Vérifier si l'installation a réussi
if flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then
log_info "Installation TeamSpeak réussie"
INSTALLED_APPS+=("TeamSpeak")
INSTALLATION_MESSAGES+=("TeamSpeak a été installé avec succès via Flatpak")
else
log_error "TeamSpeak non trouvé après installation"
show_error_logs "TeamSpeak non trouvé après installation"
fi
}
# Fonction d'installation Mumble
install_mumble() {
log_info "Début de l'installation de Mumble"
# Vérifier si Mumble est déjà installé
if dpkg -l | grep -q "^ii.*mumble" || command -v mumble &> /dev/null; then
log_info "Mumble déjà installé"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
zenity --info --title="Déjà installé" --text="Mumble est déjà installé sur le système."
fi
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Mumble"; then
return
fi
# Fonction interne pour l'installation
install_mumble_steps() {
show_progress "Mumble" 20 "Mise à jour des sources..."
log_info "Début mise à jour des sources pour Mumble"
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
local result=$?
log_info "Résultat apt-get update: $result"
if ! check_apt_success $result "sources" "mise à jour"; then
log_error "Échec mise à jour des sources pour Mumble"
return 1
fi
show_progress "Mumble" 70 "Installation de Mumble..."
log_info "Installation du paquet Mumble"
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y mumble >> "$LOG_FILE" 2>&1
local result=$?
log_info "Résultat installation Mumble: $result"
if ! check_apt_success $result "mumble" "installation"; then
log_error "Échec installation Mumble"
return 1
fi
show_progress "Mumble" 100 "Vérification de l'installation..."
return 0
}
# Exécuter l'installation selon le mode
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
# Mode groupé: exécution directe
if ! install_mumble_steps; then
log_error "Échec de l'installation de Mumble"
return 1
fi
else
# Mode individuel: avec zenity progress
(
install_mumble_steps
if [ $? -ne 0 ]; then
echo "# Erreur lors de l'installation"
exit 1
fi
) | zenity --progress \
--title="Installation de Mumble" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Mumble"
return 1
fi
fi
# Vérifier si l'installation a réussi
if dpkg -l | grep -q "^ii.*mumble" || command -v mumble &> /dev/null; then
log_info "Installation Mumble réussie"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
INSTALLED_APPS+=("Mumble")
INSTALLATION_MESSAGES+=("Mumble a été installé avec succès")
fi
else
log_error "Mumble non trouvé après installation"
if [ "$BATCH_INSTALL_MODE" != "true" ]; then
show_error_logs "Mumble non trouvé après installation"
fi
return 1
fi
}
# Fonction d'installation Heroic Game Launcher
install_heroic() {
log_info "Début de l'installation de Heroic Game Launcher"
# Vérifier si Heroic Game Launcher est déjà installé
if dpkg -l | grep -q "^ii.*heroic" || command -v heroic &> /dev/null; then
log_info "Heroic Game Launcher déjà installé"
zenity --info --title="Déjà installé" --text="Heroic Game Launcher est déjà installé sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "Heroic Game Launcher"; then
return
fi
(
echo "10" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
echo "# Erreur lors de la mise à jour des sources"
exit 1
fi
echo "20" ; echo "# Installation des dépendances..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "wget curl" "installation"; then
echo "# Erreur lors de l'installation des dépendances"
exit 1
fi
echo "40" ; echo "# Téléchargement de Heroic Game Launcher..."
HEROIC_URL=$(curl -s https://api.github.com/repos/Heroic-Games-Launcher/HeroicGamesLauncher/releases/latest | grep "browser_download_url.*\.deb" | cut -d '"' -f 4)
if [ -z "$HEROIC_URL" ]; then
log_error "Impossible de récupérer l'URL de téléchargement de Heroic"
echo "# Erreur lors de la récupération de l'URL de téléchargement"
exit 1
fi
timeout $TIMEOUT_DOWNLOAD wget "$HEROIC_URL" -O /tmp/heroic.deb >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec du téléchargement de Heroic ($HEROIC_URL)"
echo "# Erreur lors du téléchargement"
exit 1
fi
echo "70" ; echo "# Installation de Heroic Game Launcher..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y /tmp/heroic.deb >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "heroic.deb" "installation"; then
echo "# Erreur lors de l'installation de Heroic"
exit 1
fi
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -f -y >> "$LOG_FILE" 2>&1
echo "90" ; echo "# Nettoyage..."
rm -f /tmp/heroic.deb
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation de Heroic Game Launcher" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation de Heroic Game Launcher"
return
fi
# Vérifier si l'installation a réussi
if dpkg -l | grep -q "^ii.*heroic" || command -v heroic &> /dev/null; then
log_info "Installation Heroic Game Launcher réussie"
INSTALLED_APPS+=("Heroic Game Launcher")
INSTALLATION_MESSAGES+=("Heroic Game Launcher a été installé avec succès")
else
log_error "Heroic Game Launcher non trouvé après installation"
show_error_logs "Heroic Game Launcher non trouvé après installation"
fi
}
# Fonction d'installation drivers NVIDIA
install_nvidia() {
log_info "Début de l'installation des drivers NVIDIA"
# Vérifier si les drivers NVIDIA sont déjà installés
if dpkg -l | grep -q "^ii.*nvidia-open" || dpkg -l | grep -q "^ii.*cuda-toolkit"; then
log_info "Drivers NVIDIA déjà installés"
zenity --info --title="Déjà installé" --text="Les drivers NVIDIA ou CUDA sont déjà installés sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "drivers NVIDIA"; then
return
fi
(
echo "5" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
echo "# Erreur lors de la mise à jour des sources"
exit 1
fi
echo "15" ; echo "# Installation de wget..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "wget" "installation"; then
echo "# Erreur lors de l'installation de wget"
exit 1
fi
echo "25" ; echo "# Téléchargement de la clé CUDA..."
timeout $TIMEOUT_DOWNLOAD wget https://developer.download.nvidia.com/compute/cuda/repos/debian12/x86_64/cuda-keyring_1.1-1_all.deb -P /tmp/ >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec du téléchargement de la clé CUDA"
echo "# Erreur lors du téléchargement de la clé CUDA"
exit 1
fi
echo "35" ; echo "# Installation du paquet de clé..."
echo "$password" | timeout $TIMEOUT_APT sudo -S dpkg -i /tmp/cuda-keyring_1.1-1_all.deb >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de l'installation du paquet de clé CUDA"
echo "# Erreur lors de l'installation du paquet de clé"
exit 1
fi
echo "45" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources après ajout clé CUDA" "mise à jour"; then
echo "# Erreur lors de la mise à jour après ajout de clé"
exit 1
fi
echo "65" ; echo "# Installation de CUDA Toolkit..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get -y install cuda-toolkit-12-9 >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "cuda-toolkit-12-9" "installation"; then
echo "# Erreur lors de l'installation de CUDA Toolkit"
exit 1
fi
echo "85" ; echo "# Installation des drivers NVIDIA..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y nvidia-open >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "nvidia-open" "installation"; then
echo "# Erreur lors de l'installation des drivers NVIDIA"
exit 1
fi
echo "95" ; echo "# Nettoyage..."
rm -f /tmp/cuda-keyring_1.1-1_all.deb
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation des drivers NVIDIA" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de l'installation des drivers NVIDIA"
return
fi
# Vérifier si l'installation a réussi
if dpkg -l | grep -q "^ii.*nvidia-open" && dpkg -l | grep -q "^ii.*cuda-toolkit"; then
log_info "Installation drivers NVIDIA réussie"
INSTALLED_APPS+=("Drivers NVIDIA")
INSTALLATION_MESSAGES+=("Les drivers NVIDIA ont été installés avec succès (redémarrage requis)")
else
log_error "Drivers NVIDIA non trouvés après installation"
show_error_logs "Drivers NVIDIA non trouvés après installation"
fi
}
# Fonction d'installation des utilitaires gaming
install_utils() {
log_info "Début de l'installation des utilitaires gaming"
# Vérifier si les utilitaires sont déjà installés
gamemode_installed=$(dpkg -l | grep -q "^ii.*gamemode" && echo "oui" || echo "non")
mangohud_installed=$(dpkg -l | grep -q "^ii.*mangohud" && echo "oui" || echo "non")
goverlay_installed=$(dpkg -l | grep -q "^ii.*goverlay" && echo "oui" || echo "non")
if [ "$gamemode_installed" = "oui" ] && [ "$mangohud_installed" = "oui" ] && [ "$goverlay_installed" = "oui" ]; then
log_info "Tous les utilitaires gaming déjà installés"
zenity --info --title="Déjà installés" --text="Tous les utilitaires gaming sont déjà installés sur le système."
return
fi
# Utiliser le mot de passe global ou demander un nouveau
if ! use_global_password_or_ask "utilitaires gaming"; then
return
fi
(
echo "15" ; echo "# Mise à jour des sources..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "sources" "mise à jour"; then
echo "# Erreur lors de la mise à jour des sources"
exit 1
fi
echo "40" ; echo "# Installation de gamemode..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y gamemode >> "$LOG_FILE" 2>&1
gamemode_success=$?
echo "65" ; echo "# Installation de mangohud..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y mangohud >> "$LOG_FILE" 2>&1
mangohud_success=$?
echo "90" ; echo "# Installation de goverlay..."
echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y goverlay >> "$LOG_FILE" 2>&1
goverlay_success=$?
# Logger les résultats individuels
check_apt_success $gamemode_success "gamemode" "installation"
check_apt_success $mangohud_success "mangohud" "installation"
check_apt_success $goverlay_success "goverlay" "installation"
echo "100" ; echo "# Vérification de l'installation..."
) | zenity --progress \
--title="Installation des utilitaires gaming" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier si l'installation a réussi
gamemode_ok=$(dpkg -l | grep -q "^ii.*gamemode" && echo "✓" || echo "✗")
mangohud_ok=$(dpkg -l | grep -q "^ii.*mangohud" && echo "✓" || echo "✗")
goverlay_ok=$(dpkg -l | grep -q "^ii.*goverlay" && echo "✓" || echo "✗")
if [ "$gamemode_ok" = "✓" ] && [ "$mangohud_ok" = "✓" ] && [ "$goverlay_ok" = "✓" ]; then
log_info "Installation complète des utilitaires gaming réussie"
# Le récapitulatif sera affiché à la fin
else
log_info "Installation partielle des utilitaires gaming"
message="Résultats de l'installation :\n\nGamemode: $gamemode_ok\nMangoHUD: $mangohud_ok\nGOverlay: $goverlay_ok"
if [ "$gamemode_ok" = "✗" ] || [ "$mangohud_ok" = "✗" ] || [ "$goverlay_ok" = "✗" ]; then
# Afficher d'abord le message puis proposer les logs
zenity --info --title="Installation partielle" --text="$message"
if zenity --question --title="Voir les logs" --text="Certains utilitaires ont échoué.\nVoulez-vous consulter les logs d'erreur ?"; then
show_error_logs "Installation partielle des utilitaires gaming"
fi
else
zenity --info --title="Installation partielle" --text="$message"
fi
fi
}
# Fonction de désinstallation Steam
uninstall_steam() {
log_info "Début de la désinstallation de steam-installer"
# Vérifier si steam-installer est installé
if ! dpkg -l | grep -q "^ii.*steam-installer"; then
log_info "steam-installer non installé"
zenity --info --title="Non installé" --text="steam-installer n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller steam-installer ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation steam-installer" --text="Mot de passe sudo requis pour désinstaller steam-installer:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "30" ; echo "# Désinstallation de steam-installer..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y steam-installer >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "steam-installer" "désinstallation"; then
echo "# Erreur lors de la désinstallation de steam-installer"
exit 1
fi
echo "70" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "paquets orphelins" "nettoyage"; then
echo "# Avertissement: Erreur lors du nettoyage des paquets orphelins"
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de steam-installer" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de steam-installer"
return
fi
# Vérifier si la désinstallation a réussi
if ! dpkg -l | grep -q "^ii.*steam-installer"; then
log_info "Désinstallation steam-installer réussie"
zenity --info --title="Succès" --text="steam-installer a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de steam-installer"
show_error_logs "Échec de la désinstallation de steam-installer"
fi
}
# Fonction de désinstallation Bottles
uninstall_bottles() {
log_info "Début de la désinstallation de Bottles"
# Vérifier si Bottles est installé
if ! flatpak list | grep -q "com.usebottles.bottles"; then
log_info "Bottles non installé"
zenity --info --title="Non installé" --text="Bottles n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Bottles ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Bottles" --text="Mot de passe sudo requis pour désinstaller Bottles:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de Bottles..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.usebottles.bottles >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la désinstallation de Bottles"
echo "# Erreur lors de la désinstallation de Bottles"
exit 1
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Bottles" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Bottles"
return
fi
# Vérifier si la désinstallation a réussi
if ! flatpak list | grep -q "com.usebottles.bottles"; then
log_info "Désinstallation Bottles réussie"
zenity --info --title="Succès" --text="Bottles a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Bottles"
show_error_logs "Échec de la désinstallation de Bottles"
fi
}
# Fonction de désinstallation Wine + Winetricks
uninstall_wine() {
log_info "Début de la désinstallation de Wine + Winetricks"
# Vérifier si Wine et Winetricks sont installés
wine_installed=$(dpkg -l | grep -q "^ii.*winehq-stable\|^ii.*wine\b" && echo "oui" || echo "non")
winetricks_installed=$(command -v winetricks &> /dev/null && echo "oui" || echo "non")
if [ "$wine_installed" = "non" ] && [ "$winetricks_installed" = "non" ]; then
log_info "Wine et Winetricks non installés"
zenity --info --title="Non installés" --text="Wine et Winetricks ne sont pas installés sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Wine + Winetricks ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Wine" --text="Mot de passe sudo requis pour désinstaller Wine + Winetricks:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "30" ; echo "# Désinstallation de Wine..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y winehq-stable wine* >> "$LOG_FILE" 2>&1
wine_remove_result=$?
echo "60" ; echo "# Désinstallation de Winetricks..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y winetricks >> "$LOG_FILE" 2>&1
winetricks_remove_result=$?
# Logger les résultats individuels
check_apt_success $wine_remove_result "wine" "désinstallation"
check_apt_success $winetricks_remove_result "winetricks" "désinstallation"
echo "80" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Wine + Winetricks" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier si la désinstallation a réussi
wine_ok=$(dpkg -l | grep -q "^ii.*winehq-stable\|^ii.*wine\b" && echo "✗" || echo "✓")
winetricks_ok=$(command -v winetricks &> /dev/null && echo "✗" || echo "✓")
if [ "$wine_ok" = "✓" ] && [ "$winetricks_ok" = "✓" ]; then
log_info "Désinstallation Wine + Winetricks réussie"
zenity --info --title="Succès" --text="Wine + Winetricks ont été désinstallés avec succès !"
else
log_info "Désinstallation partielle de Wine + Winetricks"
message="Résultats de la désinstallation :\n\nWine: $wine_ok\nWinetricks: $winetricks_ok"
zenity --info --title="Désinstallation partielle" --text="$message"
fi
}
# Fonction de désinstallation RetroArch
uninstall_retroarch() {
log_info "Début de la désinstallation de RetroArch"
# Vérifier si RetroArch est installé
if ! flatpak list | grep -q "org.libretro.RetroArch" && ! dpkg -l | grep -q "^ii.*retroarch"; then
log_info "RetroArch non installé"
zenity --info --title="Non installé" --text="RetroArch n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller RetroArch ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation RetroArch" --text="Mot de passe sudo requis pour désinstaller RetroArch:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de RetroArch..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y org.libretro.RetroArch >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la désinstallation de RetroArch"
echo "# Erreur lors de la désinstallation de RetroArch"
exit 1
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de RetroArch" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de RetroArch"
return
fi
# Vérifier si la désinstallation a réussi
if ! flatpak list | grep -q "org.libretro.RetroArch"; then
log_info "Désinstallation RetroArch réussie"
zenity --info --title="Succès" --text="RetroArch a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de RetroArch"
show_error_logs "Échec de la désinstallation de RetroArch"
fi
}
# Fonction de désinstallation Flatpak
uninstall_flatpak() {
log_info "Début de la désinstallation de Flatpak"
# Vérifier si Flatpak est installé
if ! command -v flatpak &> /dev/null; then
log_info "Flatpak non installé"
zenity --info --title="Non installé" --text="Flatpak n'est pas installé sur le système."
return
fi
# Demander confirmation avec avertissement
if ! zenity --question --title="Confirmation - ATTENTION" --text="ATTENTION: La désinstallation de Flatpak supprimera TOUTES les applications Flatpak installées.\n\nÊtes-vous sûr de vouloir continuer ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Flatpak" --text="Mot de passe sudo requis pour désinstaller Flatpak:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "30" ; echo "# Désinstallation de Flatpak..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y flatpak >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "flatpak" "désinstallation"; then
echo "# Erreur lors de la désinstallation de Flatpak"
exit 1
fi
echo "70" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Flatpak" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Flatpak"
return
fi
# Vérifier si la désinstallation a réussi
if ! command -v flatpak &> /dev/null; then
log_info "Désinstallation Flatpak réussie"
zenity --info --title="Succès" --text="Flatpak a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Flatpak"
show_error_logs "Échec de la désinstallation de Flatpak"
fi
}
# Fonction de désinstallation Gear Lever
uninstall_gearlever() {
log_info "Début de la désinstallation de Gear Lever"
# Vérifier si Gear Lever est installé
if ! flatpak list | grep -q "it.mijorus.gearlever"; then
log_info "Gear Lever non installé"
zenity --info --title="Non installé" --text="Gear Lever n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Gear Lever ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Gear Lever" --text="Mot de passe sudo requis pour désinstaller Gear Lever:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de Gear Lever..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y it.mijorus.gearlever >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la désinstallation de Gear Lever"
echo "# Erreur lors de la désinstallation de Gear Lever"
exit 1
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Gear Lever" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Gear Lever"
return
fi
# Vérifier si la désinstallation a réussi
if ! flatpak list | grep -q "it.mijorus.gearlever"; then
log_info "Désinstallation Gear Lever réussie"
zenity --info --title="Succès" --text="Gear Lever a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Gear Lever"
show_error_logs "Échec de la désinstallation de Gear Lever"
fi
}
# Fonction de désinstallation Discord
uninstall_discord() {
log_info "Début de la désinstallation de Discord"
# Vérifier si Discord est installé
if ! flatpak list | grep -q "com.discordapp.Discord" && ! command -v discord &> /dev/null; then
log_info "Discord non installé"
zenity --info --title="Non installé" --text="Discord n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Discord ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Discord" --text="Mot de passe sudo requis pour désinstaller Discord:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de Discord..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.discordapp.Discord >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la désinstallation de Discord"
echo "# Erreur lors de la désinstallation de Discord"
exit 1
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Discord" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Discord"
return
fi
# Vérifier si la désinstallation a réussi
if ! flatpak list | grep -q "com.discordapp.Discord"; then
log_info "Désinstallation Discord réussie"
zenity --info --title="Succès" --text="Discord a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Discord"
show_error_logs "Échec de la désinstallation de Discord"
fi
}
# Fonction de désinstallation Vesktop
uninstall_vesktop() {
log_info "Début de la désinstallation de Vesktop via Flatpak"
# Vérifier si Vesktop est installé via Flatpak
if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then
log_info "Vesktop non installé via Flatpak"
zenity --info --title="Non installé" --text="Vesktop n'est pas installé via Flatpak sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Vesktop ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Vesktop" --text="Mot de passe sudo requis pour désinstaller Vesktop:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de Vesktop via Flatpak..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y dev.vencord.Vesktop >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la désinstallation de Vesktop via Flatpak"
echo "# Erreur lors de la désinstallation de Vesktop"
exit 1
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Vesktop" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Vesktop"
return
fi
# Vérifier si la désinstallation a réussi
if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then
log_info "Désinstallation Vesktop réussie"
zenity --info --title="Succès" --text="Vesktop a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Vesktop"
show_error_logs "Échec de la désinstallation de Vesktop"
fi
}
# Fonction de désinstallation TeamSpeak
uninstall_teamspeak() {
log_info "Début de la désinstallation de TeamSpeak via Flatpak"
# Vérifier si TeamSpeak est installé via Flatpak
if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then
log_info "TeamSpeak non installé via Flatpak"
zenity --info --title="Non installé" --text="TeamSpeak n'est pas installé via Flatpak sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller TeamSpeak ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation TeamSpeak" --text="Mot de passe sudo requis pour désinstaller TeamSpeak:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de TeamSpeak via Flatpak..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.teamspeak.TeamSpeak3 >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la désinstallation de TeamSpeak via Flatpak"
echo "# Erreur lors de la désinstallation de TeamSpeak"
exit 1
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de TeamSpeak" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de TeamSpeak"
return
fi
# Vérifier si la désinstallation a réussi
if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then
log_info "Désinstallation TeamSpeak réussie"
zenity --info --title="Succès" --text="TeamSpeak a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de TeamSpeak"
show_error_logs "Échec de la désinstallation de TeamSpeak"
fi
}
# Fonction de désinstallation Mumble
uninstall_mumble() {
log_info "Début de la désinstallation de Mumble"
# Vérifier si Mumble est installé
if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then
log_info "Mumble non installé"
zenity --info --title="Non installé" --text="Mumble n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Mumble ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Mumble" --text="Mot de passe sudo requis pour désinstaller Mumble:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de Mumble..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y mumble >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "mumble" "désinstallation"; then
echo "# Erreur lors de la désinstallation de Mumble"
exit 1
fi
echo "80" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Mumble" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Mumble"
return
fi
# Vérifier si la désinstallation a réussi
if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then
log_info "Désinstallation Mumble réussie"
zenity --info --title="Succès" --text="Mumble a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Mumble"
show_error_logs "Échec de la désinstallation de Mumble"
fi
}
# Fonction de désinstallation Flatseal
uninstall_flatseal() {
log_info "Début de la désinstallation de Flatseal via Flatpak"
# Vérifier si Flatseal est installé via Flatpak
if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then
log_info "Flatseal non installé via Flatpak"
zenity --info --title="Non installé" --text="Flatseal n'est pas installé via Flatpak sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Flatseal ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Flatseal" --text="Mot de passe sudo requis pour désinstaller Flatseal:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "50" ; echo "# Désinstallation de Flatseal via Flatpak..."
echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.github.tchx84.Flatseal >> "$LOG_FILE" 2>&1
if [ $? -ne 0 ]; then
log_error "Échec de la désinstallation de Flatseal via Flatpak"
echo "# Erreur lors de la désinstallation de Flatseal"
exit 1
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Flatseal" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Flatseal"
return
fi
# Vérifier si la désinstallation a réussi
if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then
log_info "Désinstallation Flatseal réussie"
zenity --info --title="Succès" --text="Flatseal a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Flatseal"
show_error_logs "Échec de la désinstallation de Flatseal"
fi
}
# Fonction de désinstallation Lutris
uninstall_lutris() {
log_info "Début de la désinstallation de Lutris"
# Vérifier si Lutris est installé
if ! dpkg -l | grep -q "^ii.*lutris" && ! command -v lutris &> /dev/null; then
log_info "Lutris non installé"
zenity --info --title="Non installé" --text="Lutris n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Lutris ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Lutris" --text="Mot de passe sudo requis pour désinstaller Lutris:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "30" ; echo "# Désinstallation de Lutris..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y lutris >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "lutris" "désinstallation"; then
echo "# Erreur lors de la désinstallation de Lutris"
exit 1
fi
echo "70" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "paquets orphelins" "nettoyage"; then
echo "# Avertissement: Erreur lors du nettoyage des paquets orphelins"
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Lutris" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Lutris"
return
fi
# Vérifier si la désinstallation a réussi
if ! dpkg -l | grep -q "^ii.*lutris" && ! command -v lutris &> /dev/null; then
log_info "Désinstallation Lutris réussie"
zenity --info --title="Succès" --text="Lutris a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Lutris"
show_error_logs "Échec de la désinstallation de Lutris"
fi
}
# Fonction de désinstallation Heroic Game Launcher
uninstall_heroic() {
log_info "Début de la désinstallation de Heroic Game Launcher"
# Vérifier si Heroic est installé
if ! dpkg -l | grep -q "^ii.*heroic" && ! command -v heroic &> /dev/null; then
log_info "Heroic Game Launcher non installé"
zenity --info --title="Non installé" --text="Heroic Game Launcher n'est pas installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Heroic Game Launcher ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation Heroic" --text="Mot de passe sudo requis pour désinstaller Heroic Game Launcher:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "30" ; echo "# Désinstallation de Heroic Game Launcher..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y heroic >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "heroic" "désinstallation"; then
echo "# Erreur lors de la désinstallation de Heroic Game Launcher"
exit 1
fi
echo "70" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "paquets orphelins" "nettoyage"; then
echo "# Avertissement: Erreur lors du nettoyage des paquets orphelins"
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation de Heroic Game Launcher" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation de Heroic Game Launcher"
return
fi
# Vérifier si la désinstallation a réussi
if ! dpkg -l | grep -q "^ii.*heroic" && ! command -v heroic &> /dev/null; then
log_info "Désinstallation Heroic Game Launcher réussie"
zenity --info --title="Succès" --text="Heroic Game Launcher a été désinstallé avec succès !"
else
log_error "Échec de la désinstallation de Heroic Game Launcher"
show_error_logs "Échec de la désinstallation de Heroic Game Launcher"
fi
}
# Fonction de désinstallation drivers NVIDIA
uninstall_nvidia() {
log_info "Début de la désinstallation des drivers NVIDIA"
# Vérifier si les drivers NVIDIA sont installés
if ! dpkg -l | grep -q "^ii.*nvidia-open" && ! dpkg -l | grep -q "^ii.*cuda-toolkit"; then
log_info "Drivers NVIDIA non installés"
zenity --info --title="Non installés" --text="Les drivers NVIDIA ne sont pas installés sur le système."
return
fi
# Demander confirmation avec avertissement
if ! zenity --question --title="Confirmation - ATTENTION" --text="ATTENTION: La désinstallation des drivers NVIDIA peut affecter votre affichage.\n\nÊtes-vous sûr de vouloir continuer ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation NVIDIA" --text="Mot de passe sudo requis pour désinstaller les drivers NVIDIA:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "20" ; echo "# Désinstallation de CUDA Toolkit..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y cuda-toolkit-12-9 >> "$LOG_FILE" 2>&1
cuda_remove_result=$?
echo "50" ; echo "# Désinstallation des drivers NVIDIA..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y nvidia-open >> "$LOG_FILE" 2>&1
nvidia_remove_result=$?
# Logger les résultats individuels
check_apt_success $cuda_remove_result "cuda-toolkit-12-9" "désinstallation"
check_apt_success $nvidia_remove_result "nvidia-open" "désinstallation"
# Vérifier si au moins une désinstallation a échoué
if [ $cuda_remove_result -ne 0 ] || [ $nvidia_remove_result -ne 0 ]; then
echo "# Erreur lors de la désinstallation des composants NVIDIA"
exit 1
fi
echo "80" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "paquets orphelins" "nettoyage"; then
echo "# Avertissement: Erreur lors du nettoyage des paquets orphelins"
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation des drivers NVIDIA" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier le code de sortie du processus
if [ ${PIPESTATUS[0]} -ne 0 ]; then
show_error_logs "Échec de la désinstallation des drivers NVIDIA"
return
fi
# Vérifier si la désinstallation a réussi
if ! dpkg -l | grep -q "^ii.*nvidia-open" && ! dpkg -l | grep -q "^ii.*cuda-toolkit"; then
log_info "Désinstallation drivers NVIDIA réussie"
zenity --info --title="Succès" --text="Les drivers NVIDIA ont été désinstallés avec succès !\nUn REDÉMARRAGE est recommandé."
else
log_error "Échec de la désinstallation des drivers NVIDIA"
show_error_logs "Échec de la désinstallation des drivers NVIDIA"
fi
}
# Fonction de désinstallation des utilitaires gaming
uninstall_utils() {
log_info "Début de la désinstallation des utilitaires gaming"
# Vérifier si les utilitaires sont installés
gamemode_installed=$(dpkg -l | grep -q "^ii.*gamemode" && echo "oui" || echo "non")
mangohud_installed=$(dpkg -l | grep -q "^ii.*mangohud" && echo "oui" || echo "non")
goverlay_installed=$(dpkg -l | grep -q "^ii.*goverlay" && echo "oui" || echo "non")
if [ "$gamemode_installed" = "non" ] && [ "$mangohud_installed" = "non" ] && [ "$goverlay_installed" = "non" ]; then
log_info "Aucun utilitaire gaming installé"
zenity --info --title="Non installés" --text="Aucun utilitaire gaming n'est installé sur le système."
return
fi
# Demander confirmation
if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller les utilitaires gaming ?"; then
return
fi
# Demander le mot de passe sudo
password=$(zenity --password --title="Authentification - Désinstallation utilitaires" --text="Mot de passe sudo requis pour désinstaller les utilitaires gaming:")
if [ $? -eq 1 ]; then
return
fi
# Vérifier le mot de passe sudo
if ! check_sudo_password "$password"; then
return
fi
(
echo "15" ; echo "# Désinstallation de gamemode..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y gamemode >> "$LOG_FILE" 2>&1
gamemode_remove_result=$?
echo "35" ; echo "# Désinstallation de mangohud..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y mangohud >> "$LOG_FILE" 2>&1
mangohud_remove_result=$?
echo "55" ; echo "# Désinstallation de goverlay..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y goverlay >> "$LOG_FILE" 2>&1
goverlay_remove_result=$?
# Logger les résultats individuels
check_apt_success $gamemode_remove_result "gamemode" "désinstallation"
check_apt_success $mangohud_remove_result "mangohud" "désinstallation"
check_apt_success $goverlay_remove_result "goverlay" "désinstallation"
echo "80" ; echo "# Nettoyage des paquets orphelins..."
echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1
if ! check_apt_success $? "paquets orphelins" "nettoyage"; then
echo "# Avertissement: Erreur lors du nettoyage des paquets orphelins"
fi
echo "100" ; echo "# Vérification de la désinstallation..."
) | zenity --progress \
--title="Désinstallation des utilitaires gaming" \
--text="Initialisation..." \
--percentage=0 \
--width=400 \
--auto-close
# Vérifier si la désinstallation a réussi
gamemode_ok=$(dpkg -l | grep -q "^ii.*gamemode" && echo "✗" || echo "✓")
mangohud_ok=$(dpkg -l | grep -q "^ii.*mangohud" && echo "✗" || echo "✓")
goverlay_ok=$(dpkg -l | grep -q "^ii.*goverlay" && echo "✗" || echo "✓")
if [ "$gamemode_ok" = "✓" ] && [ "$mangohud_ok" = "✓" ] && [ "$goverlay_ok" = "✓" ]; then
log_info "Désinstallation complète des utilitaires gaming réussie"
zenity --info --title="Succès" --text="Tous les utilitaires gaming ont été désinstallés avec succès !"
elif [ "$gamemode_ok" = "✗" ] || [ "$mangohud_ok" = "✗" ] || [ "$goverlay_ok" = "✗" ]; then
log_info "Échec de désinstallation de certains utilitaires gaming"
show_error_logs "Échec de désinstallation de certains utilitaires gaming"
fi
}
# Vérifier et installer zenity si nécessaire (sans sudo)
check_zenity_user() {
if ! command -v zenity &> /dev/null; then
echo "Zenity n'est pas installé. Installation requise pour l'interface graphique..."
echo "Veuillez entrer votre mot de passe sudo pour installer zenity:"
sudo apt-get update > /dev/null 2>&1
sudo apt-get install -y zenity
if ! command -v zenity &> /dev/null; then
echo "Erreur: Impossible d'installer zenity. Interface graphique non disponible."
exit 1
fi
echo "Zenity installé avec succès!"
fi
}
# Vérifier et installer zenity si nécessaire
check_zenity_user
# Initialiser le fichier de log
initialize_log
# Tester le système de logging
log_info "Script démarré avec succès"
log_info "Vérification du système de logging"
log_info "Fichier de log créé dans: $(pwd)/$(basename "$LOG_FILE")"
# Afficher le chemin du log à l'utilisateur en cas de debug
echo "Fichier de log: $(pwd)/$(basename "$LOG_FILE")" >&2
# Afficher le menu d'installation avec bouton désinstaller
selection=$(show_install_selection)
exit_code=$?
# Vérifier si l'utilisateur a cliqué sur "Désinstaller"
if [ $exit_code -eq 1 ] && [ "$selection" = "Désinstaller" ]; then
# Mode désinstallation
selection=$(show_uninstall_selection)
# Vérifier si l'utilisateur a annulé
if [ $? -eq 1 ]; then
exit 0
fi
# Vérifier si aucune sélection
if [ -z "$selection" ]; then
zenity --info --title="Aucune sélection" --text="Aucun composant sélectionné pour la désinstallation."
exit 0
fi
# Traiter les sélections de désinstallation
IFS='|' read -ra SELECTED <<< "$selection"
for component in "${SELECTED[@]}"; do
case $component in
"steam")
uninstall_steam
;;
"heroic")
uninstall_heroic
;;
"lutris")
uninstall_lutris
;;
"bottles")
uninstall_bottles
;;
"wine")
uninstall_wine
;;
"retroarch")
uninstall_retroarch
;;
"flatpak")
uninstall_flatpak
;;
"gearlever")
uninstall_gearlever
;;
"discord")
uninstall_discord
;;
"vesktop")
uninstall_vesktop
;;
"teamspeak")
uninstall_teamspeak
;;
"mumble")
uninstall_mumble
;;
"flatseal")
uninstall_flatseal
;;
"nvidia")
uninstall_nvidia
;;
"utils")
uninstall_utils
;;
esac
done
elif [ $exit_code -eq 1 ]; then
# L'utilisateur a annulé
exit 0
else
# Mode installation
# Vérifier si aucune sélection
if [ -z "$selection" ]; then
zenity --info --title="Aucune sélection" --text="Aucun composant sélectionné pour l'installation."
exit 0
fi
# Créer la liste des applications sélectionnées pour l'affichage
IFS='|' read -ra SELECTED <<< "$selection"
app_list=""
for component in "${SELECTED[@]}"; do
case $component in
"steam") app_list="$app_list\n• Steam" ;;
"heroic") app_list="$app_list\n• Heroic Game Launcher" ;;
"lutris") app_list="$app_list\n• Lutris" ;;
"bottles") app_list="$app_list\n• Bottles" ;;
"wine") app_list="$app_list\n• Wine + Winetricks" ;;
"retroarch") app_list="$app_list\n• RetroArch" ;;
"flatpak") app_list="$app_list\n• Flatpak + Flathub" ;;
"gearlever") app_list="$app_list\n• Gear Lever" ;;
"discord") app_list="$app_list\n• Discord" ;;
"vesktop") app_list="$app_list\n• Vesktop" ;;
"teamspeak") app_list="$app_list\n• TeamSpeak" ;;
"mumble") app_list="$app_list\n• Mumble" ;;
"flatseal") app_list="$app_list\n• Flatseal" ;;
"nvidia") app_list="$app_list\n• NVIDIA + CUDA" ;;
"utils") app_list="$app_list\n• Utilitaires Gaming" ;;
esac
done
# Demander le mot de passe sudo une seule fois pour toutes les installations
if ! get_global_sudo_password "$app_list"; then
exit 0
fi
# Activer le mode installation groupée si plusieurs applications sont sélectionnées
if [ ${#SELECTED[@]} -gt 1 ]; then
start_batch_install ${#SELECTED[@]} "$app_list"
# Afficher une notification au début
zenity --info --timeout=5 \
--title="Debian Gaming Deployment Tool - Installation Multiple" \
--text="Installation de ${#SELECTED[@]} applications en cours...\n\nCeci peut prendre plusieurs minutes.\nVeuillez patienter..." &
fi
# Traiter les sélections d'installation
for component in "${SELECTED[@]}"; do
case $component in
"steam")
install_steam
;;
"heroic")
install_heroic
;;
"lutris")
install_lutris
;;
"bottles")
install_bottles
;;
"wine")
install_wine
;;
"retroarch")
install_retroarch
;;
"flatpak")
install_flatpak
;;
"gearlever")
install_gearlever
;;
"discord")
install_discord
;;
"vesktop")
install_vesktop
;;
"teamspeak")
install_teamspeak
;;
"mumble")
install_mumble
;;
"flatseal")
install_flatseal
;;
"nvidia")
install_nvidia
;;
"utils")
install_utils
;;
esac
# Marquer l'application comme terminée dans le mode groupé
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
case $component in
"steam") next_batch_app "Steam" ;;
"heroic") next_batch_app "Heroic Game Launcher" ;;
"lutris") next_batch_app "Lutris" ;;
"bottles") next_batch_app "Bottles" ;;
"wine") next_batch_app "Wine + Winetricks" ;;
"retroarch") next_batch_app "RetroArch" ;;
"flatpak") next_batch_app "Flatpak + Flathub" ;;
"gearlever") next_batch_app "Gear Lever" ;;
"discord") next_batch_app "Discord" ;;
"vesktop") next_batch_app "Vesktop" ;;
"teamspeak") next_batch_app "TeamSpeak" ;;
"mumble") next_batch_app "Mumble" ;;
"flatseal") next_batch_app "Flatseal" ;;
"nvidia") next_batch_app "NVIDIA + CUDA" ;;
"utils") next_batch_app "Utilitaires Gaming" ;;
esac
fi
done
# Terminer le mode installation groupée et afficher le récapitulatif
if [ "$BATCH_INSTALL_MODE" = "true" ]; then
end_batch_install
fi
# Afficher le récapitulatif final des installations
show_installation_summary
fi
exit 0