devs/bin/zettlr_install.sh
Mauro Rosero P. b71ff6069b
[IMPROVED] Mensajes internacionalizados en zettlr_install.sh
- Modificados diálogos para usar variables de mensajes desde head.es
- Mejorado el formato de los mensajes de confirmación
- Actualizado encabezado para mostrar versión con formato estándar
- Estandarizado el mensaje de finalización y cancelación

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-04-04 10:13:11 -05:00

516 lines
No EOL
16 KiB
Bash
Executable file

#!/bin/bash
#Script : zettlr_install.sh
#Apps : MRDEVS TOOLS
#Description : Instala Zettlr Markdown Editor con soporte multiplataforma
#Author : Cortana Rosero One <cortana@rosero.one>
#Generated : Created by Claude Code (claude-3-7-sonnet-20250219)
#Created : 2025/04/04 12:00:00
#Modified : 2025/04/04 12:00:00
#Version : 1.3.1
#Use Notes : Ejecutar sin parámetros para instalación interactiva
# -u para desinstalar
#==============================================================================
# Derechos de Autor 2025 Mauro Rosero P. <mauro@rosero.one>
#==============================================================================
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública Affero General de GNU tal como
# lo publica la Free Software Foundation, ya sea la versión 3 de la licencia,
# o (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la
# Licencia Pública Affero General de GNU para obtener más detalles.
#
# Debería haber recibido una copia de la Licencia Pública Affero General
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
# Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_LANG="head.es"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/$BIN_CFGS/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
# Cargar bibliotecas comunes
if [ -f "$SCRIPT_DIR/$BIN_LIBS/base.lib" ]; then
source "$SCRIPT_DIR/$BIN_LIBS/base.lib"
else
echo "Error: No se encontró la biblioteca base.lib"
exit 1
fi
# Cargar mensajes en español
if [ -f "$SCRIPT_DIR/$BIN_MESG/$BIN_LANG" ]; then
source "$SCRIPT_DIR/$BIN_MESG/$BIN_LANG"
else
echo "Error: No se encontraron los archivos de mensajes"
exit 1
fi
# Verificar si se está solicitando la desinstalación
UNINSTALL=0
if [ "$1" = "-u" ]; then
UNINSTALL=1
fi
# Definir la versión y URLs
ZETTLR_VERSION="3.0.3"
GITHUB_API_URL="https://api.github.com/repos/Zettlr/Zettlr/releases/latest"
# Función para obtener la última versión de Zettlr desde GitHub
get_latest_version() {
if command -v curl &>/dev/null; then
ZETTLR_LATEST_VERSION=$(curl -s $GITHUB_API_URL | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 2-)
if [ -n "$ZETTLR_LATEST_VERSION" ]; then
ZETTLR_VERSION=$ZETTLR_LATEST_VERSION
fi
fi
echo "Versión a instalar: $ZETTLR_VERSION"
}
# Función para detectar el sistema operativo
detect_os() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
elif [ -f /etc/lsb-release ]; then
. /etc/lsb-release
OS=$DISTRIB_ID
VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
OS="Debian"
VER=$(cat /etc/debian_version)
elif [ -f /etc/redhat-release ]; then
OS=$(cat /etc/redhat-release | cut -d ' ' -f 1)
VER=$(cat /etc/redhat-release | grep -oE '[0-9]+\.[0-9]+')
elif [ "$(uname)" == "Darwin" ]; then
OS="macOS"
VER=$(sw_vers -productVersion)
elif [ "$(uname)" == "FreeBSD" ]; then
OS="FreeBSD"
VER=$(uname -r)
else
OS="Unknown"
VER="Unknown"
fi
echo "$OS"
}
# Función para obtener la arquitectura del sistema
get_arch() {
ARCH=$(uname -m)
# Normalizar la arquitectura
if [ "$ARCH" = "x86_64" ]; then
ARCH="amd64"
elif [[ "$ARCH" == "arm"* ]] || [ "$ARCH" = "aarch64" ]; then
ARCH="arm64"
else
ARCH="i386"
fi
echo $ARCH
}
# Función para instalar Zettlr en sistemas basados en Debian/Ubuntu
install_zettlr_debian() {
local arch=$(get_arch)
echo -e "\n${head_info}: Instalando dependencias necesarias..."
sudo apt update
sudo apt install -y wget
echo -e "\n${head_info}: Descargando Zettlr versión $ZETTLR_VERSION para $arch..."
if [ "$arch" = "amd64" ]; then
wget -O /tmp/zettlr.deb "https://github.com/Zettlr/Zettlr/releases/download/v${ZETTLR_VERSION}/Zettlr-${ZETTLR_VERSION}-amd64.deb"
elif [ "$arch" = "arm64" ]; then
wget -O /tmp/zettlr.deb "https://github.com/Zettlr/Zettlr/releases/download/v${ZETTLR_VERSION}/Zettlr-${ZETTLR_VERSION}-arm64.deb"
else
echo -e "\n${head_error}: Arquitectura $arch no soportada para Zettlr."
return 1
fi
echo -e "\n${head_info}: Instalando Zettlr..."
sudo apt install -y /tmp/zettlr.deb
rm -f /tmp/zettlr.deb
# Verificar la instalación
if command -v zettlr &>/dev/null || [ -f /usr/bin/zettlr ] || [ -f /opt/Zettlr/zettlr ]; then
echo -e "\n${head_success}: Zettlr ha sido instalado correctamente."
return 0
else
echo -e "\n${head_error}: No se pudo instalar Zettlr."
return 1
fi
}
# Función para desinstalar Zettlr en sistemas basados en Debian/Ubuntu
uninstall_zettlr_debian() {
echo -e "\n${head_info}: Desinstalando Zettlr..."
sudo apt remove --purge -y zettlr
sudo apt autoremove -y
# Eliminar archivos de configuración residuales
echo -e "\n${head_info}: Limpiando archivos de configuración..."
rm -rf ~/.config/Zettlr
echo -e "\n${head_success}: Zettlr ha sido desinstalado correctamente."
return 0
}
# Función para instalar Zettlr en sistemas basados en Red Hat
install_zettlr_redhat() {
local arch=$(get_arch)
echo -e "\n${head_info}: Instalando dependencias necesarias..."
sudo dnf check-update
sudo dnf install -y wget
echo -e "\n${head_info}: Descargando Zettlr versión $ZETTLR_VERSION para $arch..."
if [ "$arch" = "amd64" ]; then
wget -O /tmp/zettlr.rpm "https://github.com/Zettlr/Zettlr/releases/download/v${ZETTLR_VERSION}/Zettlr-${ZETTLR_VERSION}.x86_64.rpm"
elif [ "$arch" = "arm64" ]; then
wget -O /tmp/zettlr.rpm "https://github.com/Zettlr/Zettlr/releases/download/v${ZETTLR_VERSION}/Zettlr-${ZETTLR_VERSION}.arm64.rpm"
else
echo -e "\n${head_error}: Arquitectura $arch no soportada para Zettlr."
return 1
fi
echo -e "\n${head_info}: Instalando Zettlr..."
sudo dnf install -y /tmp/zettlr.rpm
rm -f /tmp/zettlr.rpm
# Verificar la instalación
if command -v zettlr &>/dev/null || [ -f /usr/bin/zettlr ] || [ -f /opt/Zettlr/zettlr ]; then
echo -e "\n${head_success}: Zettlr ha sido instalado correctamente."
return 0
else
echo -e "\n${head_error}: No se pudo instalar Zettlr."
return 1
fi
}
# Función para desinstalar Zettlr en sistemas basados en Red Hat
uninstall_zettlr_redhat() {
echo -e "\n${head_info}: Desinstalando Zettlr..."
sudo dnf remove -y zettlr
# Eliminar archivos de configuración residuales
echo -e "\n${head_info}: Limpiando archivos de configuración..."
rm -rf ~/.config/Zettlr
echo -e "\n${head_success}: Zettlr ha sido desinstalado correctamente."
return 0
}
# Función para instalar Zettlr en Arch Linux
install_zettlr_arch() {
echo -e "\n${head_info}: Actualizando repositorios..."
sudo pacman -Sy
echo -e "\n${head_info}: Instalando dependencias necesarias..."
sudo pacman -S --needed --noconfirm base-devel git
# Verificar si yay está instalado
if ! command -v yay &>/dev/null; then
echo -e "\n${head_info}: Instalando yay (AUR helper)..."
TMP_DIR=$(mktemp -d)
cd "$TMP_DIR"
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si --noconfirm
cd
rm -rf "$TMP_DIR"
fi
echo -e "\n${head_info}: Instalando Zettlr desde AUR..."
yay -S --noconfirm zettlr-bin
# Verificar la instalación
if command -v zettlr &>/dev/null || [ -f /usr/bin/zettlr ]; then
echo -e "\n${head_success}: Zettlr ha sido instalado correctamente."
return 0
else
echo -e "\n${head_error}: No se pudo instalar Zettlr."
return 1
fi
}
# Función para desinstalar Zettlr en Arch Linux
uninstall_zettlr_arch() {
echo -e "\n${head_info}: Desinstalando Zettlr..."
if pacman -Qi zettlr-bin &>/dev/null; then
sudo pacman -R --noconfirm zettlr-bin
elif pacman -Qi zettlr &>/dev/null; then
sudo pacman -R --noconfirm zettlr
fi
# Eliminar archivos de configuración residuales
echo -e "\n${head_info}: Limpiando archivos de configuración..."
rm -rf ~/.config/Zettlr
echo -e "\n${head_success}: Zettlr ha sido desinstalado correctamente."
return 0
}
# Función para instalar Zettlr en macOS
install_zettlr_macos() {
echo -e "\n${head_info}: Verificando si Homebrew está instalado..."
if ! command -v brew &>/dev/null; then
echo -e "\n${head_info}: Instalando Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
echo -e "\n${head_info}: Instalando Zettlr mediante Homebrew..."
brew install --cask zettlr
# Verificar la instalación
if [ -d "/Applications/Zettlr.app" ]; then
echo -e "\n${head_success}: Zettlr ha sido instalado correctamente."
return 0
else
echo -e "\n${head_error}: No se pudo instalar Zettlr."
return 1
fi
}
# Función para desinstalar Zettlr en macOS
uninstall_zettlr_macos() {
echo -e "\n${head_info}: Desinstalando Zettlr..."
if command -v brew &>/dev/null; then
brew uninstall --cask zettlr
fi
# Eliminar la aplicación manualmente si brew no funcionó
if [ -d "/Applications/Zettlr.app" ]; then
rm -rf "/Applications/Zettlr.app"
fi
# Eliminar archivos de configuración
rm -rf ~/Library/Application\ Support/Zettlr
echo -e "\n${head_success}: Zettlr ha sido desinstalado correctamente."
return 0
}
# Función para instalar Zettlr en FreeBSD
install_zettlr_freebsd() {
echo -e "\n${head_info}: FreeBSD no tiene soporte oficial para Zettlr."
echo -e "${head_info}: Se puede intentar utilizar la versión AppImage o la instalación manual."
local arch=$(get_arch)
if [ "$arch" = "amd64" ]; then
echo -e "\n${head_info}: Descargando AppImage de Zettlr..."
fetch -o /tmp/Zettlr.AppImage "https://github.com/Zettlr/Zettlr/releases/download/v${ZETTLR_VERSION}/Zettlr-${ZETTLR_VERSION}-x86_64.AppImage"
chmod +x /tmp/Zettlr.AppImage
mkdir -p "$HOME/Applications"
mv /tmp/Zettlr.AppImage "$HOME/Applications/"
echo -e "\n${head_info}: Creando enlace simbólico..."
mkdir -p "$HOME/bin"
ln -sf "$HOME/Applications/Zettlr.AppImage" "$HOME/bin/zettlr"
echo -e "\n${head_success}: Zettlr ha sido instalado en $HOME/Applications/Zettlr.AppImage"
echo -e "${head_info}: Para ejecutar Zettlr, use: $HOME/bin/zettlr"
return 0
else
echo -e "\n${head_error}: Arquitectura $arch no soportada para Zettlr en FreeBSD."
return 1
fi
}
# Función para desinstalar Zettlr en FreeBSD
uninstall_zettlr_freebsd() {
echo -e "\n${head_info}: Desinstalando Zettlr..."
# Eliminar AppImage
if [ -f "$HOME/Applications/Zettlr.AppImage" ]; then
rm -f "$HOME/Applications/Zettlr.AppImage"
fi
# Eliminar enlace simbólico
if [ -L "$HOME/bin/zettlr" ]; then
rm -f "$HOME/bin/zettlr"
fi
# Eliminar archivos de configuración
rm -rf "$HOME/.config/Zettlr"
echo -e "\n${head_success}: Zettlr ha sido desinstalado correctamente."
return 0
}
# Función principal para instalar Zettlr
install_zettlr() {
local os=$(detect_os)
local result=0
# Obtener la última versión disponible
get_latest_version
echo -e "\n${head_info}: Sistema operativo detectado: ${os}"
# Instalar según el sistema operativo
case "$os" in
*"Ubuntu"*|*"Debian"*|*"Linux Mint"*|*"Pop!_OS"*|*"elementary OS"*)
install_zettlr_debian
result=$?
;;
*"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*)
install_zettlr_redhat
result=$?
;;
*"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*)
install_zettlr_arch
result=$?
;;
*"macOS"*)
install_zettlr_macos
result=$?
;;
*"FreeBSD"*)
install_zettlr_freebsd
result=$?
;;
*)
echo -e "\n${head_error}: ${os_nofound}"
return 1
;;
esac
# Si la instalación fue exitosa, mostrar información adicional
if [ $result -eq 0 ]; then
echo -e "\n${head_info}: Información de Zettlr:"
echo -e " - Zettlr es un editor Markdown moderno con enfoque académico"
echo -e " - Incluye características como editor Markdown WYSIWYG, soporte para Zettelkasten"
echo -e " - Integración con Pandoc y LaTeX para exportación de documentos"
echo -e " - Soporta Markdown, Citas, Referencias y más"
echo -e " - Sitio web oficial: https://www.zettlr.com/"
fi
return $result
}
# Función principal para desinstalar Zettlr
uninstall_zettlr() {
local os=$(detect_os)
local result=0
echo -e "\n${head_info}: Sistema operativo detectado: ${os}"
# Mostrar diálogo de confirmación
if command -v dialog &>/dev/null; then
dialog --title "${head_confirm}" --yesno "¿${head_delete} Zettlr Markdown Editor?" 8 60
if [ $? -ne 0 ]; then
echo -e "\n${head_info}: ${head_op_error}"
return 0
fi
else
read -p "¿${head_delete} Zettlr Markdown Editor? (s/n): " CONFIRM
if [[ ! "$CONFIRM" =~ ^[Ss]$ ]]; then
echo -e "\n${head_info}: ${head_op_error}"
return 0
fi
fi
# Desinstalar según el sistema operativo
case "$os" in
*"Ubuntu"*|*"Debian"*|*"Linux Mint"*|*"Pop!_OS"*|*"elementary OS"*)
uninstall_zettlr_debian
result=$?
;;
*"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*)
uninstall_zettlr_redhat
result=$?
;;
*"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*)
uninstall_zettlr_arch
result=$?
;;
*"macOS"*)
uninstall_zettlr_macos
result=$?
;;
*"FreeBSD"*)
uninstall_zettlr_freebsd
result=$?
;;
*)
echo -e "\n${head_error}: ${os_nofound}"
return 1
;;
esac
return $result
}
# Mostrar encabezado
echo -e "\n=== ${head_installing} Zettlr Markdown Editor (${head_version} $ZETTLR_VERSION) ==="
# Verificar si Zettlr ya está instalado
ZETTLR_INSTALLED=0
if command -v zettlr &>/dev/null || [ -f /usr/bin/zettlr ] || [ -f /opt/Zettlr/zettlr ] || [ -d "/Applications/Zettlr.app" ]; then
ZETTLR_INSTALLED=1
echo -e "\n${head_info}: Zettlr ya está instalado en el sistema."
fi
# Determinar acción a realizar
if [ $UNINSTALL -eq 1 ]; then
# Desinstalar si está instalado
if [ $ZETTLR_INSTALLED -eq 1 ]; then
uninstall_zettlr
else
echo -e "\n${head_info}: Zettlr no está instalado. Nada que desinstalar."
fi
else
# Instalar o reinstalar
if [ $ZETTLR_INSTALLED -eq 1 ]; then
# Preguntar si desea reinstalar
if command -v dialog &>/dev/null; then
dialog --title "${head_confirm}" --yesno "Zettlr ${head_version} ya está instalado. ¿Desea reinstalarlo?" 8 60
if [ $? -eq 0 ]; then
uninstall_zettlr && install_zettlr
fi
else
read -p "Zettlr ${head_version} ya está instalado. ¿Desea reinstalarlo? (s/n): " REINSTALL
if [[ "$REINSTALL" =~ ^[Ss]$ ]]; then
uninstall_zettlr && install_zettlr
fi
fi
else
# Preguntar si desea instalar
if command -v dialog &>/dev/null; then
dialog --title "${head_confirm}" --yesno "¿${head_create} Zettlr Markdown Editor?" 8 60
if [ $? -eq 0 ]; then
install_zettlr
else
echo -e "\n${head_info}: ${head_op_error}"
fi
else
read -p "¿${head_create} Zettlr Markdown Editor? (s/n): " CONFIRM
if [[ "$CONFIRM" =~ ^[Ss]$ ]]; then
install_zettlr
else
echo -e "\n${head_info}: ${head_op_error}"
fi
fi
fi
fi
echo -e "\n=== ${head_success}: ${head_exit} ==="