diff --git a/README.md b/README.md index e63a457..459d95b 100644 --- a/README.md +++ b/README.md @@ -114,6 +114,7 @@ MRDevs Tools integra herramientas modernas de Charm para mejorar la experiencia | Comando | Descripción | |---------|-------------| | `bin/helix_install.sh` | Instala Helix Editor con soporte multiplataforma (apt, snap, pacman, etc.) | +| `bin/helix_install.sh -u` | Desinstala Helix Editor del sistema | | `bin/vscode_install.sh` | Instala Visual Studio Code con detección automática del SO y sus métodos de instalación | | `bin/vscode_install.sh -u` | Desinstala Visual Studio Code del sistema | | `bin/zettlr_install.sh` | Instala Zettlr Markdown Editor con detección automática del SO | diff --git a/bin/helix_install.sh b/bin/helix_install.sh index cd6513c..75757b0 100755 --- a/bin/helix_install.sh +++ b/bin/helix_install.sh @@ -1,14 +1,14 @@ #!/bin/bash #Script : helix_install.sh #Apps : MRDEVS TOOLS -#Description : Instala Helix Editor (console) +#Description : Instala/Desinstala Helix Editor (console) #Author : Mauro Rosero Pérez #Company Email : mauro@rosero.one #Personal Email : mauro.rosero@gmail.com #Created : 2025/03/11 15:00:00 -#Modified : 2025/03/19 11:57:08 -#Version : 1.2.0 -#Use Notes : +#Modified : 2025/04/05 21:30:00 +#Version : 1.3.0 +#Use Notes : Uso: ./helix_install.sh [-u|--uninstall] #============================================================================== # Derechos de Autor [2025] [Mauro Rosero P. ] #============================================================================== @@ -25,6 +25,21 @@ # Debería haber recibido una copia de la Licencia Pública Affero General # junto con este programa. Si no la recibió, consulte . +# Procesamiento de parámetros +UNINSTALL=0 +for arg in "$@"; do + case $arg in + -u|--uninstall) + UNINSTALL=1 + shift + ;; + *) + # Ignorar argumentos desconocidos + shift + ;; + esac +done + # Configuración inicial SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" BIN_BASE="bin" @@ -78,6 +93,98 @@ run_cmd() { return $? } +# Función para desinstalar Helix mediante Snap +uninstall_helix_snap() { + dialog --backtitle "${title}" --infobox "${hx_016}" 3 40 + run_cmd snap remove helix + return $? +} + +# Función para desinstalar Helix instalado mediante tarball +uninstall_helix_tarball() { + dialog --backtitle "${title}" --infobox "${hx_016}" 3 40 + + # Eliminar binario y archivos de runtime + run_cmd rm -f /usr/local/bin/hx + run_cmd rm -rf /usr/local/lib/helix + + # Eliminar archivos de configuración en el directorio home del usuario + dialog --backtitle "${title}" --infobox "${hx_021}" 3 40 + rm -rf ~/.config/helix + + return 0 +} + +# Función para desinstalar Helix según el sistema operativo +uninstall_helix() { + local OS_TYPE=$(uname -s) + local DISTRO="" + local INSTALL_METHOD="" + + dialog --backtitle "${title}" --infobox "${hx_022}" 3 40 + + # Determinar el método de desinstalación según el sistema operativo + if [[ "$OS_TYPE" == "Linux" ]]; then + if command -v apt-get &> /dev/null; then + DISTRO="Debian/Ubuntu" + + # Verificar si es Ubuntu (para usar snap) o Debian + if grep -qi "ubuntu" /etc/os-release; then + # Verificar si helix está instalado por snap + if snap list 2>/dev/null | grep -q "helix"; then + INSTALL_METHOD="snap" + else + INSTALL_METHOD="tarball" + fi + else + # Para Debian generalmente se instala por tarball + INSTALL_METHOD="tarball" + fi + elif command -v pacman &> /dev/null; then + DISTRO="Arch Linux" + INSTALL_METHOD="package" + run_cmd pacman -Rns --noconfirm helix + elif command -v dnf &> /dev/null; then + DISTRO="Fedora" + INSTALL_METHOD="package" + run_cmd dnf remove -y helix + elif command -v yum &> /dev/null; then + DISTRO="CentOS/RHEL" + # Probablemente instalado por tarball + INSTALL_METHOD="tarball" + else + # Si no se reconoce el gestor de paquetes, asumir tarball + INSTALL_METHOD="tarball" + fi + elif [[ "$OS_TYPE" == "FreeBSD" ]]; then + DISTRO="FreeBSD" + INSTALL_METHOD="package" + run_cmd pkg remove -y helix + elif [[ "$OS_TYPE" == "Darwin" ]]; then + DISTRO="macOS" + INSTALL_METHOD="package" + brew uninstall helix + else + dialog_error_box "${head_error}" "${os_nofound}" + return 1 + fi + + # Seleccionar el método de desinstalación + if [[ "$INSTALL_METHOD" == "snap" ]]; then + uninstall_helix_snap + elif [[ "$INSTALL_METHOD" == "tarball" ]]; then + uninstall_helix_tarball + fi + # El método "package" ya se ha ejecutado para Arch, Fedora, FreeBSD y macOS + + # Verificar que se desinstalara correctamente + if ! command -v hx &> /dev/null; then + return 0 + else + return 1 + fi +} + # Función para instalar Helix según el sistema operativo install_helix() { local OS_TYPE=$(uname -s) @@ -253,46 +360,89 @@ fi clear dialog_error_box "${hx_001}" "${hx_002}" -# Preguntar al usuario si desea continuar -dialog_yesno "${hx_009}" -if [ $? -ne 0 ]; then - dialog_error_box "${head_canceled}" "${npm_008}" - finish -fi - -# Mostrar un progress bar para indicar el avance de la instalación -( - # Inicializar progreso - echo 0; sleep 1 - echo 20; echo "# ${hx_003}" - sleep 1 - echo 40; echo "# ${hx_004}" - sleep 1 - echo 60; echo "# ${hx_005}" - - # Instalar Helix - install_helix - INSTALL_RESULT=$? - - # Verificar el resultado de la instalación - if [ $INSTALL_RESULT -eq 0 ]; then - echo 90; echo "# ${hx_006}" - else - echo 90; echo "# ${hx_008}" +# Preguntar al usuario si desea instalar o desinstalar Helix +if [ $UNINSTALL -eq 1 ]; then + dialog_yesno "${hx_019}" + if [ $? -ne 0 ]; then + dialog_error_box "${head_canceled}" "${npm_008}" + finish fi - sleep 1 - # Finalizar - echo 100 - sleep 1 -) | dialog --backtitle "${title}" --title "${npm_018}" --gauge "${hx_010}" 10 70 0 - -# Verificar la versión instalada -if command -v hx &> /dev/null; then - hx_version=$(hx --version 2>&1 | head -n 1 || echo "Desconocida") - dialog_error_box "${npm_014}" "${hx_006}\n\n${hx_007} ${hx_version}" + # Mostrar un progress bar para indicar el avance de la desinstalación + ( + # Inicializar progreso + echo 0; sleep 1 + echo 25; echo "# ${hx_022}" + sleep 1 + echo 50; echo "# ${hx_016}" + sleep 1 + echo 75; echo "# ${hx_021}" + + # Desinstalar Helix + uninstall_helix + UNINSTALL_RESULT=$? + + # Verificar el resultado de la desinstalación + if [ $UNINSTALL_RESULT -eq 0 ]; then + echo 90; echo "# ${hx_017}" + else + echo 90; echo "# ${hx_018}" + fi + sleep 1 + + # Finalizar + echo 100 + sleep 1 + ) | dialog --backtitle "${title}" --title "${npm_026}" --gauge "${hx_020}" 10 70 0 + + # Verificar si la desinstalación fue exitosa + if ! command -v hx &> /dev/null; then + dialog_error_box "${npm_028}" "${hx_017}" + else + dialog_error_box "${head_error}" "${hx_018}" + fi else - dialog_error_box "${head_error}" "${hx_008}" + # Instalación + dialog_yesno "${hx_009}" + if [ $? -ne 0 ]; then + dialog_error_box "${head_canceled}" "${npm_008}" + finish + fi + + # Mostrar un progress bar para indicar el avance de la instalación + ( + # Inicializar progreso + echo 0; sleep 1 + echo 20; echo "# ${hx_003}" + sleep 1 + echo 40; echo "# ${hx_004}" + sleep 1 + echo 60; echo "# ${hx_005}" + + # Instalar Helix + install_helix + INSTALL_RESULT=$? + + # Verificar el resultado de la instalación + if [ $INSTALL_RESULT -eq 0 ]; then + echo 90; echo "# ${hx_006}" + else + echo 90; echo "# ${hx_008}" + fi + sleep 1 + + # Finalizar + echo 100 + sleep 1 + ) | dialog --backtitle "${title}" --title "${npm_018}" --gauge "${hx_010}" 10 70 0 + + # Verificar la versión instalada + if command -v hx &> /dev/null; then + hx_version=$(hx --version 2>&1 | head -n 1 || echo "Desconocida") + dialog_error_box "${npm_014}" "${hx_006}\n\n${hx_007} ${hx_version}" + else + dialog_error_box "${head_error}" "${hx_008}" + fi fi # Salir diff --git a/bin/msg/head.es b/bin/msg/head.es index a3a6db1..9a16b8c 100644 --- a/bin/msg/head.es +++ b/bin/msg/head.es @@ -153,21 +153,28 @@ npm_058="El token de Cortana ha sido encriptado exitosamente en" npm_059="Falló la encriptación del token de Cortana." npm_060="Configuración de PATH actualizada. Para aplicar cambios permanentes, reinicie su terminal después de la instalación o ejecute:" -hx_001="Instalador de Helix Editor" -hx_002="Este script instalará Helix Editor. Soporta Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)." +hx_001="Gestor de Helix Editor" +hx_002="Este script permite instalar o desinstalar Helix Editor. Soporta Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)." hx_003="Descargando la última versión de Helix..." hx_004="Instalando Helix..." hx_005="Configurando Helix..." -hx_013="Instalando Helix mediante snap..." -hx_014="Verificando disponibilidad de snap..." -hx_015="Instalando snap..." hx_006="Helix instalado exitosamente." hx_007="Versión de Helix instalada:" hx_008="Helix no se instaló correctamente." hx_009="¿Desea instalar Helix Editor?" hx_010="Instalación en progreso..." -hx_011="Se requiere acceso root para instalar Helix." +hx_011="Se requiere acceso root para instalar o desinstalar Helix." hx_012="Creando directorio de destino..." +hx_013="Instalando Helix mediante snap..." +hx_014="Verificando disponibilidad de snap..." +hx_015="Instalando snap..." +hx_016="Desinstalando Helix Editor..." +hx_017="Helix desinstalado exitosamente." +hx_018="Error al desinstalar Helix." +hx_019="¿Desea desinstalar Helix Editor?" +hx_020="Desinstalación en progreso..." +hx_021="Limpiando archivos de configuración..." +hx_022="Verificando método de instalación anterior..." zl_001="Instalador de Zettlr Markdown Editor" zl_002="Este script instalará Zettlr Markdown Editor. Soporta Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)."