scut-reminder/install.sh

229 lines
6.9 KiB
Bash

#!/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 -fo 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 -fo 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-<date>.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