diff --git a/borg-gui.sh b/borg-gui.sh index 2a8dd9f..4dc354a 100755 --- a/borg-gui.sh +++ b/borg-gui.sh @@ -1,15 +1,35 @@ #! /bin/bash +<<<<<<< HEAD +======= +# tests de base +>>>>>>> dev which zenity if [ "$?" != "0" ]; then echo "Zenity n'est pas installé.";exit exit fi +<<<<<<< HEAD +======= +which borg +if [ "$?" != "0" ]; then + echo "borgbackup n'est pas installé.";exit + exit +fi + +>>>>>>> dev # META VARIABLES ################################################################################# export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes export BORG_RELOCATED_REPO_ACCESS_IS_OK=yes +<<<<<<< HEAD +======= +dossierprofil="$HOME/.config/borg/profils-borg-zenity/" +W="--width=600" +H="--height=500" +iconborg="--window-icon=$HOME/.icons/borg.svg" +>>>>>>> dev # FONCTIONS ################################################################################# @@ -17,21 +37,33 @@ TestBorgRepo () { if [ ! -f "config" ]; then TestBorgErr=1 infoerr=$(echo "Impossible de trouver le fichier de configuration borg.") +<<<<<<< HEAD zenity --width=500 --error --text="$infoerr" +======= + zenity $W --error --text="$infoerr" +>>>>>>> dev exit fi if [ ! -d "data" ]; then TestBorgErr=1 infoerr=$(echo "Impossible de trouver le fichier de configuration borg.") +<<<<<<< HEAD zenity --width=500 --error --text="$infoerr" +======= + zenity $W --error --text="$infoerr" +>>>>>>> dev exit fi if [ -d "lock.exclusive" ]; then TestBorgErr=1 infoerr=$(echo "Le dépôt est bloqué, une opération est peut-être en cours") +<<<<<<< HEAD zenity --width=500 --error --text="$infoerr" +======= + zenity $W --error --text="$infoerr" +>>>>>>> dev exit fi } @@ -43,6 +75,7 @@ bobainfoa () { DossierPresent () { if [ ! -d "$1" ]; then +<<<<<<< HEAD inforerror=$(echo "Erreur, le dossier $1 est absent.\nFin du script.") zenity --width=500 --error --text="$inforerror" exit @@ -63,12 +96,37 @@ SauvegardeBorg () { # Profils et tests ################################################################################# +======= + inforerror=$(echo "Erreur, le dossier $1 est absent.") + zenity $W --error --text="$inforerror" + VarDossierPresent="false" + fi +} + +ZenityPulsate () { + zenity $W $iconborg --progress --pulsate --auto-close +} + +BorgFilter () { + if [ "$filter" = "" ];then + Borg_Archive=$(borg list --short $borg_repo | zenity $H $iconborg --list --title "Listes des archives" --column "Archive") + else + Borg_Archive=$(borg list --short $borg_repo| grep $filter | zenity $H $iconborg --list --title "Listes des archives" --column "Archive") + fi +} + +################################################################################# +# Profils et tests +################################################################################# + +>>>>>>> dev # si $1 n'est pas vide fichier de profil = $1 # sinon afficher les profils disponibles if [ ! $1 = "" ]; then fichierprofil="$1" . "$1" else +<<<<<<< HEAD fichierprofil=$(ls -1 $HOME/.config/borg/*.txt | zenity --height=500 --width=600 --list --title "Profils" --column "profil") && . $fichierprofil fi @@ -79,12 +137,35 @@ if [ "$nomsauvegarde" = "" ]; then elif [ "$borg_repo" = "" ]; then infoerr=$(echo "Variable \$borg_repo absente") zenity --width=200 --error --text="$infoerr" +======= + cd $dossierprofil + fichierprofil=$(ls -1 *.conf | cut -d. -f1 | \ + zenity $W $H $iconborg --list \ + --title "Liste des profils" \ + --text "Choisir un profil dans la liste" \ + --column "Fichier de profil"\ + ) && . "$dossierprofil"/"$fichierprofil".conf +fi + +if [ "$fichierprofil" = "" ]; then + infoerr=$(echo "Aucun profil choisi.") + zenity $W --error --text="$infoerr" + exit +elif [ "$nomsauvegarde" = "" ]; then + infoerr=$(echo "Nom de sauvegarde non défini.") + zenity $W --error --text="$infoerr" + exit +elif [ "$borg_repo" = "" ]; then + infoerr=$(echo "Variable \$borg_repo absente") + zenity $W --error --text="$infoerr" +>>>>>>> dev exit fi cd $borg_repo TestBorgRepo +<<<<<<< HEAD ################################################################################# # MENU PRINCIPAL ################################################################################# @@ -142,4 +223,186 @@ elif [ "$choixmenu" = "afficher_variables_profil" ];then elif [ "$choixmenu" = "" ];then zenity --width=500 --info --text="Aucun choix, retour au menu." fi +======= + +################################################################################# +# Fichier de configuration globale +################################################################################# + +if [ -f $HOME/.config/borg/borg-zenity.conf ];then +. $HOME/.config/borg/borg-zenity.conf +fi + + +################################################################################# +# MENU PRINCIPAL Gestion des options du menu +################################################################################# + +while [ ! "$quitter" = "yes" ];do + +# si aucune archive n'est montée, cacher l'entrée de menu «Démonter une archive» +if [ "$(mount | grep borgfs)" != "" ];then +MenuDemonter="dm\nDemonter une archive\ndmt\nDémonter toutes les archives\n" +else +MenuDemonter="" +fi + +# afficher l'espace disque sous condition, la variable vient du fichier borg-zenity.conf +EspaceDisqueUtil=$(df -k --output=pcent $borg_repo | tail -n +2 | cut -d% -f1) +if [ $EspaceDisqueUtil -gt $seuil_alerte_espace_disque ];then +MenuEspaceDisque="ed\n/!\ Espace disque utilisé : $EspaceDisqueUtil %\n" +else +MenuEspaceDisque="" +fi + +################################################################################# +# Affichage du menu +################################################################################# + +if [ $menu_avance = "true" ];then +choixmenu=$(echo -e "\ +cs\nCréer l'archive : $(echo $borg_archive)\n\ +ms\nMonter une archive\n\ +$(echo $MenuDemonter)\ +ss\nSupprimmer une archive\n\ +sss\nSupprimmer des archives\n\ +is\nInformation archive\n\ +fi\nFiltre : "$filter"\n\ +--\n------------------------------------------\n\ +id\nInformation sur le dépôt\n\ +ap\nAfficher le profil\n\ +--\n------------------------------------------\n\ +$(echo $MenuEspaceDisque)\ +qu\nQUITTER\ +" | zenity $iconborg --list $H $W --title "BORG GUI : $nomsauvegarde" \ +--hide-header --hide-column=1 --column "id" --column "choix") + +else +choixmenu=$(echo -e "\ +cs\nCréer l'archive : $(echo $borg_archive)\n\ +ms\nMonter une archive\n\ +$(echo $MenuDemonter)\ +ss\nSupprimmer une archive\n\ +is\nInformation archive\n\ +$(echo $MenuEspaceDisque)\ +qu\nQUITTER\ +" | zenity $iconborg --list $H $W --title "BORG GUI : $nomsauvegarde" \ +--hide-header --hide-column=1 --column "id" --column "choix") +fi + + + +################################################################################# +# Gestion des choix du menu +################################################################################# + + if [ "$choixmenu" = "" ];then + echo "" + + elif [ "$choixmenu" = "cs" ];then + # Créer une archive + + TestBorgRepo + + DossierPresent $borg_repo + DossierPresent $borg_dir + + borg list --short $borg_repo | grep $borg_archive + if [ "$?" = "0" ];then + zenity --warning $W $iconborg --text "L'archive existe déjà." + else + if [ "$VarDossierPresent" != "false" ];then + borg create $borg_excludes $borg_compress $borg_repo::$borg_archive $borg_dir | ZenityPulsate + sync | ZenityPulsate + zenity --notification --text "Sauvegarde $nomsauvegarde terminée" + zenity $W --info --text "Sauvegarde $nomsauvegarde terminée" + fi + fi + + + elif [ "$choixmenu" = "ms" ];then + # Monter une archive + BorgFilter + if [ ! "$Borg_Archive" = "" ];then + mkdir $HOME/$Borg_Archive + borg mount $borg_repo::$Borg_Archive $HOME/$Borg_Archive | ZenityPulsate + zenity $W --info --text="La sauvegarde est disponible dans le dossier\n$HOME/$Borg_Archive" + fi + + elif [ "$choixmenu" = "dm" ];then + # Demonter une archive + ptnmontage=$(mount | grep borgfs | cut -d" " -f3 | zenity $W $H $iconborg --list --title "Liste des points de montages" --column "Archive") + if [ ! "$ptnmontage" = "" ];then + fusermount -u $ptnmontage | ZenityPulsate + sleep 2 | ZenityPulsate + rmdir $ptnmontage | ZenityPulsate + fi + + elif [ "$choixmenu" = "dmt" ];then + # Demonter toutes les archives + while [ $(mount | grep borgfs | cut -d" " -f3 | head -n 1) ];do + ptnmontage="$(mount | grep borgfs | cut -d" " -f3 | head -n 1)" + notify-send -i $HOME/.icons/borg.svg "borg-zenity" "Démontage de $ptnmontage" + fusermount -uz $ptnmontage && sleep 2 && rmdir $ptnmontage + done + + + elif [ "$choixmenu" = "ss" ];then + # Supprimmer une archive + BorgFilter + if [ "$Borg_Archive" = "" ];then + zenity $W --info --text "Aucune archive choisie, retour au menu" + else + borg delete $borg_repo::$Borg_Archive | ZenityPulsate + zenity $W --info --text="Suppresion de l'archive $Borg_Archive terminée" + fi + + elif [ "$choixmenu" = "sss" ];then + # Supprimmer des archives + + if [ "$filter" = "" ];then + Borg_Archive=$(borg list --short $borg_repo | sed s/^/\\n/g | zenity $H $iconborg --list --checklist --title "Listes des archives" --column "Sel" --column "Archive") + else + Borg_Archive=$(borg list --short $borg_repo | grep $filter | sed s/^/S\\n/g | zenity $H $iconborg --list --checklist --title "Listes des archives" --column "S" --column "Archive") + fi + + if [ "$Borg_Archive" = "" ];then + zenity $W --info --text "Aucune archive choisie, retour au menu" + else + borg delete $borg_repo::$(echo "$Borg_Archive" | sed s/\|/\ /g) | ZenityPulsate + zenity $W --info --text="Suppression des archives terminée.\nArchives supprimmées : $(echo "$Borg_Archive" | sed s/\|/\ /g)" + fi + + + elif [ "$choixmenu" = "is" ];then + # Information archive + BorgFilter + if [ "$Borg_Archive" = "" ];then + zenity $W --info --text "Aucune archive choisie, retour au menu" + else + zenity $W --info --text="$(borg info $borg_repo::$Borg_Archive)" | ZenityPulsate + fi + + elif [ "$choixmenu" = "fi" ];then + #Filtre + filter=$(zenity --entry) + + elif [ "$choixmenu" = "id" ];then + # Information sur le dépôt + zenity $W --info --text="$(borg info $borg_repo)" | ZenityPulsate + + elif [ "$choixmenu" = "ap" ];then + # Afficher le profil + zenity $W $H --info --text="$(cd $dossierprofil && cat "$fichierprofil".conf)" + + + elif [ "$choixmenu" = "qu" ];then + if [ "$(mount | grep borgfs)" = "" ];then + quitter="yes" + else + zenity $W --warning --text="Une ou des archives sont montées.\nDémontez-le afin de laisser le dépôt dans un état cohérent." + fi + + fi +>>>>>>> dev done diff --git a/borg-zenity.conf b/borg-zenity.conf new file mode 100644 index 0000000..949679b --- /dev/null +++ b/borg-zenity.conf @@ -0,0 +1,2 @@ +menu_avance="false" +seuil_alerte_espace_disque="90" \ No newline at end of file diff --git a/captures/icone_profils.png b/captures/icone_profils.png new file mode 100644 index 0000000..030aeb7 Binary files /dev/null and b/captures/icone_profils.png differ diff --git a/captures/icone_sauvegarde.png b/captures/icone_sauvegarde.png new file mode 100644 index 0000000..fdffa3b Binary files /dev/null and b/captures/icone_sauvegarde.png differ diff --git a/captures/interfaceprincipale.png b/captures/interfaceprincipale.png new file mode 100644 index 0000000..dc2bce9 Binary files /dev/null and b/captures/interfaceprincipale.png differ diff --git a/captures/listedesarchives.png b/captures/listedesarchives.png new file mode 100644 index 0000000..6e7a796 Binary files /dev/null and b/captures/listedesarchives.png differ diff --git a/captures/selecteurdeprofils.png b/captures/selecteurdeprofils.png new file mode 100644 index 0000000..4d6eb80 Binary files /dev/null and b/captures/selecteurdeprofils.png differ diff --git a/gestprofilsborgzenity.desktop b/gestprofilsborgzenity.desktop new file mode 100644 index 0000000..53f8f40 --- /dev/null +++ b/gestprofilsborgzenity.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Borg Zenity Profils +Exec=bin/profile-manager.sh +Icon=borgzenity-profils +Type=Application +Categories=Utility; diff --git a/icons/borg.svg b/icons/borg.svg new file mode 100644 index 0000000..cf15b4a --- /dev/null +++ b/icons/borg.svg @@ -0,0 +1,75 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/icons/borgzenity-profils.svg b/icons/borgzenity-profils.svg new file mode 100644 index 0000000..6d55fac --- /dev/null +++ b/icons/borgzenity-profils.svg @@ -0,0 +1,102 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/icons/borgzenity-sauvegarde.svg b/icons/borgzenity-sauvegarde.svg new file mode 100644 index 0000000..f4ce679 --- /dev/null +++ b/icons/borgzenity-sauvegarde.svg @@ -0,0 +1,87 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..97063a4 --- /dev/null +++ b/install.sh @@ -0,0 +1,34 @@ +#! /bin/bash + +# Borg zenity install and update +which zenity +if [ "$?" != "0" ]; then + bash testdistro.sh || exit +fi + +which borg +if [ "$?" != "0" ]; then + bash testdistro.sh || exit +fi + +mkdir -p $HOME/bin/ $HOME/.icons/ $HOME/.local/share/applications/ + +# copie des fichiers +cp -fv icons/borg.svg $HOME/.icons/ +cp -fv icons/borgzenity-profils.svg $HOME/.icons/ +cp -fv icons/borgzenity-sauvegarde.svg $HOME/.icons/ + +cp -fv sauvegarde-borg.desktop $HOME/.local/share/applications/ +cp -fv gestprofilsborgzenity.desktop $HOME/.local/share/applications/ + +cp -fv borg-gui.sh $HOME/bin/ +cp -fv profile-manager.sh $HOME/bin/ + +cp -fv borg-zenity.conf $HOME/.config/borg/ + +# réglages des droits +chmod 700 $HOME/bin/borg-gui.sh +chmod 700 $HOME/bin/profile-manager.sh + +echo "--------------------" +echo "Installation terminée." diff --git a/profil_exemple.conf b/profil_exemple.conf new file mode 100755 index 0000000..90a6e20 --- /dev/null +++ b/profil_exemple.conf @@ -0,0 +1,6 @@ +nomsauvegarde="" +borg_repo="" +borg_archive="$(date +%d_%B_%Y)" +borg_dir="" +borg_excludes="" +borg_compress="--compress zlib,5" diff --git a/profile-manager.sh b/profile-manager.sh new file mode 100644 index 0000000..702e412 --- /dev/null +++ b/profile-manager.sh @@ -0,0 +1,74 @@ +#! /bin/bash + +ZenityPulsate () { +zenity $W --window-icon=$HOME/.icons/borg.svg --progress --pulsate --auto-close +} + +W="--width=600" +H="--height=500" + +dossierprofil="$HOME/.config/borg/" +cd $dossierprofil + +# affichage du menu + +choixmenu=$(echo -e "\ +cp\nCréer un nouveau profil/dépôt\n\ +ap\nAfficher les profils\ +" | zenity $H $W --window-icon=$HOME/.icons/borg.svg --list \ +--column "id" --column "choix") + +# gestion des choix du menu + +if [ "$choixmenu" = "cp" ];then +# Créer un nouveau profil/dépôt +borg_repo=$(zenity --file-selection --directory) +if [ ! -z "$(ls -A $borg_repo)" ]; then +zenity $W --error --text="Erreur, le dossier n'est pas vide." +exit +fi + +zenity $W --question --text "Chiffrer le dépôt ? (fortement recommandé)" + +if [ "$?" = "0" ];then + zenity $W --warning --text \ + "Le fichier-clé du dépot sera stocké dans le dossier $HOME/.config/borg/keys/.\n\n\ + Veuillez à sauvegarder ce dossier dans un endroit sûr.\n\n\ + Si cette clé ne peut être lue les données ne seront pas récupérables.\n\n\ + Notez qu'il n'existe aucun mécanisme de récupération de clé." + borg init $borg_repo | ZenityPulsate + zenity $W --info --text "Un nouveau dépot chiffré a été généré dans $borg_repo" +elif [ "$?" = "1" ];then + zenity $W --warning --text \ + "Je comprends qu'en ne sécurisant pas mon dépot les données qu'il contient seront librement accessible par toute personne ayant accès aux fichiers du dépôt." + borg init --encryption none $borg_repo | ZenityPulsate + zenity $W --info --text "Un nouveau dépot en clair a été généré dans $borg_repo" +fi + +borg_dir=$(zenity --title "Dossier à sauvegarder" --file-selection --directory) + +vars=$(zenity --forms \ +--text "Laisser les champs vides pour les options par défaut" \ +--add-entry "Nom de sauvegarde" \ +--add-entry "Nom de profil (pas d'espace ni caractères spéciaux)") +nomsauvegarde=$(echo $vars | cut -d\| -f1) +profilename=$(echo $vars | cut -d\| -f2) + +cat << EOF >> $HOME/.config/borg/"$profilename".conf +nomsauvegarde="$nomsauvegarde" +borg_repo="$borg_repo" +borg_archive="\$(date +%d_%B_%Y_%H-%M-%S)" +borg_dir="$borg_dir" +borg_excludes="" +borg_compress="" +dryrun="" +EOF + +elif [ "$choixmenu" = "ap" ];then +# Afficher les profils +fichierprofil=$(ls -1 *.conf | zenity $H $W --window-icon=$HOME/.icons/borg.svg --list --title "Liste des profils" --text "Choisir un profil dans la liste" --hide-header --column "profil") +zenity $W $H --info --text="$(cd $dossierprofil && cat $fichierprofil)" + +elif [ "$choixmenu" = "" ];then +exit +fi diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..298a602 --- /dev/null +++ b/readme.md @@ -0,0 +1,44 @@ +# Borg Zenity + +Une interface graphique en français pour BorgBackup. + +Pre-requis : Borg-zeniy utilise `borgbackup` et `zenity` pour fonctionner. +Le script devrait les installer automatiquement en détectant votre distribution. +S'il n'y parvient pas vous devrez les installer manuellement. + +## Installation (version de développement) +Avant tout sachez que la version dans la branche `dev` est encore en test. +L'installation devrait pouvoir se faire en une ligne de commande. Copiez ceci dans votre terminal. +``` +wget -O borg-zenity.zip https://git.djan-gicquel.fr/borg-zenity/zipball/dev && unzip -d borg-zenity borg-zenity.zip && cd borg-zenity && bash install.sh +``` +Cette commande va télécharger les fichiers d'installation et exécuter le script d'installation. + +Vous devrez entrer votre mot de passe administrateur et répondre oui ou Y ou YES lorsque le gestionnaire de paquet de votre distribution vous demandera d'installer les paquets `borgbackup` et `zenity`. + +Une fois l’installation terminée vous pouvez supprimmer le fichier `borg-zenity.zip` et le dossier `borg-zenity`. + +## Gestionnaire de profils +![icône gestionnaire de profils](https://git.djan-gicquel.fr/borg-zenity/raw/dev/captures/icone_profils.png) + +Si vous n'utilisez pas encore `borgbackup` (ce qui normalement est le cas), il faudra tout d'abord créer un profil de sauvegarde. +Pour cela utiliser l’icône "Borg Zenity Profils" dans votre menu principal et sélectionnez «Créer un nouveau profil/dépôt». +Sélectionnez le dossier dans lequel sera créé le dépôt. C'est l'emplacement de votre sauvegarde, en général on utilise un disque dur externe. +Puis répondez à la question concernant le chiffrement du dépôt. Les fichiers du dépôt sont initialisés. +Sélectionnez ensuite un dossier à sauvegarder puis choisissez un nom de profil. Celui-ci sera stocké comme fichier donc évitez si possible les espaces et les caractères spéciaux. + +Il n'est pour l'instant pas possible de supprimer un profil via l'interface car la suppression laisserait des traces dans la configuration de borgbackup. +Pour supprimer un dépôt, rendez-vous dans le dossier du dépôt, ouvrez un terminal et tapez `borg delete .` puis validez avec "YES" si vous êtes sur de vous. Le dépôt sera supprimé proprement. Il faudra également supprimer le fichier de profil dans `~/.config/borg/` pour qu'il n'apparaisse plus dans borg-zenity. + + +## Interface principale +![icône interface principale](https://git.djan-gicquel.fr/borg-zenity/raw/dev/captures/icone_sauvegarde.png) + +Pour lancer l'interface principale cliquez sur l'icône «Borg Zenity Sauvegarde» dans le menu et sélectionnez le profil voulu. +En vocabulaire borg, une archive est une sauvegarde. + +Pour créer une sauvegarde cliquez sur «Créer une archive». La première sauvegarde prendra du temps, les suivantes seront plus rapide. + +Pour voir le contenu d'une archive déjà sauvegardée cliquez sur «Monter une archive». Un nouveau dossier sera créé en lecture seule dans votre dossier maison. Il contiendra les fichiers de l'archive. Pensez à démonter l'archive dans le menu correspondant avant de quitter Borg Zenity. + +Pour quitter Borg Zenity sélectionnez «QUITTER» puis validez ceci afin pouvoir faire quelques tests avant de quitter le logiciel. diff --git a/sauvegarde-borg.desktop b/sauvegarde-borg.desktop new file mode 100644 index 0000000..916517e --- /dev/null +++ b/sauvegarde-borg.desktop @@ -0,0 +1,6 @@ +[Desktop Entry] +Name=Borg Zenity Sauvegarde +Exec=bin/borg-gui.sh +Icon=borgzenity-sauvegarde +Type=Application +Categories=Utility; diff --git a/testdistro.sh b/testdistro.sh new file mode 100755 index 0000000..98bcff0 --- /dev/null +++ b/testdistro.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +if [ -f /etc/os-release ]; then + # freedesktop.org and systemd + . /etc/os-release + OS=$NAME + VER=$VERSION_ID +elif type lsb_release >/dev/null 2>&1; then + # linuxbase.org + OS=$(lsb_release -si) + VER=$(lsb_release -sr) +elif [ -f /etc/lsb-release ]; then + # For some versions of Debian/Ubuntu without lsb_release command + . /etc/lsb-release + OS=$DISTRIB_ID + VER=$DISTRIB_RELEASE +elif [ -f /etc/debian_version ]; then + # Older Debian/Ubuntu/etc. + OS=Debian + VER=$(cat /etc/debian_version) +elif [ -f /etc/SuSe-release ]; then + # Older SuSE/etc. + OS=Suse +elif [ -f /etc/redhat-release ]; then + # Older Red Hat, CentOS, etc. + OS=Redhat +else + echo "La distribution n'a pas été détecté." + echo "Installez les paquets \"borgbackup\" et \"zenity\" manuellement." + exit +fi + +echo "OS = $OS" + +if [[ "$OS" =~ "Fedora" ]];then +echo "Fedora detecté" +sudo dnf install borgbackup zenity + +elif [[ "$OS" =~ Mageia ]];then +# non fonctionnel sur Mageia 8, le paquet borgbackup n'existe pas encore +echo "Mageia detecté" +su -c "dnf install borgbackup zenity" + +elif [[ "$OS" =~ Debian ]];then +echo "Debian detecté" +su -c apt install -y borgbackup zenity + +elif [[ "$OS" =~ Ubuntu ]];then +echo "Ubuntu detecté" +sudo apt install -y borgbackup zenity + +elif [[ "$OS" =~ "Linux Mint" ]];then +echo "Linux Mint detecté" +sudo apt install -y borgbackup zenity + +elif [[ "$OS" =~ Manjaro ]];then +echo "Manjaro detecté" +sudo pacman -Sy borgbackup zenity + +else + echo "La distribution n'a pas été détecté." + echo "Installez les paquets \"borgbackup\" et \"zenity\" manuellement." + exit +fi \ No newline at end of file