diff --git a/gag.sh b/gag.sh index 3bb88eb..77abbe4 100644 --- a/gag.sh +++ b/gag.sh @@ -25,9 +25,9 @@ UNDERLINE='\033[4m' # Emojis EMOJI_OK="✅" EMOJI_ERROR="❌" -EMOJI_WARN="⚠️ " -EMOJI_INFO="ℹ️ " -EMOJI_CONFIG="⚙️ " +EMOJI_WARN="⚠ " +EMOJI_INFO="ℹ " +EMOJI_CONFIG="⚙ " EMOJI_BACKUP="📦" EMOJI_RESTORE="🔄" EMOJI_APPS="📱" @@ -40,7 +40,7 @@ EMOJI_BRAVE="🦁" EMOJI_BOTTLES="🍾" EMOJI_LIST="📋" EMOJI_CHECK="🔍" -EMOJI_DELETE="🗑️ " +EMOJI_DELETE="🗑 " # Répertoires de sauvegarde BACKUP_BASE_DIR="$HOME/Backups/gnome-apps-backup" @@ -110,37 +110,37 @@ select_backup_dir() { local count=1 print_section "${EMOJI_LIST} Liste des sauvegardes disponibles" - + if [ ! -d "$BACKUP_BASE_DIR" ]; then - print_error "Aucune sauvegarde disponible" - return 1 + print_error "Aucune sauvegarde disponible" + return 1 fi while IFS= read -r -d '' dir; do - if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then - backups+=("$dir") - local backup_date=$(basename "$dir") - local backup_size=$(du -sh "$dir" 2>/dev/null | cut -f1) - echo -e "${CYAN}${count}.${NC} ${backup_date} (${backup_size})" - ((count++)) - fi + if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then + backups+=("$dir") + local backup_date=$(basename "$dir") + local backup_size=$(du -sh "$dir" 2>/dev/null | cut -f1) + echo -e "${CYAN}${count}.${NC} ${backup_date} (${backup_size})" + ((count++)) + fi done < <(find "$BACKUP_BASE_DIR" -maxdepth 1 -type d -print0 2>/dev/null | sort -z) if [ ${#backups[@]} -eq 0 ]; then - print_error "Aucune sauvegarde disponible" - return 1 + print_error "Aucune sauvegarde disponible" + return 1 fi echo -ne "${YELLOW}${BOLD}Sélectionnez une sauvegarde [1-${#backups[@]}]: ${NC}" read -r choice if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le ${#backups[@]} ]; then - CURRENT_BACKUP="${backups[$((choice-1))]}" - print_success "Sauvegarde sélectionnée: $(basename "$CURRENT_BACKUP")" - return 0 + CURRENT_BACKUP="${backups[$((choice-1))]}" + print_success "Sauvegarde sélectionnée: $(basename "$CURRENT_BACKUP")" + return 0 else - print_error "Sélection invalide" - return 1 + print_error "Sélection invalide" + return 1 fi } @@ -157,81 +157,81 @@ create_backup_dir() { list_backups() { print_section "${EMOJI_LIST} Liste des sauvegardes disponibles" - + if [ ! -d "$BACKUP_BASE_DIR" ]; then - print_error "Aucune sauvegarde disponible" - return 1 + print_error "Aucune sauvegarde disponible" + return 1 fi local count=1 local total_size=0 while IFS= read -r -d '' dir; do - if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then - local backup_date=$(basename "$dir") - local backup_size=$(du -sh "$dir" 2>/dev/null | cut -f1) - local backup_size_bytes=$(du -sb "$dir" 2>/dev/null | cut -f1) - local formatted_date=$(date -d "${backup_date:0:8} ${backup_date:9:2}:${backup_date:11:2}:${backup_date:13:2}" "+%d/%m/%Y %H:%M:%S" 2>/dev/null || echo "$backup_date") - - echo -e "${CYAN}${count}.${NC} ${formatted_date} - Taille: ${backup_size}" - - # Afficher le contenu de la sauvegarde - local content="" - [ -d "$dir/brave" ] && content="${content}Brave " - [ -d "$dir/bottles" ] && content="${content}Bottles " - [ -d "$dir/startup" ] && content="${content}Démarrage " - [ -d "$dir/ollama" ] && content="${content}Ollama " - [ -f "$dir/deb-packages.list" ] && content="${content}DEB " - [ -f "$dir/flatpak-apps.list" ] && content="${content}Flatpak " - - if [ -n "$content" ]; then - echo -e " ${BLUE}Contenu:${NC} ${content}" - fi - - total_size=$((total_size + backup_size_bytes)) - ((count++)) - fi + if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then + local backup_date=$(basename "$dir") + local backup_size=$(du -sh "$dir" 2>/dev/null | cut -f1) + local backup_size_bytes=$(du -sb "$dir" 2>/dev/null | cut -f1) + local formatted_date=$(date -d "${backup_date:0:8} ${backup_date:9:2}:${backup_date:11:2}:${backup_date:13:2}" "+%d/%m/%Y %H:%M:%S" 2>/dev/null || echo "$backup_date") + + echo -e "${CYAN}${count}.${NC} ${formatted_date} - Taille: ${backup_size}" + + # Afficher le contenu de la sauvegarde + local content="" + [ -d "$dir/brave" ] && content="${content}Brave " + [ -d "$dir/bottles" ] && content="${content}Bottles " + [ -d "$dir/startup" ] && content="${content}Démarrage " + [ -d "$dir/ollama" ] && content="${content}Ollama " + [ -f "$dir/deb-packages.list" ] && content="${content}DEB " + [ -f "$dir/flatpak-apps.list" ] && content="${content}Flatpak " + + if [ -n "$content" ]; then + echo -e " ${BLUE}Contenu:${NC} ${content}" + fi + + total_size=$((total_size + backup_size_bytes)) + ((count++)) + fi done < <(find "$BACKUP_BASE_DIR" -maxdepth 1 -type d -print0 2>/dev/null | sort -z) if [ $count -eq 1 ]; then - print_warning "Aucune sauvegarde disponible" + print_warning "Aucune sauvegarde disponible" else - local total_size_human=$(numfmt --to=iec --suffix=B $total_size) - echo -e "\n${BOLD}Total: $((count-1)) sauvegardes - Espace utilisé: ${total_size_human}${NC}" + local total_size_human=$(numfmt --to=iec --suffix=B $total_size) + echo -e "\n${BOLD}Total: $((count-1)) sauvegardes - Espace utilisé: ${total_size_human}${NC}" fi } delete_backups() { while true; do - clear - print_header "${EMOJI_DELETE} Gestion des sauvegardes - Suppression" - - list_backups - - if [ ! -d "$BACKUP_BASE_DIR" ] || [ -z "$(ls -A "$BACKUP_BASE_DIR" 2>/dev/null)" ]; then - echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r - return - fi + clear + print_header "${EMOJI_DELETE} Gestion des sauvegardes - Suppression" + + list_backups + + if [ ! -d "$BACKUP_BASE_DIR" ] || [ -z "$(ls -A "$BACKUP_BASE_DIR" 2>/dev/null)" ]; then + echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" + read -n 1 -s -r + return + fi echo -e "\n${CYAN}Options de suppression:${NC}" - echo -e "${CYAN} 1. ${EMOJI_DELETE} Supprimer une sauvegarde spécifique" - echo -e "${CYAN} 2. ${EMOJI_DELETE} Supprimer les sauvegardes anciennes (> 30 jours)" - echo -e "${CYAN} 3. ${EMOJI_DELETE} Supprimer toutes les sauvegardes" - echo -e "${CYAN} 4. ${EMOJI_INFO} Retour au menu de gestion" - echo -ne "${YELLOW}${BOLD}Choisissez une option [1-4]: ${NC}" - read -r choice + echo -e "${CYAN} 1. ${EMOJI_DELETE} Supprimer une sauvegarde spécifique" + echo -e "${CYAN} 2. ${EMOJI_DELETE} Supprimer les sauvegardes anciennes (> 30 jours)" + echo -e "${CYAN} 3. ${EMOJI_DELETE} Supprimer toutes les sauvegardes" + echo -e "${CYAN} 4. ${EMOJI_INFO} Retour au menu de gestion" + echo -ne "${YELLOW}${BOLD}Choisissez une option [1-4]: ${NC}" + read -r choice case $choice in - 1) delete_specific_backup ;; - 2) delete_old_backups ;; - 3) delete_all_backups ;; - 4) return ;; - *) print_error "Option invalide" ;; - esac + 1) delete_specific_backup ;; + 2) delete_old_backups ;; + 3) delete_all_backups ;; + 4) return ;; + *) print_error "Option invalide" ;; + esac echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r + read -n 1 -s -r done } @@ -240,104 +240,104 @@ delete_specific_backup() { local count=1 print_section "${EMOJI_DELETE} Suppression d'une sauvegarde spécifique" - + while IFS= read -r -d '' dir; do - if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then - backups+=("$dir") - local backup_date=$(basename "$dir") - local backup_size=$(du -sh "$dir" 2>/dev/null | cut -f1) - local formatted_date=$(date -d "${backup_date:0:8} ${backup_date:9:2}:${backup_date:11:2}:${backup_date:13:2}" "+%d/%m/%Y %H:%M:%S" 2>/dev/null || echo "$backup_date") - echo -e "${CYAN}${count}.${NC} ${formatted_date} (${backup_size})" - ((count++)) - fi + if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then + backups+=("$dir") + local backup_date=$(basename "$dir") + local backup_size=$(du -sh "$dir" 2>/dev/null | cut -f1) + local formatted_date=$(date -d "${backup_date:0:8} ${backup_date:9:2}:${backup_date:11:2}:${backup_date:13:2}" "+%d/%m/%Y %H:%M:%S" 2>/dev/null || echo "$backup_date") + echo -e "${CYAN}${count}.${NC} ${formatted_date} (${backup_size})" + ((count++)) + fi done < <(find "$BACKUP_BASE_DIR" -maxdepth 1 -type d -print0 2>/dev/null | sort -z) if [ ${#backups[@]} -eq 0 ]; then - print_error "Aucune sauvegarde à supprimer" - return + print_error "Aucune sauvegarde à supprimer" + return fi echo -ne "${YELLOW}${BOLD}Sélectionnez la sauvegarde à supprimer [1-${#backups[@]}] (0 pour annuler): ${NC}" read -r choice if [ "$choice" = "0" ]; then - print_info "Suppression annulée" - return + print_info "Suppression annulée" + return fi if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le ${#backups[@]} ]; then - local backup_to_delete="${backups[$((choice-1))]}" - local backup_name=$(basename "$backup_to_delete") - - echo -ne "${RED}${BOLD}Êtes-vous sûr de vouloir supprimer la sauvegarde '${backup_name}' ? [y/N]: ${NC}" - read -r confirm - - if [[ "$confirm" =~ ^[Yy]$ ]]; then - rm -rf "$backup_to_delete" && \ - print_success "Sauvegarde '$backup_name' supprimée avec succès" || \ - print_error "Échec de la suppression de la sauvegarde '$backup_name'" - else - print_info "Suppression annulée" - fi + local backup_to_delete="${backups[$((choice-1))]}" + local backup_name=$(basename "$backup_to_delete") + + echo -ne "${RED}${BOLD}Êtes-vous sûr de vouloir supprimer la sauvegarde '${backup_name}' ? [y/N]: ${NC}" + read -r confirm + + if [[ "$confirm" =~ ^[Yy]$ ]]; then + rm -rf "$backup_to_delete" && \ + print_success "Sauvegarde '$backup_name' supprimée avec succès" || \ + print_error "Échec de la suppression de la sauvegarde '$backup_name'" else - print_error "Sélection invalide" + print_info "Suppression annulée" + fi + else + print_error "Sélection invalide" fi } delete_old_backups() { print_section "${EMOJI_DELETE} Suppression des sauvegardes anciennes (> 30 jours)" - + local deleted_count=0 local current_date=$(date +%s) local thirty_days_ago=$((current_date - 30 * 24 * 3600)) while IFS= read -r -d '' dir; do - if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then - local backup_date=$(basename "$dir") - # Extraire la date du nom de fichier (format: YYYYMMDD_HHMMSS) - local backup_date_formatted="${backup_date:0:4}-${backup_date:4:2}-${backup_date:6:2}" - local backup_timestamp=$(date -d "$backup_date_formatted" +%s 2>/dev/null || echo 0) - - if [ "$backup_timestamp" -gt 0 ] && [ "$backup_timestamp" -lt "$thirty_days_ago" ]; then - echo -e "${YELLOW}Suppression de la sauvegarde: $(basename "$dir")${NC}" - rm -rf "$dir" && ((deleted_count++)) - fi - fi + if [ -d "$dir" ] && [ "$(basename "$dir")" != "gnome-apps-backup" ]; then + local backup_date=$(basename "$dir") + # Extraire la date du nom de fichier (format: YYYYMMDD_HHMMSS) + local backup_date_formatted="${backup_date:0:4}-${backup_date:4:2}-${backup_date:6:2}" + local backup_timestamp=$(date -d "$backup_date_formatted" +%s 2>/dev/null || echo 0) + + if [ "$backup_timestamp" -gt 0 ] && [ "$backup_timestamp" -lt "$thirty_days_ago" ]; then + echo -e "${YELLOW}Suppression de la sauvegarde: $(basename "$dir")${NC}" + rm -rf "$dir" && ((deleted_count++)) + fi + fi done < <(find "$BACKUP_BASE_DIR" -maxdepth 1 -type d -print0 2>/dev/null) if [ $deleted_count -gt 0 ]; then - print_success "$deleted_count sauvegarde(s) ancienne(s) supprimée(s)" + print_success "$deleted_count sauvegarde(s) ancienne(s) supprimée(s)" else - print_info "Aucune sauvegarde ancienne à supprimer" + print_info "Aucune sauvegarde ancienne à supprimer" fi } delete_all_backups() { print_section "${EMOJI_DELETE} Suppression de toutes les sauvegardes" - + local backup_count=$(find "$BACKUP_BASE_DIR" -maxdepth 1 -type d ! -path "$BACKUP_BASE_DIR" 2>/dev/null | wc -l) - + if [ "$backup_count" -eq 0 ]; then - print_info "Aucune sauvegarde à supprimer" - return + print_info "Aucune sauvegarde à supprimer" + return fi - + echo -ne "${RED}${BOLD}Êtes-vous sûr de vouloir supprimer TOUTES les sauvegardes ($backup_count) ? [y/N]: ${NC}" read -r confirm - + if [[ "$confirm" =~ ^[Yy]$ ]]; then - echo -ne "${RED}${BOLD}ATTENTION: Cette action est irréversible! Tapez 'SUPPRIMER' pour confirmer: ${NC}" - read -r final_confirm - - if [ "$final_confirm" = "SUPPRIMER" ]; then - find "$BACKUP_BASE_DIR" -maxdepth 1 -type d ! -path "$BACKUP_BASE_DIR" -exec rm -rf {} \; && \ - print_success "Toutes les sauvegardes ont été supprimées" || \ - print_error "Échec de la suppression des sauvegardes" - else - print_info "Suppression annulée" - fi + echo -ne "${RED}${BOLD}ATTENTION: Cette action est irréversible! Tapez 'SUPPRIMER' pour confirmer: ${NC}" + read -r final_confirm + + if [ "$final_confirm" = "SUPPRIMER" ]; then + find "$BACKUP_BASE_DIR" -maxdepth 1 -type d ! -path "$BACKUP_BASE_DIR" -exec rm -rf {} \; && \ + print_success "Toutes les sauvegardes ont été supprimées" || \ + print_error "Échec de la suppression des sauvegardes" else - print_info "Suppression annulée" + print_info "Suppression annulée" + fi + else + print_info "Suppression annulée" fi } @@ -347,116 +347,116 @@ delete_all_backups() { check_requirements() { print_section "${EMOJI_CHECK} Vérification des prérequis système" - + local missing=() local to_install=() - + # Vérifier les outils de base declare -a required_tools=("curl" "wget" "git" "figlet") - + for tool in "${required_tools[@]}"; do - if ! command_exists "$tool"; then - missing+=("$tool") - to_install+=("$tool") - print_warning "$tool n'est pas installé" - fi + if ! command_exists "$tool"; then + missing+=("$tool") + to_install+=("$tool") + print_warning "$tool n'est pas installé" + fi done - + # Vérifier Flatpak if ! command_exists "flatpak"; then - print_warning "Flatpak n'est pas installé - nécessaire pour de nombreuses applications" - to_install+=("flatpak") + print_warning "Flatpak n'est pas installé - nécessaire pour de nombreuses applications" + to_install+=("flatpak") fi - + # Vérifier Docker if ! command_exists "docker"; then - print_warning "Docker n'est pas installé - nécessaire pour Open WebUI" + print_warning "Docker n'est pas installé - nécessaire pour Open WebUI" fi - + # Vérifier Ollama if ! command_exists "ollama"; then - print_warning "Ollama n'est pas installé - nécessaire pour les modèles IA" + print_warning "Ollama n'est pas installé - nécessaire pour les modèles IA" fi - + if [ ${#to_install[@]} -gt 0 ]; then - print_warning "Outils manquants: ${missing[*]}" - echo -ne "${YELLOW}Voulez-vous les installer automatiquement? [y/N]: ${NC}" - read -r response - if [[ "$response" =~ ^[Yy]$ ]]; then - if command_exists apt; then - sudo apt update - sudo apt install -y "${to_install[@]}" - print_success "Outils installés avec succès" - elif command_exists dnf; then - sudo dnf install -y "${to_install[@]}" - print_success "Outils installés avec succès" - elif command_exists pacman; then - sudo pacman -S --noconfirm "${to_install[@]}" - print_success "Outils installés avec succès" - else - print_error "Gestionnaire de paquets non supporté. Veuillez installer manuellement: ${to_install[*]}" - fi - fi + print_warning "Outils manquants: ${missing[*]}" + echo -ne "${YELLOW}Voulez-vous les installer automatiquement? [y/N]: ${NC}" + read -r response + if [[ "$response" =~ ^[Yy]$ ]]; then + if command_exists apt; then + sudo apt update + sudo apt install -y "${to_install[@]}" + print_success "Outils installés avec succès" + elif command_exists dnf; then + sudo dnf install -y "${to_install[@]}" + print_success "Outils installés avec succès" + elif command_exists pacman; then + sudo pacman -S --noconfirm "${to_install[@]}" + print_success "Outils installés avec succès" else - print_success "Tous les prérequis système sont satisfaits" + print_error "Gestionnaire de paquets non supporté. Veuillez installer manuellement: ${to_install[*]}" + fi + fi + else + print_success "Tous les prérequis système sont satisfaits" fi } check_installed_apps() { print_section "${EMOJI_CHECK} Vérification des applications installées" - + print_info "${EMOJI_DEB} Applications DEB:" if command_exists dpkg; then - local deb_count=$(dpkg --get-selections | grep -c install) - echo "Total: $deb_count packages installés" - dpkg --get-selections | head -n 10 - echo "... (plus dans le rapport complet)" + local deb_count=$(dpkg --get-selections | grep -c install) + echo "Total: $deb_count packages installés" + dpkg --get-selections | head -n 10 + echo "... (plus dans le rapport complet)" else - print_warning "dpkg non disponible" + print_warning "dpkg non disponible" fi - + print_info "\n${EMOJI_FLATPAK} Applications Flatpak:" if command_exists flatpak; then - local flatpak_count=$(flatpak list --app 2>/dev/null | wc -l) - echo "Total: $flatpak_count applications Flatpak installées" - flatpak list --app --columns=application 2>/dev/null | head -n 10 - echo "... (plus dans le rapport complet)" + local flatpak_count=$(flatpak list --app 2>/dev/null | wc -l) + echo "Total: $flatpak_count applications Flatpak installées" + flatpak list --app --columns=application 2>/dev/null | head -n 10 + echo "... (plus dans le rapport complet)" else - print_warning "Flatpak non installé" + print_warning "Flatpak non installé" fi - + print_info "\n${EMOJI_INFO} Applications tierces:" for app in "${!THIRD_PARTY_APPS[@]}"; do - if command_exists "${THIRD_PARTY_APPS[$app]}"; then - echo -e "${GREEN}${EMOJI_OK} $app${NC}" - else - echo -e "${RED}${EMOJI_ERROR} $app (manquant)${NC}" - fi + if command_exists "${THIRD_PARTY_APPS[$app]}"; then + echo -e "${GREEN}${EMOJI_OK} $app${NC}" + else + echo -e "${RED}${EMOJI_ERROR} $app (manquant)${NC}" + fi done - + # Vérification spéciale pour Open WebUI print_info "\n${EMOJI_INFO} Open WebUI:" if command_exists docker && docker ps | grep -q "open-webui"; then - echo -e "${GREEN}${EMOJI_OK} Open WebUI (conteneur actif)${NC}" - local port=$(docker ps | grep "open-webui" | sed -n 's/.*:\([0-9]*\)->.*/\1/p' | head -n1) - if [ -n "$port" ]; then - echo -e " ${BLUE}Accessible sur: http://localhost:$port${NC}" - else - echo -e " ${BLUE}Accessible sur: http://localhost:8080${NC}" - fi + echo -e "${GREEN}${EMOJI_OK} Open WebUI (conteneur actif)${NC}" + local port=$(docker ps | grep "open-webui" | sed -n 's/.*:\([0-9]*\)->.*/\1/p' | head -n1) + if [ -n "$port" ]; then + echo -e " ${BLUE}Accessible sur: http://localhost:$port${NC}" else - echo -e "${RED}${EMOJI_ERROR} Open WebUI (conteneur non actif)${NC}" + echo -e " ${BLUE}Accessible sur: http://localhost:8080${NC}" fi - + else + echo -e "${RED}${EMOJI_ERROR} Open WebUI (conteneur non actif)${NC}" + fi + print_info "\n${EMOJI_WARN} Recommandations:" if ! command_exists "ollama"; then - echo "- Installez Ollama pour les fonctionnalités IA" + echo "- Installez Ollama pour les fonctionnalités IA" fi if ! command_exists "docker"; then - echo "- Installez Docker pour exécuter Open WebUI" + echo "- Installez Docker pour exécuter Open WebUI" fi if command_exists flatpak && ! flatpak list 2>/dev/null | grep -q "com.brave.Browser"; then - echo "- Brave Browser n'est pas installé (recommandé)" + echo "- Brave Browser n'est pas installé (recommandé)" fi } @@ -466,112 +466,112 @@ check_installed_apps() { backup_brave() { print_section "${EMOJI_BRAVE} Sauvegarde de Brave Browser (Flatpak)" - + local config_dir="$CURRENT_BACKUP/brave" mkdir -p "$config_dir" - + # Sauvegarde des données Brave Flatpak local brave_data_dir="$HOME/.var/app/com.brave.Browser" if [ -d "$brave_data_dir" ]; then - cp -r "$brave_data_dir" "$config_dir" && \ - print_success "Données Brave sauvegardées" + cp -r "$brave_data_dir" "$config_dir" && \ + print_success "Données Brave sauvegardées" else - print_warning "Aucune donnée Brave trouvée" + print_warning "Aucune donnée Brave trouvée" fi - + # Sauvegarde des préférences if command_exists dconf; then - dconf dump /com/brave/ > "$config_dir/brave-settings.dconf" 2>/dev/null && \ - print_success "Préférences Brave sauvegardées" || \ - print_warning "Aucune préférence Brave à sauvegarder" + dconf dump /com/brave/ > "$config_dir/brave-settings.dconf" 2>/dev/null && \ + print_success "Préférences Brave sauvegardées" || \ + print_warning "Aucune préférence Brave à sauvegarder" else - print_warning "dconf non disponible pour sauvegarder les préférences" + print_warning "dconf non disponible pour sauvegarder les préférences" fi } backup_bottles() { print_section "${EMOJI_BOTTLES} Sauvegarde de Bottles" - + local config_dir="$CURRENT_BACKUP/bottles" mkdir -p "$config_dir" - + # Sauvegarde des bouteilles local bottles_dir="$HOME/.var/app/com.usebottles.bottles/data/bottles" if [ -d "$bottles_dir" ]; then - cp -r "$bottles_dir" "$config_dir" && \ - print_success "Bouteilles Bottles sauvegardées" + cp -r "$bottles_dir" "$config_dir" && \ + print_success "Bouteilles Bottles sauvegardées" else - print_warning "Aucune bouteille Bottles trouvée" + print_warning "Aucune bouteille Bottles trouvée" fi - + # Sauvegarde de la configuration local bottles_config="$HOME/.var/app/com.usebottles.bottles/config" if [ -d "$bottles_config" ]; then - cp -r "$bottles_config" "$config_dir" && \ - print_success "Configuration Bottles sauvegardée" + cp -r "$bottles_config" "$config_dir" && \ + print_success "Configuration Bottles sauvegardée" fi } backup_startup_apps() { print_section "${EMOJI_STARTUP} Sauvegarde des applications de démarrage" - + local startup_dir="$CURRENT_BACKUP/startup" mkdir -p "$startup_dir" - + # Sauvegarde des applications de démarrage if [ -d "$HOME/.config/autostart" ]; then - cp -r "$HOME/.config/autostart" "$startup_dir" && \ - print_success "Applications de démarrage sauvegardées" + cp -r "$HOME/.config/autostart" "$startup_dir" && \ + print_success "Applications de démarrage sauvegardées" else - print_warning "Aucune application de démarrage trouvée" + print_warning "Aucune application de démarrage trouvée" fi } backup_ollama() { print_section "${EMOJI_OLLAMA} Sauvegarde d'Ollama" - + local config_dir="$CURRENT_BACKUP/ollama" mkdir -p "$config_dir" - + # Sauvegarde des modèles if command_exists ollama; then - ollama list > "$config_dir/models.txt" 2>/dev/null && \ - print_success "Liste des modèles sauvegardée" || \ - print_warning "Impossible de sauvegarder la liste des modèles" + ollama list > "$config_dir/models.txt" 2>/dev/null && \ + print_success "Liste des modèles sauvegardée" || \ + print_warning "Impossible de sauvegarder la liste des modèles" else - print_warning "Ollama n'est pas installé" + print_warning "Ollama n'est pas installé" fi - + # Sauvegarde de la configuration if [ -d "$HOME/.ollama" ]; then - cp -r "$HOME/.ollama" "$config_dir" && \ - print_success "Configuration Ollama sauvegardée" + cp -r "$HOME/.ollama" "$config_dir" && \ + print_success "Configuration Ollama sauvegardée" else - print_warning "Aucune configuration Ollama trouvée" + print_warning "Aucune configuration Ollama trouvée" fi } backup_deb_packages() { print_section "${EMOJI_DEB} Sauvegarde des packages DEB" - + if command_exists dpkg; then - dpkg --get-selections > "$CURRENT_BACKUP/deb-packages.list" && \ - print_success "Liste des packages DEB sauvegardée" || \ - print_warning "Impossible de sauvegarder la liste des packages DEB" + dpkg --get-selections > "$CURRENT_BACKUP/deb-packages.list" && \ + print_success "Liste des packages DEB sauvegardée" || \ + print_warning "Impossible de sauvegarder la liste des packages DEB" else - print_warning "dpkg non disponible" + print_warning "dpkg non disponible" fi } backup_flatpak_apps() { print_section "${EMOJI_FLATPAK} Sauvegarde des applications Flatpak" - + if command_exists flatpak; then - flatpak list --app --columns=application > "$CURRENT_BACKUP/flatpak-apps.list" && \ - print_success "Liste des applications Flatpak sauvegardée" || \ - print_warning "Impossible de sauvegarder la liste des applications Flatpak" + flatpak list --app --columns=application > "$CURRENT_BACKUP/flatpak-apps.list" && \ + print_success "Liste des applications Flatpak sauvegardée" || \ + print_warning "Impossible de sauvegarder la liste des applications Flatpak" else - print_warning "Flatpak non installé" + print_warning "Flatpak non installé" fi } @@ -581,131 +581,131 @@ backup_flatpak_apps() { restore_brave() { print_section "${EMOJI_BRAVE} Restauration de Brave Browser" - + local config_dir="$CURRENT_BACKUP/brave" - + if [ -d "$config_dir/com.brave.Browser" ]; then - # Restauration des données - mkdir -p "$HOME/.var/app" - cp -r "$config_dir/com.brave.Browser" "$HOME/.var/app/" && \ - print_success "Données Brave restaurées" + # Restauration des données + mkdir -p "$HOME/.var/app" + cp -r "$config_dir/com.brave.Browser" "$HOME/.var/app/" && \ + print_success "Données Brave restaurées" else - print_warning "Aucune donnée Brave à restaurer" + print_warning "Aucune donnée Brave à restaurer" fi - + if [ -f "$config_dir/brave-settings.dconf" ] && command_exists dconf; then - # Restauration des préférences - dconf load /com/brave/ < "$config_dir/brave-settings.dconf" && \ - print_success "Préférences Brave restaurées" + # Restauration des préférences + dconf load /com/brave/ < "$config_dir/brave-settings.dconf" && \ + print_success "Préférences Brave restaurées" else - print_warning "Aucune préférence Brave à restaurer" + print_warning "Aucune préférence Brave à restaurer" fi } restore_bottles() { print_section "${EMOJI_BOTTLES} Restauration de Bottles" - + local config_dir="$CURRENT_BACKUP/bottles" - + if [ -d "$config_dir/bottles" ]; then - # Restauration des bouteilles - mkdir -p "$HOME/.var/app/com.usebottles.bottles/data" - cp -r "$config_dir/bottles" "$HOME/.var/app/com.usebottles.bottles/data/" && \ - print_success "Bouteilles Bottles restaurées" + # Restauration des bouteilles + mkdir -p "$HOME/.var/app/com.usebottles.bottles/data" + cp -r "$config_dir/bottles" "$HOME/.var/app/com.usebottles.bottles/data/" && \ + print_success "Bouteilles Bottles restaurées" else - print_warning "Aucune bouteille à restaurer" + print_warning "Aucune bouteille à restaurer" fi - + if [ -d "$config_dir/config" ]; then - # Restauration de la configuration - mkdir -p "$HOME/.var/app/com.usebottles.bottles" - cp -r "$config_dir/config" "$HOME/.var/app/com.usebottles.bottles/" && \ - print_success "Configuration Bottles restaurée" + # Restauration de la configuration + mkdir -p "$HOME/.var/app/com.usebottles.bottles" + cp -r "$config_dir/config" "$HOME/.var/app/com.usebottles.bottles/" && \ + print_success "Configuration Bottles restaurée" else - print_warning "Aucune configuration à restaurer" + print_warning "Aucune configuration à restaurer" fi } restore_startup_apps() { print_section "${EMOJI_STARTUP} Restauration des applications de démarrage" - + local config_dir="$CURRENT_BACKUP/startup" - + if [ -d "$config_dir/autostart" ]; then - mkdir -p "$HOME/.config" - cp -r "$config_dir/autostart" "$HOME/.config/" && \ - print_success "Applications de démarrage restaurées" + mkdir -p "$HOME/.config" + cp -r "$config_dir/autostart" "$HOME/.config/" && \ + print_success "Applications de démarrage restaurées" else - print_warning "Aucune application de démarrage à restaurer" + print_warning "Aucune application de démarrage à restaurer" fi } restore_ollama() { print_section "${EMOJI_OLLAMA} Restauration d'Ollama" - + local config_dir="$CURRENT_BACKUP/ollama" - + if [ -d "$config_dir" ]; then - # Restauration de la configuration - if [ -d "$config_dir/.ollama" ]; then - mkdir -p "$HOME" - cp -r "$config_dir/.ollama" "$HOME/" && \ - print_success "Configuration Ollama restaurée" - fi - - # Restauration des modèles - if [ -f "$config_dir/models.txt" ] && command_exists ollama; then - print_info "Téléchargement des modèles Ollama..." - while read -r model; do - if [ -n "$model" ]; then - ollama pull "$model" || print_warning "Impossible de télécharger le modèle: $model" - fi - done < "$config_dir/models.txt" - print_success "Modèles Ollama restaurés" - fi + # Restauration de la configuration + if [ -d "$config_dir/.ollama" ]; then + mkdir -p "$HOME" + cp -r "$config_dir/.ollama" "$HOME/" && \ + print_success "Configuration Ollama restaurée" + fi + + # Restauration des modèles + if [ -f "$config_dir/models.txt" ] && command_exists ollama; then + print_info "Téléchargement des modèles Ollama..." + while read -r model; do + if [ -n "$model" ]; then + ollama pull "$model" || print_warning "Impossible de télécharger le modèle: $model" + fi + done < "$config_dir/models.txt" + print_success "Modèles Ollama restaurés" + fi else - print_warning "Aucune sauvegarde Ollama à restaurer" + print_warning "Aucune sauvegarde Ollama à restaurer" fi } restore_deb_packages() { print_section "${EMOJI_DEB} Restauration des packages DEB" - + if [ -f "$CURRENT_BACKUP/deb-packages.list" ] && command_exists dpkg && command_exists apt; then - echo -ne "${YELLOW}Voulez-vous restaurer les packages DEB ? [y/N]: ${NC}" - read -r response - if [[ "$response" =~ ^[Yy]$ ]]; then - print_info "Installation des packages DEB manquants..." - sudo apt update - while read -r package status; do - if [ "$status" = "install" ] && ! dpkg -l | grep -q "^ii $package "; then - sudo apt install -y "$package" || print_warning "Impossible d'installer: $package" - fi - done < "$CURRENT_BACKUP/deb-packages.list" - print_success "Packages DEB restaurés" - fi + echo -ne "${YELLOW}Voulez-vous restaurer les packages DEB ? [y/N]: ${NC}" + read -r response + if [[ "$response" =~ ^[Yy]$ ]]; then + print_info "Installation des packages DEB manquants..." + sudo apt update + while read -r package status; do + if [ "$status" = "install" ] && ! dpkg -l | grep -q "^ii $package "; then + sudo apt install -y "$package" || print_warning "Impossible d'installer: $package" + fi + done < "$CURRENT_BACKUP/deb-packages.list" + print_success "Packages DEB restaurés" + fi else - print_warning "Aucune liste de packages DEB à restaurer" + print_warning "Aucune liste de packages DEB à restaurer" fi } restore_flatpak_apps() { print_section "${EMOJI_FLATPAK} Restauration des applications Flatpak" - + if [ -f "$CURRENT_BACKUP/flatpak-apps.list" ] && command_exists flatpak; then - echo -ne "${YELLOW}Voulez-vous restaurer les applications Flatpak ? [y/N]: ${NC}" - read -r response - if [[ "$response" =~ ^[Yy]$ ]]; then - print_info "Installation des applications Flatpak manquantes..." - while read -r app; do - if [ -n "$app" ] && ! flatpak list | grep -q "$app"; then - flatpak install -y flathub "$app" || print_warning "Impossible d'installer: $app" - fi - done < "$CURRENT_BACKUP/flatpak-apps.list" - print_success "Applications Flatpak restaurées" - fi + echo -ne "${YELLOW}Voulez-vous restaurer les applications Flatpak ? [y/N]: ${NC}" + read -r response + if [[ "$response" =~ ^[Yy]$ ]]; then + print_info "Installation des applications Flatpak manquantes..." + while read -r app; do + if [ -n "$app" ] && ! flatpak list | grep -q "$app"; then + flatpak install -y flathub "$app" || print_warning "Impossible d'installer: $app" + fi + done < "$CURRENT_BACKUP/flatpak-apps.list" + print_success "Applications Flatpak restaurées" + fi else - print_warning "Aucune liste d'applications Flatpak à restaurer" + print_warning "Aucune liste d'applications Flatpak à restaurer" fi } @@ -715,124 +715,124 @@ restore_flatpak_apps() { install_outlook() { print_info "Installation d'Outlook for Linux..." - + # Téléchargement et installation du package Outlook if command_exists apt; then - mkdir -p ~/Downloads - wget -O ~/Downloads/outlook-for-linux_1.3.13_amd64.deb "https://github.com/mahmoudbahaa/outlook-for-linux/releases/download/v1.3.13-outlook/outlook-for-linux_1.3.13_amd64.deb" || { - print_error "Échec du téléchargement d'Outlook" - return 1 - } - sudo apt install -y ~/Downloads/outlook-for-linux_1.3.13_amd64.deb && { - rm ~/Downloads/outlook-for-linux_1.3.13_amd64.deb - print_success "Outlook for Linux installé avec succès" - } || { - print_error "Échec de l'installation d'Outlook" - } + mkdir -p ~/Downloads + wget -O ~/Downloads/outlook-for-linux_1.3.13_amd64.deb "https://github.com/mahmoudbahaa/outlook-for-linux/releases/download/v1.3.13-outlook/outlook-for-linux_1.3.13_amd64.deb" || { + print_error "Échec du téléchargement d'Outlook" + return 1 + } + sudo apt install -y ~/Downloads/outlook-for-linux_1.3.13_amd64.deb && { + rm ~/Downloads/outlook-for-linux_1.3.13_amd64.deb + print_success "Outlook for Linux installé avec succès" + } || { + print_error "Échec de l'installation d'Outlook" + } else - print_error "Installation d'Outlook non supportée sur ce système" + print_error "Installation d'Outlook non supportée sur ce système" fi } install_teams() { print_info "Installation de Teams for Linux..." - + # Installation de Teams for Linux if command_exists apt; then - mkdir -p ~/Downloads - wget -O ~/Downloads/teams-for-linux_2.1.3_amd64.deb "https://github.com/IsmaelMartinez/teams-for-linux/releases/download/v2.1.3/teams-for-linux_2.1.3_amd64.deb" || { - print_error "Échec du téléchargement de Teams" - return 1 - } - sudo apt install -y ~/Downloads/teams-for-linux_2.1.3_amd64.deb && { - rm ~/Downloads/teams-for-linux_2.1.3_amd64.deb - print_success "Teams for Linux installé avec succès" - } || { - print_error "Échec de l'installation de Teams" - } + mkdir -p ~/Downloads + wget -O ~/Downloads/teams-for-linux_2.1.3_amd64.deb "https://github.com/IsmaelMartinez/teams-for-linux/releases/download/v2.1.3/teams-for-linux_2.1.3_amd64.deb" || { + print_error "Échec du téléchargement de Teams" + return 1 + } + sudo apt install -y ~/Downloads/teams-for-linux_2.1.3_amd64.deb && { + rm ~/Downloads/teams-for-linux_2.1.3_amd64.deb + print_success "Teams for Linux installé avec succès" + } || { + print_error "Échec de l'installation de Teams" + } else - print_error "Installation de Teams non supportée sur ce système" + print_error "Installation de Teams non supportée sur ce système" fi } install_openfortigui() { print_info "Installation d'OpenFortiGUI..." - + # Téléchargement et installation du package OpenFortiGUI if command_exists apt; then - mkdir -p ~/Downloads - wget -O ~/Downloads/openfortigui_0.9.10-1_amd64_noble.deb "https://apt.iteas.at/iteas/pool/main/o/openfortigui/openfortigui_0.9.10-1_amd64_noble.deb" || { - print_error "Échec du téléchargement d'OpenFortiGUI" - return 1 - } - sudo apt install -y ~/Downloads/openfortigui_0.9.10-1_amd64_noble.deb && { - rm ~/Downloads/openfortigui_0.9.10-1_amd64_noble.deb - print_success "OpenFortiGUI installé avec succès" - } || { - print_error "Échec de l'installation d'OpenFortiGUI" - } + mkdir -p ~/Downloads + wget -O ~/Downloads/openfortigui_0.9.10-1_amd64_noble.deb "https://apt.iteas.at/iteas/pool/main/o/openfortigui/openfortigui_0.9.10-1_amd64_noble.deb" || { + print_error "Échec du téléchargement d'OpenFortiGUI" + return 1 + } + sudo apt install -y ~/Downloads/openfortigui_0.9.10-1_amd64_noble.deb && { + rm ~/Downloads/openfortigui_0.9.10-1_amd64_noble.deb + print_success "OpenFortiGUI installé avec succès" + } || { + print_error "Échec de l'installation d'OpenFortiGUI" + } else - print_error "Installation d'OpenFortiGUI non supportée sur ce système" + print_error "Installation d'OpenFortiGUI non supportée sur ce système" fi } install_ollama_stack() { print_info "Installation d'Ollama..." - + # Installation d'Ollama curl -fsSL https://ollama.com/install.sh | sh && \ print_success "Ollama installé avec succès" || { - print_error "Échec de l'installation d'Ollama" - return 1 + print_error "Échec de l'installation d'Ollama" + return 1 } - + # Démarrer le service Ollama if command_exists systemctl; then - sudo systemctl enable ollama || print_warning "Impossible d'activer le service Ollama" - sudo systemctl start ollama || print_warning "Impossible de démarrer le service Ollama" + sudo systemctl enable ollama || print_warning "Impossible d'activer le service Ollama" + sudo systemctl start ollama || print_warning "Impossible de démarrer le service Ollama" fi - + print_info "Installation d'Open WebUI..." - + # Installation d'Open WebUI avec Docker if command_exists docker; then - docker run -d \ - --network=host \ - -v open-webui:/app/backend/data \ - -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \ - --name open-webui \ - --restart always \ - ghcr.io/open-webui/open-webui:main && { - print_success "Open WebUI installé avec succès" - print_info "Accédez à l'interface sur: http://localhost:8080" - } || { - print_error "Échec de l'installation d'Open WebUI" - } + docker run -d \ + --network=host \ + -v open-webui:/app/backend/data \ + -e OLLAMA_BASE_URL=http://127.0.0.1:11434 \ + --name open-webui \ + --restart always \ + ghcr.io/open-webui/open-webui:main && { + print_success "Open WebUI installé avec succès" + print_info "Accédez à l'interface sur: http://localhost:8080" + } || { + print_error "Échec de l'installation d'Open WebUI" + } else - print_error "Docker n'est pas installé. Impossible d'installer Open WebUI." + print_error "Docker n'est pas installé. Impossible d'installer Open WebUI." fi } install_powershell() { print_info "Installation de PowerShell..." - + # Installation de PowerShell if command_exists apt; then - # Importation de la clé GPG de Microsoft - wget -O- https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft.gpg && \ - echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/microsoft-debian-$(lsb_release -cs)-prod $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/microsoft.list && \ - sudo apt update && \ - sudo apt install -y powershell && \ - print_success "PowerShell installé avec succès" || \ - print_error "Échec de l'installation de PowerShell" + # Importation de la clé GPG de Microsoft + wget -O- https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /usr/share/keyrings/microsoft.gpg && \ + echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/microsoft-debian-$(lsb_release -cs)-prod $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/microsoft.list && \ + sudo apt update && \ + sudo apt install -y powershell && \ + print_success "PowerShell installé avec succès" || \ + print_error "Échec de l'installation de PowerShell" elif command_exists dnf; then - sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc && \ - curl -sSL https://packages.microsoft.com/config/rhel/$(rpm -E %rhel)/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo && \ - sudo dnf install -y powershell && \ - print_success "PowerShell installé avec succès" || \ - print_error "Échec de l'installation de PowerShell" + sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc && \ + curl -sSL https://packages.microsoft.com/config/rhel/$(rpm -E %rhel)/prod.repo | sudo tee /etc/yum.repos.d/microsoft.repo && \ + sudo dnf install -y powershell && \ + print_success "PowerShell installé avec succès" || \ + print_error "Échec de l'installation de PowerShell" else - print_error "Installation de PowerShell non supportée sur ce système" + print_error "Installation de PowerShell non supportée sur ce système" fi } @@ -842,29 +842,29 @@ install_powershell() { install_third_party() { while true; do - clear - print_header "${EMOJI_APPS} Menu Applications Tierces" - echo -e "${CYAN} 1. ${EMOJI_APPS} Installer Outlook for Linux" - echo -e "${CYAN} 2. ${EMOJI_APPS} Installer Teams for Linux" - echo -e "${CYAN} 3. ${EMOJI_APPS} Installer OpenFortiGUI" - echo -e "${CYAN} 4. ${EMOJI_OLLAMA} Installer Ollama + Open WebUI" - echo -e "${CYAN} 5. ${EMOJI_PWSH} Installer PowerShell" - echo -e "${CYAN} 6. ${EMOJI_INFO} Retour au menu principal" - echo -ne "${YELLOW}${BOLD}Choisissez une option [1-6]: ${NC}" - read -r choice - - case $choice in - 1) install_outlook ;; - 2) install_teams ;; - 3) install_openfortigui ;; - 4) install_ollama_stack ;; - 5) install_powershell ;; - 6) return ;; - *) print_error "Option invalide" ;; - esac - - echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r + clear + print_header "${EMOJI_APPS} Menu Applications Tierces" + echo -e "${CYAN} 1. ${EMOJI_APPS} Installer Outlook for Linux" + echo -e "${CYAN} 2. ${EMOJI_APPS} Installer Teams for Linux" + echo -e "${CYAN} 3. ${EMOJI_APPS} Installer OpenFortiGUI" + echo -e "${CYAN} 4. ${EMOJI_OLLAMA} Installer Ollama + Open WebUI" + echo -e "${CYAN} 5. ${EMOJI_PWSH} Installer PowerShell" + echo -e "${CYAN} 6. ${EMOJI_INFO} Retour au menu principal" + echo -ne "${YELLOW}${BOLD}Choisissez une option [1-6]: ${NC}" + read -r choice + + case $choice in + 1) install_outlook ;; + 2) install_teams ;; + 3) install_openfortigui ;; + 4) install_ollama_stack ;; + 5) install_powershell ;; + 6) return ;; + *) print_error "Option invalide" ;; + esac + + echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" + read -n 1 -s -r done } @@ -874,60 +874,60 @@ install_third_party() { backup_menu() { while true; do - clear - print_header "${EMOJI_BACKUP} Menu de Sauvegarde" - echo -e "${CYAN} 1. ${EMOJI_BACKUP} Nouvelle sauvegarde complète" - echo -e "${CYAN} 2. ${EMOJI_BRAVE} Sauvegarder Brave Browser" - echo -e "${CYAN} 3. ${EMOJI_BOTTLES} Sauvegarder Bottles" - echo -e "${CYAN} 4. ${EMOJI_STARTUP} Sauvegarder les applications de démarrage" - echo -e "${CYAN} 5. ${EMOJI_OLLAMA} Sauvegarder Ollama" - echo -e "${CYAN} 6. ${EMOJI_DEB} Sauvegarder les packages DEB" - echo -e "${CYAN} 7. ${EMOJI_FLATPAK} Sauvegarder les applications Flatpak" - echo -e "${CYAN} 8. ${EMOJI_INFO} Retour au menu principal" - echo -ne "${YELLOW}${BOLD}Choisissez une option [1-8]: ${NC}" - read -r choice - - case $choice in - 1) - create_backup_dir - backup_brave - backup_bottles - backup_startup_apps - backup_ollama - backup_deb_packages - backup_flatpak_apps - print_success "Sauvegarde complète terminée!" - ;; - 2) - create_backup_dir - backup_brave - ;; - 3) - create_backup_dir - backup_bottles - ;; - 4) - create_backup_dir - backup_startup_apps - ;; - 5) - create_backup_dir - backup_ollama - ;; - 6) - create_backup_dir - backup_deb_packages - ;; - 7) - create_backup_dir - backup_flatpak_apps - ;; - 8) return ;; - *) print_error "Option invalide" ;; - esac - - echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r + clear + print_header "${EMOJI_BACKUP} Menu de Sauvegarde" + echo -e "${CYAN} 1. ${EMOJI_BACKUP} Nouvelle sauvegarde complète" + echo -e "${CYAN} 2. ${EMOJI_BRAVE} Sauvegarder Brave Browser" + echo -e "${CYAN} 3. ${EMOJI_BOTTLES} Sauvegarder Bottles" + echo -e "${CYAN} 4. ${EMOJI_STARTUP} Sauvegarder les applications de démarrage" + echo -e "${CYAN} 5. ${EMOJI_OLLAMA} Sauvegarder Ollama" + echo -e "${CYAN} 6. ${EMOJI_DEB} Sauvegarder les packages DEB" + echo -e "${CYAN} 7. ${EMOJI_FLATPAK} Sauvegarder les applications Flatpak" + echo -e "${CYAN} 8. ${EMOJI_INFO} Retour au menu principal" + echo -ne "${YELLOW}${BOLD}Choisissez une option [1-8]: ${NC}" + read -r choice + + case $choice in + 1) + create_backup_dir + backup_brave + backup_bottles + backup_startup_apps + backup_ollama + backup_deb_packages + backup_flatpak_apps + print_success "Sauvegarde complète terminée!" + ;; + 2) + create_backup_dir + backup_brave + ;; + 3) + create_backup_dir + backup_bottles + ;; + 4) + create_backup_dir + backup_startup_apps + ;; + 5) + create_backup_dir + backup_ollama + ;; + 6) + create_backup_dir + backup_deb_packages + ;; + 7) + create_backup_dir + backup_flatpak_apps + ;; + 8) return ;; + *) print_error "Option invalide" ;; + esac + + echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" + read -n 1 -s -r done } @@ -937,54 +937,54 @@ backup_menu() { restore_menu() { while true; do - clear - print_header "${EMOJI_RESTORE} Menu de Restauration" - - if ! select_backup_dir; then - echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r - return - fi - - while true; do - clear - echo -e "${PURPLE}${BOLD}Restauration: $(basename "$CURRENT_BACKUP")${NC}" - echo -e "${CYAN} 1. ${EMOJI_RESTORE} Restaurer tout" - echo -e "${CYAN} 2. ${EMOJI_BRAVE} Restaurer Brave Browser" - echo -e "${CYAN} 3. ${EMOJI_BOTTLES} Restaurer Bottles" - echo -e "${CYAN} 4. ${EMOJI_STARTUP} Restaurer les applications de démarrage" - echo -e "${CYAN} 5. ${EMOJI_OLLAMA} Restaurer Ollama" - echo -e "${CYAN} 6. ${EMOJI_DEB} Restaurer les packages DEB" - echo -e "${CYAN} 7. ${EMOJI_FLATPAK} Restaurer les applications Flatpak" - echo -e "${CYAN} 8. ${EMOJI_INFO} Changer de sauvegarde" - echo -e "${CYAN} 9. ${EMOJI_INFO} Retour au menu principal" - echo -ne "${YELLOW}${BOLD}Choisissez une option [1-9]: ${NC}" - read -r choice - - case $choice in - 1) - restore_brave - restore_bottles - restore_startup_apps - restore_ollama - restore_deb_packages - restore_flatpak_apps - print_success "Restauration complète terminée!" - ;; - 2) restore_brave ;; - 3) restore_bottles ;; - 4) restore_startup_apps ;; - 5) restore_ollama ;; - 6) restore_deb_packages ;; - 7) restore_flatpak_apps ;; - 8) break ;; - 9) return ;; - *) print_error "Option invalide" ;; - esac - - echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r - done + clear + print_header "${EMOJI_RESTORE} Menu de Restauration" + + if ! select_backup_dir; then + echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" + read -n 1 -s -r + return + fi + + while true; do + clear + echo -e "${PURPLE}${BOLD}Restauration: $(basename "$CURRENT_BACKUP")${NC}" + echo -e "${CYAN} 1. ${EMOJI_RESTORE} Restaurer tout" + echo -e "${CYAN} 2. ${EMOJI_BRAVE} Restaurer Brave Browser" + echo -e "${CYAN} 3. ${EMOJI_BOTTLES} Restaurer Bottles" + echo -e "${CYAN} 4. ${EMOJI_STARTUP} Restaurer les applications de démarrage" + echo -e "${CYAN} 5. ${EMOJI_OLLAMA} Restaurer Ollama" + echo -e "${CYAN} 6. ${EMOJI_DEB} Restaurer les packages DEB" + echo -e "${CYAN} 7. ${EMOJI_FLATPAK} Restaurer les applications Flatpak" + echo -e "${CYAN} 8. ${EMOJI_INFO} Changer de sauvegarde" + echo -e "${CYAN} 9. ${EMOJI_INFO} Retour au menu principal" + echo -ne "${YELLOW}${BOLD}Choisissez une option [1-9]: ${NC}" + read -r choice + + case $choice in + 1) + restore_brave + restore_bottles + restore_startup_apps + restore_ollama + restore_deb_packages + restore_flatpak_apps + print_success "Restauration complète terminée!" + ;; + 2) restore_brave ;; + 3) restore_bottles ;; + 4) restore_startup_apps ;; + 5) restore_ollama ;; + 6) restore_deb_packages ;; + 7) restore_flatpak_apps ;; + 8) break ;; + 9) return ;; + *) print_error "Option invalide" ;; + esac + + echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" + read -n 1 -s -r + done done } @@ -994,41 +994,41 @@ restore_menu() { manage_backups_menu() { while true; do - clear - print_header "${EMOJI_LIST} Menu de Gestion des Sauvegardes" - echo -e "${CYAN} 1. ${EMOJI_LIST} Lister les sauvegardes" - echo -e "${CYAN} 2. ${EMOJI_DELETE} Supprimer des sauvegardes" - echo -e "${CYAN} 3. ${EMOJI_INFO} Informations sur l'espace disque" - echo -e "${CYAN} 4. ${EMOJI_INFO} Retour au menu principal" - echo -ne "${YELLOW}${BOLD}Choisissez une option [1-4]: ${NC}" - read -r choice - - case $choice in - 1) - list_backups - ;; - 2) - delete_backups - ;; - 3) - print_section "${EMOJI_INFO} Informations sur l'espace disque" - if [ -d "$BACKUP_BASE_DIR" ]; then - echo -e "${BLUE}Répertoire de sauvegarde:${NC} $BACKUP_BASE_DIR" - local total_size=$(du -sh "$BACKUP_BASE_DIR" 2>/dev/null | cut -f1) - echo -e "${BLUE}Espace total utilisé:${NC} $total_size" - - local available_space=$(df -h "$HOME" | awk 'NR==2{print $4}') - echo -e "${BLUE}Espace disponible sur $HOME:${NC} $available_space" - else - print_warning "Aucun répertoire de sauvegarde trouvé" - fi - ;; - 4) return ;; - *) print_error "Option invalide" ;; - esac - - echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r + clear + print_header "${EMOJI_LIST} Menu de Gestion des Sauvegardes" + echo -e "${CYAN} 1. ${EMOJI_LIST} Lister les sauvegardes" + echo -e "${CYAN} 2. ${EMOJI_DELETE} Supprimer des sauvegardes" + echo -e "${CYAN} 3. ${EMOJI_INFO} Informations sur l'espace disque" + echo -e "${CYAN} 4. ${EMOJI_INFO} Retour au menu principal" + echo -ne "${YELLOW}${BOLD}Choisissez une option [1-4]: ${NC}" + read -r choice + + case $choice in + 1) + list_backups + ;; + 2) + delete_backups + ;; + 3) + print_section "${EMOJI_INFO} Informations sur l'espace disque" + if [ -d "$BACKUP_BASE_DIR" ]; then + echo -e "${BLUE}Répertoire de sauvegarde:${NC} $BACKUP_BASE_DIR" + local total_size=$(du -sh "$BACKUP_BASE_DIR" 2>/dev/null | cut -f1) + echo -e "${BLUE}Espace total utilisé:${NC} $total_size" + + local available_space=$(df -h "$HOME" | awk 'NR==2{print $4}') + echo -e "${BLUE}Espace disponible sur $HOME:${NC} $available_space" + else + print_warning "Aucun répertoire de sauvegarde trouvé" + fi + ;; + 4) return ;; + *) print_error "Option invalide" ;; + esac + + echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" + read -n 1 -s -r done } @@ -1038,134 +1038,134 @@ manage_backups_menu() { verify_flatpak_repo() { print_section "${EMOJI_FLATPAK} Vérification du dépôt Flatpak" - + if ! command_exists flatpak; then - print_warning "Flatpak n'est pas installé" - echo -ne "${YELLOW}Voulez-vous installer Flatpak ? [y/N]: ${NC}" - read -r response - if [[ "$response" =~ ^[Yy]$ ]]; then - if command_exists apt; then - sudo apt update && sudo apt install -y flatpak - elif command_exists dnf; then - sudo dnf install -y flatpak - elif command_exists pacman; then - sudo pacman -S --noconfirm flatpak - fi - fi + print_warning "Flatpak n'est pas installé" + echo -ne "${YELLOW}Voulez-vous installer Flatpak ? [y/N]: ${NC}" + read -r response + if [[ "$response" =~ ^[Yy]$ ]]; then + if command_exists apt; then + sudo apt update && sudo apt install -y flatpak + elif command_exists dnf; then + sudo dnf install -y flatpak + elif command_exists pacman; then + sudo pacman -S --noconfirm flatpak fi - + fi + fi + if command_exists flatpak; then - if flatpak remotes | grep -q flathub; then - print_success "Dépôt Flathub déjà configuré" - else - print_warning "Dépôt Flathub non configuré" - flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && \ - print_success "Dépôt Flathub ajouté avec succès" || \ - print_error "Échec de l'ajout du dépôt Flathub" - fi + if flatpak remotes | grep -q flathub; then + print_success "Dépôt Flathub déjà configuré" + else + print_warning "Dépôt Flathub non configuré" + flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo && \ + print_success "Dépôt Flathub ajouté avec succès" || \ + print_error "Échec de l'ajout du dépôt Flathub" + fi fi } verify_startup_apps() { print_section "${EMOJI_STARTUP} Vérification des applications de démarrage" - + if [ -d "$HOME/.config/autostart" ]; then - local startup_count=$(ls -1 "$HOME/.config/autostart"/*.desktop 2>/dev/null | wc -l) - if [ "$startup_count" -gt 0 ]; then - print_success "$startup_count application(s) de démarrage configurée(s)" - echo -e "${BLUE}Applications de démarrage:${NC}" - for file in "$HOME/.config/autostart"/*.desktop; do - if [ -f "$file" ]; then - local app_name=$(grep "^Name=" "$file" | cut -d= -f2) - echo " - ${app_name:-$(basename "$file" .desktop)}" - fi - done - else - print_warning "Aucune application de démarrage configurée" - fi + local startup_count=$(ls -1 "$HOME/.config/autostart"/*.desktop 2>/dev/null | wc -l) + if [ "$startup_count" -gt 0 ]; then + print_success "$startup_count application(s) de démarrage configurée(s)" + echo -e "${BLUE}Applications de démarrage:${NC}" + for file in "$HOME/.config/autostart"/*.desktop; do + if [ -f "$file" ]; then + local app_name=$(grep "^Name=" "$file" | cut -d= -f2) + echo " - ${app_name:-$(basename "$file" .desktop)}" + fi + done else - print_warning "Répertoire des applications de démarrage non trouvé" + print_warning "Aucune application de démarrage configurée" + fi + else + print_warning "Répertoire des applications de démarrage non trouvé" fi } verify_ollama_and_webui() { print_section "${EMOJI_OLLAMA} Vérification d'Ollama et Open WebUI" - + # Vérification d'Ollama if command_exists ollama; then - print_success "Ollama installé" - - # Vérifier si le service fonctionne - if systemctl is-active --quiet ollama 2>/dev/null || pgrep -x ollama >/dev/null; then - print_success "Service Ollama actif" - - # Tester la connexion - if ollama list >/dev/null 2>&1; then - local model_count=$(ollama list 2>/dev/null | tail -n +2 | wc -l) - print_success "$model_count modèle(s) disponible(s)" - else - print_warning "Ollama ne répond pas correctement" - fi - else - print_warning "Service Ollama inactif" - fi + print_success "Ollama installé" + + # Vérifier si le service fonctionne + if systemctl is-active --quiet ollama 2>/dev/null || pgrep -x ollama >/dev/null; then + print_success "Service Ollama actif" + + # Tester la connexion + if ollama list >/dev/null 2>&1; then + local model_count=$(ollama list 2>/dev/null | tail -n +2 | wc -l) + print_success "$model_count modèle(s) disponible(s)" else - print_error "Ollama non installé" + print_warning "Ollama ne répond pas correctement" fi - + else + print_warning "Service Ollama inactif" + fi + else + print_error "Ollama non installé" + fi + # Vérification d'Open WebUI if command_exists docker; then - if docker ps | grep -q "open-webui"; then - print_success "Open WebUI (conteneur actif)" - - # Récupérer le port - local port_mapping=$(docker ps | grep "open-webui" | grep -o '0.0.0.0:[0-9]*->8080' | cut -d: -f2 | cut -d- -f1) - if [ -n "$port_mapping" ]; then - print_info "Interface accessible sur: http://localhost:$port_mapping" - else - # Vérifier si c'est en mode host - if docker ps | grep "open-webui" | grep -q "host"; then - print_info "Interface accessible sur: http://localhost:8080" - else - print_warning "Port non déterminé, vérifiez la configuration" - fi - fi - else - print_warning "Open WebUI (conteneur inactif)" - if docker ps -a | grep -q "open-webui"; then - print_info "Conteneur Open WebUI existe mais n'est pas démarré" - else - print_warning "Conteneur Open WebUI non trouvé" - fi - fi + if docker ps | grep -q "open-webui"; then + print_success "Open WebUI (conteneur actif)" + + # Récupérer le port + local port_mapping=$(docker ps | grep "open-webui" | grep -o '0.0.0.0:[0-9]*->8080' | cut -d: -f2 | cut -d- -f1) + if [ -n "$port_mapping" ]; then + print_info "Interface accessible sur: http://localhost:$port_mapping" else - print_error "Docker non installé - nécessaire pour Open WebUI" + # Vérifier si c'est en mode host + if docker ps | grep "open-webui" | grep -q "host"; then + print_info "Interface accessible sur: http://localhost:8080" + else + print_warning "Port non déterminé, vérifiez la configuration" + fi + fi + else + print_warning "Open WebUI (conteneur inactif)" + if docker ps -a | grep -q "open-webui"; then + print_info "Conteneur Open WebUI existe mais n'est pas démarré" + else + print_warning "Conteneur Open WebUI non trouvé" + fi + fi + else + print_error "Docker non installé - nécessaire pour Open WebUI" fi } verification_menu() { while true; do - clear - print_header "${EMOJI_CONFIG} Menu de Vérifications" - echo -e "${CYAN} 1. ${EMOJI_CONFIG} Vérifier les prérequis système" - echo -e "${CYAN} 2. ${EMOJI_FLATPAK} Vérifier le dépôt Flatpak" - echo -e "${CYAN} 3. ${EMOJI_STARTUP} Vérifier les applications de démarrage" - echo -e "${CYAN} 4. ${EMOJI_OLLAMA} Vérifier Ollama et Open WebUI" - echo -e "${CYAN} 5. ${EMOJI_INFO} Retour au menu principal" - echo -ne "${YELLOW}${BOLD}Choisissez une option [1-5]: ${NC}" - read -r choice - - case $choice in - 1) check_requirements ;; - 2) verify_flatpak_repo ;; - 3) verify_startup_apps ;; - 4) verify_ollama_and_webui ;; - 5) return ;; - *) print_error "Option invalide" ;; - esac - - echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r + clear + print_header "${EMOJI_CONFIG} Menu de Vérifications" + echo -e "${CYAN} 1. ${EMOJI_CONFIG} Vérifier les prérequis système" + echo -e "${CYAN} 2. ${EMOJI_FLATPAK} Vérifier le dépôt Flatpak" + echo -e "${CYAN} 3. ${EMOJI_STARTUP} Vérifier les applications de démarrage" + echo -e "${CYAN} 4. ${EMOJI_OLLAMA} Vérifier Ollama et Open WebUI" + echo -e "${CYAN} 5. ${EMOJI_INFO} Retour au menu principal" + echo -ne "${YELLOW}${BOLD}Choisissez une option [1-5]: ${NC}" + read -r choice + + case $choice in + 1) check_requirements ;; + 2) verify_flatpak_repo ;; + 3) verify_startup_apps ;; + 4) verify_ollama_and_webui ;; + 5) return ;; + *) print_error "Option invalide" ;; + esac + + echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" + read -n 1 -s -r done } @@ -1175,51 +1175,51 @@ verification_menu() { main_menu() { while true; do - clear - - # Affichage du titre avec figlet si disponible - if command_exists figlet; then - echo -e "${BLUE}${BOLD}" - figlet -f small "GAG Pro 4.0" - echo -e "${NC}" - else - echo -e "${BLUE}${BOLD}" - echo " ____ _ ____ " - echo " / ___| / \\ / ___| " - echo " | | _ / _ \\ | | _ " - echo " | |_| | / ___ \\ | |_| | " - echo " \\____| /_/ \\_\\ \\____| " - echo -e "${NC}" - fi - - echo -e "${BLUE}${BOLD} G A G (Gestionnaire d'Applications GNOME) - Version Pro 4.0 ${NC}" - echo -e "${BLUE}${BOLD}=============================================================${NC}" - echo -e "${CYAN} 1. ${EMOJI_BACKUP} Sauvegarde" - echo -e "${CYAN} 2. ${EMOJI_RESTORE} Restauration" - echo -e "${CYAN} 3. ${EMOJI_DELETE} Gérer les sauvegardes" - echo -e "${CYAN} 4. ${EMOJI_APPS} Installer des applications tierces" - echo -e "${CYAN} 5. ${EMOJI_CONFIG} Menu de vérifications" - echo -e "${CYAN} 6. ${EMOJI_CHECK} Vérifier les applications installées" - echo -e "${CYAN} 7. ${EMOJI_INFO} Quitter" - echo -ne "${YELLOW}${BOLD}Choisissez une option [1-7]: ${NC}" - read -r choice + clear + + # Affichage du titre avec figlet si disponible + if command_exists figlet; then + echo -e "${PURPLE}${BOLD}" + figlet -f small "GAG Pro 4.0" + echo -e "${NC}" + else + echo -e "${PURPLE}${BOLD}" + echo " ____ _ ____ " + echo " / ___| / \\ / ___| " + echo " | | _ / _ \\ | | _ " + echo " | |_| | / ___ \\ | |_| | " + echo " \\____| /_/ \\_\\ \\____| " + echo -e "${NC}" + fi + + echo -e "${BLUE}${BOLD} G A G (Gestionnaire d'Applications GNOME) - Version Pro 4.0 ${NC}" + echo -e "${BLUE}${BOLD}=============================================================${NC}" + echo -e "${CYAN} 1. ${EMOJI_BACKUP} Sauvegarde" + echo -e "${CYAN} 2. ${EMOJI_RESTORE} Restauration" + echo -e "${CYAN} 3. ${EMOJI_DELETE} Gérer les sauvegardes" + echo -e "${CYAN} 4. ${EMOJI_APPS} Installer des applications tierces" + echo -e "${CYAN} 5. ${EMOJI_CONFIG} Menu de vérifications" + echo -e "${CYAN} 6. ${EMOJI_CHECK} Vérifier les applications installées" + echo -e "${CYAN} 7. ${EMOJI_INFO} Quitter" + echo -ne "${YELLOW}${BOLD}Choisissez une option [1-7]: ${NC}" + read -r choice case $choice in - 1) backup_menu ;; - 2) restore_menu ;; - 3) manage_backups_menu ;; - 4) install_third_party ;; - 5) verification_menu ;; - 6) check_installed_apps ;; - 7) - echo -e "${GREEN}${EMOJI_OK} Merci d'avoir utilisé GAG. À bientôt!${NC}" - exit 0 - ;; - *) print_error "Option invalide" ;; - esac + 1) backup_menu ;; + 2) restore_menu ;; + 3) manage_backups_menu ;; + 4) install_third_party ;; + 5) verification_menu ;; + 6) check_installed_apps ;; + 7) + echo -e "${GREEN}${EMOJI_OK} Merci d'avoir utilisé GAG. À bientôt!${NC}" + exit 0 + ;; + *) print_error "Option invalide" ;; + esac echo -ne "\n${YELLOW}Appuyez sur une touche pour continuer...${NC}" - read -n 1 -s -r + read -n 1 -s -r done } @@ -1230,4 +1230,4 @@ main_menu() { clear print_header "Démarrage de GAG Pro 4.0" check_requirements -main_menu \ No newline at end of file +main_menu