#!/usr/bin/env sh # Fonctions d'affichage de messages d'erreur error() { printf "\x1b[31m$1\e[0m\n" exit 1 } # Fonctions d'affichage de messages d'information info() { printf "$1\n" } # Fonctions d'affichage de messages d'avertissement warn() { printf "⚠️ \x1b[33m$1\e[0m\n" } # Affichage d'une ligne de séparation lineSpacer() { echo '-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --' } # Fonction de validation de dépendance validate_dependency() { if ! command -v $1 >/dev/null; then error "!! => $1 est requis pour installer scut. svp installer $1 et essayer a nouveau.\n" fi } # Fonction de validation de tous les dépendances validate_dependencies() { validate_dependency wget info "===> wget ... OK" validate_dependency unzip info "===> unzpip ... OK" validate_dependency sha256sum info "===> sha256sum ... OK" } # Fonction de suppression des fichiers scut-latest.zip* du répertoire courant deleteCurrentscutLatestZip(){ # Vérifier que le ou les fichier scut-latest.zip* n'existe pas if [ -f "scut-latest.zip" ]; then rm -f scut-latest.zip* fi } # Fonction de suppression du fichier scut-latest.zip* deleteOldDownload() { # Vérifier et supprimer le ou les fichier scut-latest.zip* du répertoire courant deleteCurrentscutLatestZip # Vérifier que le répertoire ~/.config/scut/ est vide si non effacer scut et readme if [ -d "~/.config/scut/" ]; then if [ $(ls -A ~/.config/scut/ | wc -l) -eq 0 ]; then rm -rf ~/.config/scut/scut rm -rf ~/.config/scut/README.md fi fi } # Fonction de téléchargement du logiciel downloadSoftware() { # Vérifier que le ou les fichier scut-latest.zip* n'existe pas et les supprimers deleteOldDownload # Télécharge le fichier scut-latest.zip wget -q https://git.bcmaison.cf/Outils/scut-reminder/raw/branch/main/scut-latest.zip # Vérifie le code de retour de wget if [ $? -eq 0 ]; then info "===> Téléchargement de scut-latest.zip réussi!" else error "!! => Erreur lors du téléchargement." fi # Vérifie que le fichier a bien été téléchargé if [ -f "scut-latest.zip" ]; then info "===> Fichier scut-latest.zip téléchargé avec succès." else error "!! => Échec du téléchargement du fichier scut-latest.zip." fi } # Fonction de vérification du checksum du logiciel checksumSoftware() { # Download le fichier de checksum wget -q https://git.bcmaison.cf/Outils/scut-reminder/raw/branch/main/scut-latest.zip.sha256 # Extrait le checksum du fichier CHECKSUM=$(cat scut-latest.zip.sha256 | awk '{ print $1 }') # Vérifie le checksum du fichier téléchargé checksum_actuel=$(sha256sum scut-latest.zip | awk '{ print $1 }') if [ "$CHECKSUM" == "$checksum_actuel" ]; then info "===> Checksum validé - Fichier intègre." else error "!! => Erreur de checksum - Fichier corrompu." fi } # Fonction d'installation du logiciel installSoftware() { # Vérifier si le répertoire existe déjà if [ ! -d "~/.config/scut/" ]; then # Le répertoire n'existe pas, on le crée mkdir -p ~/.config/scut info "===> répertoire ~/.config/scut/ créé avec succès." fi # Désarchiver le zip dans ce dossier si le répertoire ~/.config/scut/ est vide if [ $(ls -A ~/.config/scut/ | wc -l) -eq 0 ]; then info "===> Désarchivage de scut-latest.zip dans ~/.config/scut/" unzip -q -f scut-latest.zip -d ~/.config/scut/ else warn "Le répertoire ~/.config/scut/ n'est pas vide, les configurations existantes ne seront pas écrasées." # Désarchiver seulement le binaire scut et le REDADME.md dans ~/.config/scut/ unzip -q -f -u scut-latest.zip scut README.md -d ~/.config/scut/ fi # Vérifier qu'au moins un fichier a été extrait if [ $(ls -A ~/.config/scut/ | wc -l) -eq 0 ]; then echo "Aucun fichier extrait !" exit 1 fi } # Fonction permettant de déterminer le shell courant setPATHCurrentShell(){ CurrentShell=$(echo $SHELL | awk -F/ '{print $NF}') info "===> Shell courant : $CurrentShell" # vérifier que ~/.config/scut/ est dans la variable PATH if [[ $PATH == *~/.config/scut/* ]]; then warn "===> ~/.config/scut/ est déjà dans la variable PATH" else # si le shell est bash if [ "$CurrentShell" == "bash" ]; then # Ajouter a la variable PATH le path .config/scut/ au fichier .bashrc echo "export PATH=$PATH:~/.config/scut/" >> ~/.bashrc # si le shell est zsh elif [ "$CurrentShell" == "zsh" ]; then # Ajouter a la variable PATH le path .config/scut/ au fichier .zshrc echo "export PATH=$PATH:~/.config/scut/" >> ~/.zshrc # si le shell est fish elif [ "$CurrentShell" == "fish" ]; then # Ajouter a la variable PATH le path .config/scut/ au fichier .config/fish/config.fish echo "set PATH $PATH ~/.config/scut/" >> ~/.config/fish/config.fish # si le shell est NuShell elif [ "$CurrentShell" == "nu" ]; then # Ajouter a la variable PATH le path .config/scut/ au fichier .config/nu/config.toml echo "path = [\"$PATH\", \"~/.config/scut/\"]" >> ~/.config/nu/config.toml else error "!! => Shell courant non supporté : $CurrentShell" error "!! => Veuillez ajouter le path ~/.config/scut/ à votre variable PATH manuellement." error "!! => les shells supportés sont : bash, zsh, fish et NuShell." fi fi } # Fonction de nettoyage du répertoire courant cleanupCurrentDir(){ # Vérifier et supprimer le ou les fichier scut-latest.zip* du répertoire courant deleteCurrentscutLatestZip } # début du script # ==--==--==--==--==--==--== lineSpacer info "=> DÉBUT de l'installation :" lineSpacer # Vérification des dépendances # ==--==--==--==--==--==--== info "\n=> Validation des DÉPENDENCES d'installation :" lineSpacer validate_dependencies # download scut-latest.zip # ==--==--==--==--==--==--== info "\n=> TÉLÉCHARGEMENT du programme :" lineSpacer downloadSoftware # Télécharge le fichier de checksum # ==--==--==--==--==--==--== info "\n=> VÉRIFICATION du checksum :" lineSpacer checksumSoftware # unzip scut-.zip in ~/.config/scut/ # ==--==--==--==--==--==--== info "\n=> INSTALLATION du programme :" lineSpacer installSoftware # add .config/scut to PATH # ==--==--==--==--==--==--== info "\n=> SOUCE var PATH avec ./config/scut :" lineSpacer setPATHCurrentShell # cleanup current directory # ==--==--==--==--==--==--== info "\n=> CLEANUP de l'installation :" lineSpacer cleanupCurrentDir # Fin du script # ==--==--==--==--==--==--== info "\n=> FIN de l'installation ! :-)" lineSpacer