Ajouter gnome_extension.sh

This commit is contained in:
2025-08-13 06:49:13 +00:00
parent 618ed6a0c2
commit 7e4f8eff6a

361
gnome_extension.sh Normal file
View File

@@ -0,0 +1,361 @@
#!/bin/bash
# Script de sauvegarde et restauration des extensions GNOME
# Auteur: Fontaine Johnny
# Version: 1.0
# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Répertoires
BACKUP_DIR="$HOME/Backups/gnome-extensions-backup"
EXTENSIONS_DIR="$HOME/.local/share/gnome-shell/extensions"
CONFIG_DIR="$HOME/.config"
# Fonction d'affichage avec couleurs
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Fonction pour vérifier les prérequis
check_requirements() {
print_info "Vérification des prérequis..."
# Vérifier si GNOME Shell est en cours d'exécution
if ! pgrep -x "gnome-shell" > /dev/null; then
print_warning "GNOME Shell ne semble pas être en cours d'exécution"
fi
# Vérifier si dconf est installé
if ! command -v dconf &> /dev/null; then
print_error "dconf n'est pas installé. Veuillez l'installer avec: sudo apt install dconf-cli"
exit 1
fi
# Vérifier si gsettings est disponible
if ! command -v gsettings &> /dev/null; then
print_error "gsettings n'est pas disponible"
exit 1
fi
print_success "Prérequis vérifiés"
}
# Fonction de sauvegarde
backup_extensions() {
print_info "Début de la sauvegarde des extensions GNOME..."
# Créer le répertoire de sauvegarde
mkdir -p "$BACKUP_DIR"
# Date de la sauvegarde
BACKUP_DATE=$(date +"%Y%m%d_%H%M%S")
BACKUP_FILE="$BACKUP_DIR/gnome-extensions-$BACKUP_DATE.tar.gz"
SETTINGS_FILE="$BACKUP_DIR/gnome-settings-$BACKUP_DATE.dconf"
EXTENSIONS_LIST="$BACKUP_DIR/extensions-list-$BACKUP_DATE.txt"
# Sauvegarder les extensions installées
if [ -d "$EXTENSIONS_DIR" ]; then
print_info "Sauvegarde des fichiers d'extensions..."
tar -czf "$BACKUP_FILE" -C "$HOME/.local/share/gnome-shell" extensions/ 2>/dev/null
if [ $? -eq 0 ]; then
print_success "Extensions sauvegardées dans: $BACKUP_FILE"
else
print_warning "Aucune extension à sauvegarder ou erreur lors de l'archivage"
fi
else
print_warning "Répertoire des extensions non trouvé: $EXTENSIONS_DIR"
fi
# Sauvegarder les paramètres des extensions
print_info "Sauvegarde des paramètres des extensions..."
dconf dump /org/gnome/shell/extensions/ > "$SETTINGS_FILE" 2>/dev/null
if [ -s "$SETTINGS_FILE" ]; then
print_success "Paramètres sauvegardés dans: $SETTINGS_FILE"
else
print_warning "Aucun paramètre d'extension à sauvegarder"
fi
# Créer une liste des extensions activées
print_info "Sauvegarde de la liste des extensions activées..."
gsettings get org.gnome.shell enabled-extensions > "$EXTENSIONS_LIST" 2>/dev/null
if [ -s "$EXTENSIONS_LIST" ]; then
print_success "Liste des extensions sauvegardée dans: $EXTENSIONS_LIST"
else
print_warning "Impossible de récupérer la liste des extensions activées"
fi
# Créer un fichier de métadonnées
METADATA_FILE="$BACKUP_DIR/backup-metadata-$BACKUP_DATE.txt"
{
echo "=== SAUVEGARDE EXTENSIONS GNOME ==="
echo "Date: $(date)"
echo "Utilisateur: $USER"
echo "Version GNOME: $(gnome-shell --version 2>/dev/null || echo 'Non disponible')"
echo "Système: $(lsb_release -d 2>/dev/null | cut -f2 || uname -a)"
echo ""
echo "Fichiers créés:"
echo "- Extensions: $(basename "$BACKUP_FILE")"
echo "- Paramètres: $(basename "$SETTINGS_FILE")"
echo "- Liste: $(basename "$EXTENSIONS_LIST")"
} > "$METADATA_FILE"
print_success "Sauvegarde terminée! Fichiers dans: $BACKUP_DIR"
print_info "Métadonnées sauvegardées dans: $METADATA_FILE"
}
# Fonction de restauration
restore_extensions() {
print_info "Restauration des extensions GNOME..."
# Lister les sauvegardes disponibles
if [ ! -d "$BACKUP_DIR" ] || [ -z "$(ls -A "$BACKUP_DIR"/*.tar.gz 2>/dev/null)" ]; then
print_error "Aucune sauvegarde trouvée dans $BACKUP_DIR"
exit 1
fi
echo "Sauvegardes disponibles:"
select backup_file in "$BACKUP_DIR"/*.tar.gz; do
if [ -n "$backup_file" ]; then
break
else
print_error "Sélection invalide"
fi
done
# Extraire la date de la sauvegarde sélectionnée
BACKUP_DATE=$(basename "$backup_file" | sed 's/gnome-extensions-\(.*\)\.tar\.gz/\1/')
SETTINGS_FILE="$BACKUP_DIR/gnome-settings-$BACKUP_DATE.dconf"
EXTENSIONS_LIST="$BACKUP_DIR/extensions-list-$BACKUP_DATE.txt"
print_info "Restauration depuis: $(basename "$backup_file")"
# Demander confirmation
read -p "Voulez-vous continuer avec la restauration? (y/N): " confirm
if [[ ! "$confirm" =~ ^[Yy]$ ]]; then
print_info "Restauration annulée"
exit 0
fi
# Créer une sauvegarde de sécurité des extensions actuelles
if [ -d "$EXTENSIONS_DIR" ]; then
print_info "Création d'une sauvegarde de sécurité..."
SAFETY_BACKUP="$BACKUP_DIR/safety-backup-$(date +%Y%m%d_%H%M%S).tar.gz"
tar -czf "$SAFETY_BACKUP" -C "$HOME/.local/share/gnome-shell" extensions/ 2>/dev/null
print_success "Sauvegarde de sécurité créée: $SAFETY_BACKUP"
fi
# Restaurer les extensions
print_info "Restauration des fichiers d'extensions..."
mkdir -p "$HOME/.local/share/gnome-shell"
tar -xzf "$backup_file" -C "$HOME/.local/share/gnome-shell" 2>/dev/null
if [ $? -eq 0 ]; then
print_success "Extensions restaurées"
else
print_error "Erreur lors de la restauration des extensions"
fi
# Restaurer les paramètres
if [ -f "$SETTINGS_FILE" ] && [ -s "$SETTINGS_FILE" ]; then
print_info "Restauration des paramètres..."
dconf load /org/gnome/shell/extensions/ < "$SETTINGS_FILE"
print_success "Paramètres restaurés"
else
print_warning "Fichier de paramètres non trouvé ou vide"
fi
# Restaurer la liste des extensions activées
if [ -f "$EXTENSIONS_LIST" ] && [ -s "$EXTENSIONS_LIST" ]; then
print_info "Restauration de la liste des extensions activées..."
ENABLED_EXTENSIONS=$(cat "$EXTENSIONS_LIST")
gsettings set org.gnome.shell enabled-extensions "$ENABLED_EXTENSIONS"
print_success "Liste des extensions activées restaurée"
else
print_warning "Liste des extensions non trouvée"
fi
print_success "Restauration terminée!"
print_warning "Vous devrez peut-être redémarrer GNOME Shell (Alt+F2, tapez 'r') ou vous déconnecter/reconnecter"
}
# Fonction pour lister les sauvegardes
list_backups() {
print_info "Sauvegardes disponibles:"
if [ ! -d "$BACKUP_DIR" ]; then
print_warning "Répertoire de sauvegarde non trouvé: $BACKUP_DIR"
return
fi
for backup in "$BACKUP_DIR"/gnome-extensions-*.tar.gz; do
if [ -f "$backup" ]; then
filename=$(basename "$backup")
date_part=$(echo "$filename" | sed 's/gnome-extensions-\(.*\)\.tar\.gz/\1/')
readable_date=$(echo "$date_part" | sed 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)_\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\3\/\2\/\1 \4:\5:\6/')
size=$(du -h "$backup" | cut -f1)
echo " - $filename (Taille: $size, Date: $readable_date)"
# Vérifier les fichiers associés
metadata_file="$BACKUP_DIR/backup-metadata-$date_part.txt"
if [ -f "$metadata_file" ]; then
echo " └── Métadonnées disponibles"
fi
fi
done
if [ -z "$(ls -A "$BACKUP_DIR"/gnome-extensions-*.tar.gz 2>/dev/null)" ]; then
print_warning "Aucune sauvegarde trouvée"
fi
}
# Fonction pour nettoyer les anciennes sauvegardes
cleanup_backups() {
print_info "Nettoyage des anciennes sauvegardes..."
if [ ! -d "$BACKUP_DIR" ]; then
print_warning "Répertoire de sauvegarde non trouvé"
return
fi
read -p "Combien de sauvegardes souhaitez-vous conserver? (défaut: 5): " keep_count
keep_count=${keep_count:-5}
# Supprimer les anciennes sauvegardes (garder les plus récentes)
ls -t "$BACKUP_DIR"/gnome-extensions-*.tar.gz 2>/dev/null | tail -n +$((keep_count + 1)) | while read -r old_backup; do
if [ -f "$old_backup" ]; then
date_part=$(basename "$old_backup" | sed 's/gnome-extensions-\(.*\)\.tar\.gz/\1/')
print_info "Suppression de $(basename "$old_backup")"
rm -f "$old_backup"
rm -f "$BACKUP_DIR/gnome-settings-$date_part.dconf"
rm -f "$BACKUP_DIR/extensions-list-$date_part.txt"
rm -f "$BACKUP_DIR/backup-metadata-$date_part.txt"
fi
done
print_success "Nettoyage terminé"
}
# Fonction d'aide
show_help() {
echo "Script de sauvegarde et restauration des extensions GNOME"
echo ""
echo "Usage: $0 [OPTION]"
echo ""
echo "Options:"
echo " backup, -b Sauvegarder les extensions"
echo " restore, -r Restaurer les extensions"
echo " list, -l Lister les sauvegardes disponibles"
echo " cleanup, -c Nettoyer les anciennes sauvegardes"
echo " help, -h Afficher cette aide"
echo ""
echo "Répertoire de sauvegarde: $BACKUP_DIR"
}
# Fonction pour afficher le menu principal
show_menu() {
echo ""
echo "=============================================="
echo " Script de gestion des extensions GNOME"
echo "=============================================="
echo ""
echo "Choisissez une action:"
echo "1) Sauvegarder les extensions"
echo "2) Restaurer les extensions"
echo "3) Lister les sauvegardes"
echo "4) Nettoyer les anciennes sauvegardes"
echo "5) Afficher l'aide"
echo "6) Quitter"
echo ""
}
# Fonction pour demander de continuer
ask_continue() {
echo ""
echo "=============================================="
read -p "Appuyez sur Entrée pour revenir au menu principal..."
echo ""
}
# Boucle principale interactive
interactive_menu() {
while true; do
show_menu
read -p "Votre choix (1-6): " choice
case $choice in
1)
check_requirements && backup_extensions
ask_continue
;;
2)
check_requirements && restore_extensions
ask_continue
;;
3)
list_backups
ask_continue
;;
4)
cleanup_backups
ask_continue
;;
5)
show_help
ask_continue
;;
6)
print_info "Au revoir!"
exit 0
;;
*)
print_error "Choix invalide"
sleep 1
;;
esac
done
}
# Programme principal
main() {
case "${1:-}" in
backup|-b)
check_requirements
backup_extensions
;;
restore|-r)
check_requirements
restore_extensions
;;
list|-l)
list_backups
;;
cleanup|-c)
cleanup_backups
;;
help|-h|--help)
show_help
;;
*)
# Mode interactif par défaut
interactive_menu
;;
esac
}
main "$@"