#! /bin/bash # Fonctions et variables ########################################################### W="--width=600" H="--height=500" ZenityPulsate () { zenity $W --window-icon=borg --progress --pulsate --auto-close } TestBorgRepo () { if [ ! -f "config" ]; then TestBorgErr=1 infoerr=$(echo "Impossible de trouver le fichier de configuration du dépôt.") zenity $W --error --text="$infoerr" exit fi if [ ! -d "data" ]; then TestBorgErr=1 infoerr=$(echo "Impossible de trouver le dossier des données du dépôt.") zenity $W --error --text="$infoerr" 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") zenity $W --error --text="$infoerr" exit fi } dossierprofil="$HOME/.config/borg/profils-borg-zenity/" mkdir -p "$dossierprofil" && cd "$dossierprofil" # Affichage du menu ########################################################### choixmenu=$(echo -e "\ cp\nCréer un nouveau profil/dépôt\n\ ajd\nAjouter un dépôt existant\n\ ap\nAfficher les profils\ " | zenity $H $W --window-icon=$HOME/.icons/borg.svg --list \ --column "id" --column "choix") # Gestion des choix du menu ########################################################### ### Créer un nouveau profil/dépôt ### if [ "$choixmenu" = "cp" ];then borg_repo=$(zenity --title "Dossier du dépôt" --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 ?\n\n\ Si vous chiffrez le dépôt, le fichier-clé du dépôt sera stocké dans le dossier $HOME/.config/borg/keys/.\n\ Veuillez à sauvegarder ce dossier dans un endroit sûr.\n\ Si cette clé ne peut être lue les données ne seront pas récupérables. Notez qu'il n'existe aucun mécanisme de récupération de clé.\n\n\ Si vous ne chiffrez pas le dépôt, les données qu'il contient seront librement accessible par toute personne ayant accès aux fichiers du dépôt. " if [ "$?" = "0" ];then export BORG_PASSPHRASE="" borg init --encryption=keyfile "$borg_repo" | ZenityPulsate zenity $W --info --text "Un nouveau dépôt chiffré a été généré dans $borg_repo" repo_status="chiffré" elif [ "$?" = "1" ];then borg init --encryption=none "$borg_repo" | ZenityPulsate zenity $W --info --text "Un nouveau dépôt en clair a été généré dans $borg_repo" repo_status="non chiffré" fi borg_dir=$(zenity --title "Dossier à sauvegarder" --file-selection --directory) profilename=$(zenity --entry --title "Nom de profil" --text "Nom de profil (pas d'espace ni caractères spéciaux)") nomsauvegarde=$(echo "$profilename") if [ "$profilename" = "" ];then zenity $W --error --text "Pas de nom de profil";exit;fi if [ "$nomsauvegarde" = "" ];then zenity $W --error --text "Pas de nom de sauvegarde";exit;fi cat << EOF >> "$dossierprofil""$profilename".conf nomsauvegarde="$nomsauvegarde" borg_repo="$borg_repo" borg_archive="\$(date +%d_%B_%Y_%H-%M)" borg_dir="$borg_dir" borg_excludes="" borg_compress="" dryrun="" EOF zenity $W --info --text "Le profil «$profilename» a été créé avec ces paramètres\n\nNom de profil : $profilename\nChemin à sauvegarder : $borg_dir\nChemin du dépôt : $borg_repo\nStatut du dépôt : $repo_status" ### Ajouter un dépôt existant ### elif [ "$choixmenu" = "ajd" ];then borg_repo=$(zenity --title "Dossier du dépôt" --file-selection --directory) 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 >> "$dossierprofil""$profilename".conf nomsauvegarde="$nomsauvegarde" borg_repo="$borg_repo" borg_archive="\$(date +%d_%B_%Y_%H-%M)" borg_dir="$borg_dir" borg_excludes="" borg_compress="" dryrun="" EOF zenity $W --info --text "Le dépôt à bien été ajouté.\nLancez «Borg Zenity Sauvegarde» pour faire une sauvegarde." ### Afficher les profils ### elif [ "$choixmenu" = "ap" ];then 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