Compare commits
16 commits
a715b3be6e
...
4a372209d9
Author | SHA1 | Date | |
---|---|---|---|
4a372209d9 | |||
ac44e391c8 | |||
96e8ad69a1 | |||
6c7eda6a8d | |||
95f83d5be3 | |||
233fdc277c | |||
23e931fead | |||
b71ff6069b | |||
afe86cbed5 | |||
bb37b6630d | |||
927216c7ee | |||
26d6bae614 | |||
465a317801 | |||
30900b31f2 | |||
37119334dc | |||
cd46defc7e |
28 changed files with 1313 additions and 153 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -14,6 +14,11 @@
|
||||||
!inventory/
|
!inventory/
|
||||||
!sops/
|
!sops/
|
||||||
!projects/
|
!projects/
|
||||||
|
!data/
|
||||||
|
|
||||||
|
# Excluir el contenido de data pero mantener la carpeta
|
||||||
|
data/*
|
||||||
|
!data/.gitkeep
|
||||||
|
|
||||||
# Permitir el seguimiento de archivos específicos
|
# Permitir el seguimiento de archivos específicos
|
||||||
# !archivo1.txt
|
# !archivo1.txt
|
||||||
|
|
77
README.md
77
README.md
|
@ -1,16 +1,16 @@
|
||||||
# MRDevs Tools
|
# MRDevs Tools
|
||||||
|
|
||||||
<p align="center">
|
<center>
|
||||||
<img src="https://img.shields.io/badge/License-AGPL--3.0-blue.svg" alt="License: AGPL-3.0">
|
|
||||||
<img src="https://img.shields.io/badge/version-1.3.1-green.svg" alt="Version: 1.3.1">
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p align="center">
|

|
||||||
<img src="https://img.shields.io/badge/Shell-80%25-yellow.svg" alt="Shell: 80%">
|

|
||||||
<img src="https://img.shields.io/badge/Python-5%25-blue.svg" alt="Python: 5%">
|
|
||||||
<img src="https://img.shields.io/badge/Bash_Lib-13%25-orange.svg" alt="Bash Lib: 13%">
|

|
||||||
<img src="https://img.shields.io/badge/Config-2%25-lightgrey.svg" alt="Config: 2%">
|

|
||||||
</p>
|

|
||||||
|

|
||||||
|
|
||||||
|
</center>
|
||||||
|
|
||||||
## 📋 Descripción
|
## 📋 Descripción
|
||||||
|
|
||||||
|
@ -95,6 +95,10 @@ MRDevs Tools utiliza una estructura organizada que separa el código (en ~/devs)
|
||||||
| Comando | Descripción |
|
| Comando | Descripción |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
| `bin/helix_install.sh` | Instala Helix Editor con soporte multiplataforma (apt, snap, pacman, etc.) |
|
| `bin/helix_install.sh` | Instala Helix Editor con soporte multiplataforma (apt, snap, pacman, etc.) |
|
||||||
|
| `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 |
|
||||||
|
| `bin/zettlr_install.sh -u` | Desinstala Zettlr Markdown Editor del sistema |
|
||||||
|
|
||||||
### Herramientas para Control de Versiones
|
### Herramientas para Control de Versiones
|
||||||
|
|
||||||
|
@ -141,7 +145,7 @@ El directorio `$HOME/devs` sirve como área principal de desarrollo donde se ges
|
||||||
|
|
||||||
Para agregar temporalmente los comandos de la plataforma al PATH:
|
Para agregar temporalmente los comandos de la plataforma al PATH:
|
||||||
```bash
|
```bash
|
||||||
source ~/devs/bin/path_add.sh
|
source ~/devs/bin/devset.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Este script detecta automáticamente la ubicación correcta del directorio bin y lo agrega al PATH solo para la sesión actual (no es persistente).
|
Este script detecta automáticamente la ubicación correcta del directorio bin y lo agrega al PATH solo para la sesión actual (no es persistente).
|
||||||
|
@ -280,7 +284,9 @@ Proveedores soportados por defecto: Anthropic Claude, OpenAI ChatGPT, Google Gem
|
||||||
|
|
||||||
La configuración de proyectos se almacena en `bin/config/projects.dat`, donde se encuentra el nombre de la carpeta de proyectos utilizada por el sistema.
|
La configuración de proyectos se almacena en `bin/config/projects.dat`, donde se encuentra el nombre de la carpeta de proyectos utilizada por el sistema.
|
||||||
|
|
||||||
### Instalación de Helix Editor
|
### Instalación de Editores de Código
|
||||||
|
|
||||||
|
#### Helix Editor
|
||||||
|
|
||||||
Helix es un editor de código moderno similar a Vim/Neovim pero con una curva de aprendizaje más amigable:
|
Helix es un editor de código moderno similar a Vim/Neovim pero con una curva de aprendizaje más amigable:
|
||||||
|
|
||||||
|
@ -295,6 +301,51 @@ El script detecta automáticamente tu sistema operativo y utiliza el método de
|
||||||
- En Fedora: Instala a través de dnf
|
- En Fedora: Instala a través de dnf
|
||||||
- En otros sistemas: Descarga e instala desde el tarball oficial
|
- En otros sistemas: Descarga e instala desde el tarball oficial
|
||||||
|
|
||||||
|
#### Visual Studio Code
|
||||||
|
|
||||||
|
Visual Studio Code es un editor de código potente y extensible con amplio soporte para múltiples lenguajes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Instalación automatizada
|
||||||
|
bin/vscode_install.sh
|
||||||
|
|
||||||
|
# Desinstalación
|
||||||
|
bin/vscode_install.sh -u
|
||||||
|
```
|
||||||
|
|
||||||
|
El script ofrece una instalación optimizada para cada plataforma:
|
||||||
|
- En Ubuntu/Debian: Configura el repositorio oficial de Microsoft y utiliza apt
|
||||||
|
- En Red Hat/Fedora: Configura el repositorio RPM y utiliza dnf
|
||||||
|
- En Arch Linux: Instala desde AUR o repositorios oficiales
|
||||||
|
- En macOS: Utiliza Homebrew para la instalación
|
||||||
|
- En FreeBSD: Instala mediante el gestor de paquetes pkg
|
||||||
|
|
||||||
|
#### Zettlr Markdown Editor
|
||||||
|
|
||||||
|
Zettlr es un potente editor Markdown centrado en académicos e investigadores, con funcionalidades avanzadas:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Instalación automatizada
|
||||||
|
bin/zettlr_install.sh
|
||||||
|
|
||||||
|
# Desinstalación
|
||||||
|
bin/zettlr_install.sh -u
|
||||||
|
```
|
||||||
|
|
||||||
|
El script proporciona una instalación especializada para cada plataforma:
|
||||||
|
- En Ubuntu/Debian: Descarga e instala el paquete .deb oficial
|
||||||
|
- En Red Hat/Fedora: Descarga e instala el paquete .rpm oficial
|
||||||
|
- En Arch Linux: Instala desde AUR con ayuda de yay
|
||||||
|
- En macOS: Utiliza Homebrew para instalación
|
||||||
|
- En FreeBSD: Configuración manual con AppImage (no hay soporte oficial)
|
||||||
|
|
||||||
|
Características del instalador:
|
||||||
|
- Obtiene automáticamente la última versión disponible desde GitHub
|
||||||
|
- Solicita permisos de administrador cuando son necesarios
|
||||||
|
- Utiliza interfaz gráfica para confirmación y línea de comandos para instalación
|
||||||
|
- Limpia archivos de configuración residuales durante la desinstalación
|
||||||
|
- Proporciona información detallada sobre las características de Zettlr
|
||||||
|
|
||||||
### Herramientas para Control de Versiones
|
### Herramientas para Control de Versiones
|
||||||
|
|
||||||
MRDevs Tools incluye scripts para simplificar la instalación de CLIs para diferentes plataformas Git:
|
MRDevs Tools incluye scripts para simplificar la instalación de CLIs para diferentes plataformas Git:
|
||||||
|
@ -458,7 +509,7 @@ bin/rate_update.py --type python
|
||||||
bin/rate_update.py --init
|
bin/rate_update.py --init
|
||||||
```
|
```
|
||||||
|
|
||||||
Las tarifas se almacenan en archivos individuales dentro de `bin/config/rates/` y pueden ser utilizadas por otras herramientas.
|
Las tarifas se almacenan en archivos individuales dentro de `data/rates/` (directorio sin tracking en git) y pueden ser utilizadas por otras herramientas.
|
||||||
|
|
||||||
#### Estimación de Costos con COCOMO
|
#### Estimación de Costos con COCOMO
|
||||||
|
|
||||||
|
|
|
@ -149,11 +149,23 @@ install() {
|
||||||
os_pkgs_install $SQLITE_PACKAGE
|
os_pkgs_install $SQLITE_PACKAGE
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install python from OS Packages
|
# Install full Python package even if basic Python is already installed
|
||||||
command_installed $PYTHON_PACKAGE
|
command_installed python3-full
|
||||||
if [ $? -ne 0 ]
|
if [ $? -ne 0 ]
|
||||||
then
|
then
|
||||||
|
# Si python3-full no está instalado, instalarlo
|
||||||
python3_install
|
python3_install
|
||||||
|
else
|
||||||
|
# Si ya está python3 básico pero queremos asegurar que python3-full esté instalado
|
||||||
|
command_installed $PYTHON_PACKAGE
|
||||||
|
if [ $? -eq 0 ]
|
||||||
|
then
|
||||||
|
echo "Asegurando instalación completa de Python..."
|
||||||
|
if [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
||||||
|
apt update
|
||||||
|
apt install -y python3-full
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verificar si pip está instalado, instalarlo si es necesario
|
# Verificar si pip está instalado, instalarlo si es necesario
|
||||||
|
@ -163,6 +175,13 @@ install() {
|
||||||
pip_install
|
pip_install
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Verificar si pipx está instalado, instalarlo si es necesario
|
||||||
|
command_installed pipx
|
||||||
|
if [ $? -ne 0 ]
|
||||||
|
then
|
||||||
|
pipx_install
|
||||||
|
fi
|
||||||
|
|
||||||
# Install mozilla sops from OS Packages
|
# Install mozilla sops from OS Packages
|
||||||
command_installed $SOPS_PACKAGE
|
command_installed $SOPS_PACKAGE
|
||||||
if [ $? -ne 0 ]
|
if [ $? -ne 0 ]
|
||||||
|
|
|
@ -34,7 +34,7 @@ SHOW_RESULTS = True
|
||||||
# Directorio base del proyecto
|
# Directorio base del proyecto
|
||||||
BASE_DIR = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
BASE_DIR = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
CONFIG_DIR = BASE_DIR / 'bin' / 'config'
|
CONFIG_DIR = BASE_DIR / 'bin' / 'config'
|
||||||
RATES_DIR = CONFIG_DIR / 'rates' # Ubicación para archivos de tarifas
|
RATES_DIR = BASE_DIR / 'data' / 'rates' # Ubicación para archivos de tarifas
|
||||||
|
|
||||||
# Constantes para el modelo COCOMO básico
|
# Constantes para el modelo COCOMO básico
|
||||||
COCOMO_MODELS = {
|
COCOMO_MODELS = {
|
||||||
|
@ -210,7 +210,8 @@ def estimate_cocomo(loc, model_type='organic', cost_per_pm=5000, programmer_type
|
||||||
# Redondear valores para presentación
|
# Redondear valores para presentación
|
||||||
effort_pm = round(effort_pm, 2)
|
effort_pm = round(effort_pm, 2)
|
||||||
dev_time = round(dev_time, 2)
|
dev_time = round(dev_time, 2)
|
||||||
avg_staff = round(avg_staff, 2)
|
# Redondear personal promedio al entero próximo (ceil)
|
||||||
|
avg_staff = ceil(avg_staff)
|
||||||
hourly_rate = round(hourly_rate, 2)
|
hourly_rate = round(hourly_rate, 2)
|
||||||
total_cost = round(total_cost, 2)
|
total_cost = round(total_cost, 2)
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
57.73
|
|
|
@ -1 +0,0 @@
|
||||||
23.64
|
|
|
@ -1 +0,0 @@
|
||||||
51.00
|
|
|
@ -1 +0,0 @@
|
||||||
56.81
|
|
|
@ -1 +0,0 @@
|
||||||
59.11
|
|
|
@ -1 +0,0 @@
|
||||||
49.00
|
|
|
@ -1 +0,0 @@
|
||||||
41.00
|
|
|
@ -1 +0,0 @@
|
||||||
88.66
|
|
|
@ -1 +0,0 @@
|
||||||
49.00
|
|
|
@ -1 +0,0 @@
|
||||||
49.00
|
|
|
@ -1 +0,0 @@
|
||||||
47.00
|
|
|
@ -1 +0,0 @@
|
||||||
20.00
|
|
|
@ -1 +0,0 @@
|
||||||
49.00
|
|
|
@ -1 +0,0 @@
|
||||||
49.00
|
|
|
@ -1 +0,0 @@
|
||||||
31.00
|
|
|
@ -1,11 +1,11 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
#Script : path_add.sh
|
#Script : devset.sh
|
||||||
#Apps : MRDEVS TOOLS
|
#Apps : MRDEVS TOOLS
|
||||||
#Description : Add bin directory to PATH (non-persistent)
|
#Description : Add bin directory to PATH (non-persistent)
|
||||||
#Author : Cortana Rosero One <cortana@rosero.one>
|
#Author : Cortana Rosero One <cortana@rosero.one>
|
||||||
#Generated : Created by Claude Code (claude-3-7-sonnet-20250219)
|
#Generated : Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
#Created : 2025/04/01 21:00:00
|
#Created : 2025/04/01 21:00:00
|
||||||
#Modified : 2025/04/01 21:00:00
|
#Modified : 2025/04/04 21:00:00
|
||||||
#Version : 1.3.1
|
#Version : 1.3.1
|
||||||
#Use Notes : Source this script to add bin directory to PATH
|
#Use Notes : Source this script to add bin directory to PATH
|
||||||
#==============================================================================
|
#==============================================================================
|
||||||
|
@ -42,14 +42,18 @@ function add_to_path() {
|
||||||
|
|
||||||
if ! path_contains "$bin_path"; then
|
if ! path_contains "$bin_path"; then
|
||||||
export PATH="$bin_path:$PATH"
|
export PATH="$bin_path:$PATH"
|
||||||
echo "✅ Ruta '$bin_path' agregada al PATH"
|
echo "✅ ${head_success}: '$bin_path' ${head_002}"
|
||||||
else
|
|
||||||
echo "ℹ️ La ruta '$bin_path' ya está en el PATH"
|
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Cargar mensajes en español
|
||||||
|
if [ -f "$SCRIPT_DIR/msg/head.es" ]; then
|
||||||
|
source "$SCRIPT_DIR/msg/head.es"
|
||||||
|
fi
|
||||||
|
|
||||||
# Agregar la ruta bin al PATH
|
# Agregar la ruta bin al PATH
|
||||||
add_to_path "$BIN_DIR"
|
add_to_path "$BIN_DIR"
|
||||||
|
|
||||||
echo "✨ Los comandos de desarrollo están disponibles en esta sesión"
|
echo "✨ ${head_success}: ${head_000} ${head_002} ${head_version} $(cat "$SCRIPT_DIR/config/version")"
|
||||||
echo "💡 Uso: source ${BIN_DIR}/path_add.sh"
|
echo "📂 ${head_info}: Directorio de comandos '$BIN_DIR' agregado al PATH (no persistente)"
|
||||||
|
echo "💡 Uso: source ${BIN_DIR}/devset.sh"
|
|
@ -1,91 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
#Script : fix_haos_paths.sh
|
|
||||||
#Apps : MRDEVS TOOLS
|
|
||||||
#Description : Corrige rutas en contenedores HAOS existentes y crea estructura correcta
|
|
||||||
#Author : Cortana Rosero One <cortana@rosero.one>
|
|
||||||
#Created : 2025/04/02 12:00:00
|
|
||||||
#Modified : 2025/04/02 12:00:00
|
|
||||||
#Version : 1.0.0
|
|
||||||
#==============================================================================
|
|
||||||
# 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/>.
|
|
||||||
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
|
|
||||||
|
|
||||||
echo "=== Corrigiendo rutas de Home Assistant ==="
|
|
||||||
|
|
||||||
# Configuración de contenedores
|
|
||||||
HA_CORE_CONTAINER_NAME="homeassistant"
|
|
||||||
HA_OS_CONTAINER_NAME="haos"
|
|
||||||
|
|
||||||
# Asegurar que estamos en un directorio de proyecto
|
|
||||||
if [[ ! "$PWD" == *"/projects/"* ]]; then
|
|
||||||
echo "ADVERTENCIA: No parece estar en un directorio de proyecto."
|
|
||||||
echo "Este script debe ejecutarse desde la carpeta del proyecto (ej: /home/mrosero/devs/projects/ha-home)"
|
|
||||||
read -p "¿Desea continuar de todos modos? (s/n): " CONTINUE
|
|
||||||
if [[ ! "$CONTINUE" =~ ^[Ss]$ ]]; then
|
|
||||||
echo "Operación cancelada."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Crear estructura de directorios correcta
|
|
||||||
echo "Creando estructura de directorios correcta en $PWD/ha"
|
|
||||||
mkdir -p "$PWD/ha/config" "$PWD/ha/media" "$PWD/ha/ssl" "$PWD/ha/share"
|
|
||||||
chmod -R 755 "$PWD/ha"
|
|
||||||
|
|
||||||
# Verificar y detener contenedores si están ejecutándose
|
|
||||||
for CONTAINER in $HA_CORE_CONTAINER_NAME $HA_OS_CONTAINER_NAME; do
|
|
||||||
if podman container exists $CONTAINER; then
|
|
||||||
echo "Deteniendo contenedor $CONTAINER..."
|
|
||||||
podman stop $CONTAINER
|
|
||||||
|
|
||||||
echo "Eliminando contenedor $CONTAINER (los datos persistirán)..."
|
|
||||||
podman rm $CONTAINER
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Verificar si existe la estructura antigua
|
|
||||||
OLD_PATH="/home/mrosero/devs/homeassistant"
|
|
||||||
if [ -d "$OLD_PATH" ]; then
|
|
||||||
echo "Se encontró estructura antigua en $OLD_PATH"
|
|
||||||
|
|
||||||
# Migrar datos si es necesario
|
|
||||||
if [ -d "$OLD_PATH/config" ] && [ "$(ls -A "$OLD_PATH/config" 2>/dev/null)" ]; then
|
|
||||||
echo "Migrando datos de configuración..."
|
|
||||||
cp -r "$OLD_PATH/config/"* "$PWD/ha/config/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d "$OLD_PATH/media" ] && [ "$(ls -A "$OLD_PATH/media" 2>/dev/null)" ]; then
|
|
||||||
echo "Migrando datos de media..."
|
|
||||||
cp -r "$OLD_PATH/media/"* "$PWD/ha/media/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d "$OLD_PATH/ssl" ] && [ "$(ls -A "$OLD_PATH/ssl" 2>/dev/null)" ]; then
|
|
||||||
echo "Migrando certificados SSL..."
|
|
||||||
cp -r "$OLD_PATH/ssl/"* "$PWD/ha/ssl/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -d "$OLD_PATH/share" ] && [ "$(ls -A "$OLD_PATH/share" 2>/dev/null)" ]; then
|
|
||||||
echo "Migrando datos compartidos..."
|
|
||||||
cp -r "$OLD_PATH/share/"* "$PWD/ha/share/"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Respaldando estructura antigua a ${OLD_PATH}_backup..."
|
|
||||||
mv "$OLD_PATH" "${OLD_PATH}_backup"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "=== Operación completada ==="
|
|
||||||
echo "Ahora puede iniciar Home Assistant con:"
|
|
||||||
echo "../../bin/haos.sh start"
|
|
|
@ -104,7 +104,7 @@ function python3_install() {
|
||||||
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
||||||
# En sistemas Debian y derivados, instalamos o actualizamos Python a través de apt
|
# En sistemas Debian y derivados, instalamos o actualizamos Python a través de apt
|
||||||
apt update
|
apt update
|
||||||
apt install -y python3
|
apt install -y python3-full
|
||||||
elif [ -f /etc/redhat-release ]; then
|
elif [ -f /etc/redhat-release ]; then
|
||||||
# En sistemas Red Hat, instalamos o actualizamos Python a través de yum
|
# En sistemas Red Hat, instalamos o actualizamos Python a través de yum
|
||||||
dnf install -y python3
|
dnf install -y python3
|
||||||
|
@ -142,7 +142,7 @@ function python3_update() {
|
||||||
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
||||||
# En sistemas Debian y derivados
|
# En sistemas Debian y derivados
|
||||||
apt update
|
apt update
|
||||||
apt install --only-upgrade -y python3
|
apt install --only-upgrade -y python3-full
|
||||||
elif [ -f /etc/redhat-release ]; then
|
elif [ -f /etc/redhat-release ]; then
|
||||||
# En sistemas Red Hat
|
# En sistemas Red Hat
|
||||||
dnf upgrade -y python3
|
dnf upgrade -y python3
|
||||||
|
@ -190,6 +190,30 @@ function pip_install() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Install pipx package
|
||||||
|
function pipx_install() {
|
||||||
|
echo "Instalando pipx..."
|
||||||
|
|
||||||
|
# Verificar si pip está instalado
|
||||||
|
command_installed pip3
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
# Si pip no está instalado, llamamos a la función de instalación
|
||||||
|
pip_install
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$(uname)" == "Darwin" ]; then
|
||||||
|
# En macOS, instalamos pipx a través de Homebrew
|
||||||
|
brew install pipx
|
||||||
|
pipx ensurepath
|
||||||
|
else
|
||||||
|
# En otros sistemas, instalamos pipx a través de pip
|
||||||
|
python3 -m pip install --user pipx
|
||||||
|
python3 -m pipx ensurepath
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "pipx instalado correctamente."
|
||||||
|
}
|
||||||
|
|
||||||
# Update pip package
|
# Update pip package
|
||||||
function pip_update() {
|
function pip_update() {
|
||||||
|
|
||||||
|
@ -236,6 +260,31 @@ function pip_update() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Update pipx package
|
||||||
|
function pipx_update() {
|
||||||
|
echo "Actualizando pipx..."
|
||||||
|
|
||||||
|
# Verificar si pipx está instalado
|
||||||
|
command_installed pipx
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
# Si pipx no está instalado, llamamos a la función de instalación
|
||||||
|
pipx_install
|
||||||
|
return $?
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Actualizar pipx según el sistema operativo
|
||||||
|
if [ "$(uname)" == "Darwin" ]; then
|
||||||
|
# En macOS, actualizamos pipx a través de Homebrew
|
||||||
|
brew upgrade pipx
|
||||||
|
else
|
||||||
|
# En otros sistemas, actualizamos pipx a través de pip
|
||||||
|
python3 -m pip install --user --upgrade pipx
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "pipx actualizado correctamente."
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# Install mozilla sops package on os system supported
|
# Install mozilla sops package on os system supported
|
||||||
function sops_install() {
|
function sops_install() {
|
||||||
|
|
||||||
|
|
|
@ -168,3 +168,15 @@ hx_009="¿Desea instalar Helix Editor?"
|
||||||
hx_010="Instalación en progreso..."
|
hx_010="Instalación en progreso..."
|
||||||
hx_011="Se requiere acceso root para instalar Helix."
|
hx_011="Se requiere acceso root para instalar Helix."
|
||||||
hx_012="Creando directorio de destino..."
|
hx_012="Creando directorio de destino..."
|
||||||
|
|
||||||
|
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)."
|
||||||
|
zl_003="Descargando la última versión de Zettlr..."
|
||||||
|
zl_004="Instalando Zettlr..."
|
||||||
|
zl_005="Configurando Zettlr..."
|
||||||
|
zl_006="Zettlr instalado exitosamente."
|
||||||
|
zl_007="Versión de Zettlr instalada:"
|
||||||
|
zl_008="Zettlr no se instaló correctamente."
|
||||||
|
zl_009="¿Desea instalar Zettlr Markdown Editor?"
|
||||||
|
zl_010="Instalación en progreso..."
|
||||||
|
zl_011="Se requiere acceso root para instalar Zettlr."
|
||||||
|
|
|
@ -85,7 +85,7 @@ def check_install_pycountry():
|
||||||
# Directorio base del proyecto
|
# Directorio base del proyecto
|
||||||
BASE_DIR = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
BASE_DIR = Path(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||||
CONFIG_DIR = BASE_DIR / 'bin' / 'config'
|
CONFIG_DIR = BASE_DIR / 'bin' / 'config'
|
||||||
RATES_DIR = CONFIG_DIR / 'rates' # Nueva ubicación para archivos de tarifas
|
RATES_DIR = BASE_DIR / 'data' / 'rates' # Nueva ubicación para archivos de tarifas
|
||||||
|
|
||||||
# Archivos de configuración para la API de Perplexity
|
# Archivos de configuración para la API de Perplexity
|
||||||
MODEL_CONFIG_FILE = CONFIG_DIR / 'rate_model.ai'
|
MODEL_CONFIG_FILE = CONFIG_DIR / 'rate_model.ai'
|
||||||
|
@ -157,12 +157,20 @@ def get_perplexity_api_key():
|
||||||
# Si seguimos sin tener API key, mostrar error y salir
|
# Si seguimos sin tener API key, mostrar error y salir
|
||||||
if not api_key:
|
if not api_key:
|
||||||
logger.error("No se encontró la clave API de Perplexity.")
|
logger.error("No se encontró la clave API de Perplexity.")
|
||||||
logger.error("Opciones para configurarla:")
|
logger.error("Se usarán valores predeterminados para las tarifas.")
|
||||||
|
logger.error("Para obtener tarifas más precisas, configure la API key de Perplexity:")
|
||||||
logger.error("1. Establecer la variable de entorno PERPLEXITY_API_KEY")
|
logger.error("1. Establecer la variable de entorno PERPLEXITY_API_KEY")
|
||||||
logger.error("2. Crear un archivo ~/.perplexity/api_key con la clave")
|
logger.error("2. Crear un archivo ~/.perplexity/api_key con la clave")
|
||||||
logger.error("3. Crear un archivo ~/.config/perplexity/api_key con la clave")
|
logger.error("3. Crear un archivo ~/.config/perplexity/api_key con la clave")
|
||||||
logger.error("4. Crear un archivo bin/config/perplexity_api_key en el directorio del proyecto")
|
logger.error("4. Crear un archivo bin/config/perplexity_api_key en el directorio del proyecto")
|
||||||
sys.exit(1)
|
|
||||||
|
if SHOW_RESULTS:
|
||||||
|
print("\nADVERTENCIA: No se encontró la clave API de Perplexity.")
|
||||||
|
print("Se usarán valores predeterminados para las tarifas.")
|
||||||
|
print("Para obtener tarifas más precisas, configure la API key visitando:")
|
||||||
|
print("https://docs.perplexity.ai/docs/getting-started")
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
# Validar formato básico de la API key
|
# Validar formato básico de la API key
|
||||||
if not api_key.startswith('pplx-'):
|
if not api_key.startswith('pplx-'):
|
||||||
|
@ -463,10 +471,8 @@ def update_single_rate(programmer_type):
|
||||||
|
|
||||||
# Verificar disponibilidad de la API
|
# Verificar disponibilidad de la API
|
||||||
api_available = True
|
api_available = True
|
||||||
try:
|
api_key = get_perplexity_api_key()
|
||||||
# Intentar obtener la clave API (si falla, saltará una excepción)
|
if api_key is None:
|
||||||
get_perplexity_api_key()
|
|
||||||
except:
|
|
||||||
api_available = False
|
api_available = False
|
||||||
logger.warning("API de Perplexity no disponible. Se usarán valores predeterminados.")
|
logger.warning("API de Perplexity no disponible. Se usarán valores predeterminados.")
|
||||||
|
|
||||||
|
@ -666,10 +672,8 @@ def update_rate_files(force_update=False):
|
||||||
|
|
||||||
# Verificar disponibilidad de la API
|
# Verificar disponibilidad de la API
|
||||||
api_available = True
|
api_available = True
|
||||||
try:
|
api_key = get_perplexity_api_key()
|
||||||
# Intentar obtener la clave API (si falla, saltará una excepción)
|
if api_key is None:
|
||||||
get_perplexity_api_key()
|
|
||||||
except:
|
|
||||||
api_available = False
|
api_available = False
|
||||||
logger.warning("API de Perplexity no disponible. Se usarán valores predeterminados.")
|
logger.warning("API de Perplexity no disponible. Se usarán valores predeterminados.")
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ update_python_and_pip() {
|
||||||
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
elif [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
||||||
# En sistemas Debian y derivados
|
# En sistemas Debian y derivados
|
||||||
apt update
|
apt update
|
||||||
apt install --only-upgrade -y python3
|
apt install --only-upgrade -y python3-full
|
||||||
elif [ -f /etc/redhat-release ]; then
|
elif [ -f /etc/redhat-release ]; then
|
||||||
# En sistemas Red Hat
|
# En sistemas Red Hat
|
||||||
dnf upgrade -y python3
|
dnf upgrade -y python3
|
||||||
|
@ -156,10 +156,25 @@ update_python_and_pip() {
|
||||||
|
|
||||||
echo -e "\n${head_info}: Actualizando Python y pip..."
|
echo -e "\n${head_info}: Actualizando Python y pip..."
|
||||||
|
|
||||||
# Update Python
|
# Update Python - asegurándonos de que python3-full esté instalado
|
||||||
|
command_installed python3-full
|
||||||
|
PYTHON_FULL_INSTALLED=$?
|
||||||
|
|
||||||
command_installed python3
|
command_installed python3
|
||||||
if [ $? -eq 0 ]; then
|
PYTHON_BASIC_INSTALLED=$?
|
||||||
|
|
||||||
|
if [ $PYTHON_FULL_INSTALLED -eq 0 ]; then
|
||||||
|
# Si python3-full está instalado, actualízalo
|
||||||
python3_update
|
python3_update
|
||||||
|
elif [ $PYTHON_BASIC_INSTALLED -eq 0 ]; then
|
||||||
|
# Si solo python3 básico está instalado, instala la versión completa
|
||||||
|
echo -e "\n${head_info}: Actualizando a la versión completa de Python..."
|
||||||
|
if [ -f /etc/debian_version ] || [ -f /etc/os-release ]; then
|
||||||
|
apt update
|
||||||
|
apt install -y python3-full
|
||||||
|
else
|
||||||
|
python3_update
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
echo -e "\n${head_error}: Python3 no está instalado. Ejecute bin/bootstrap.sh primero."
|
echo -e "\n${head_error}: Python3 no está instalado. Ejecute bin/bootstrap.sh primero."
|
||||||
fi
|
fi
|
||||||
|
@ -173,29 +188,55 @@ update_python_and_pip() {
|
||||||
echo -e "Esta dependencia es necesaria para varias herramientas del sistema."
|
echo -e "Esta dependencia es necesaria para varias herramientas del sistema."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "\n${head_info}: Actualización de Python y pip completada."
|
# Update pipx separately
|
||||||
|
command_installed pipx
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Función interna para actualizar pipx
|
||||||
|
function pipx_update_internal() {
|
||||||
|
echo "Actualizando pipx..."
|
||||||
|
|
||||||
|
if [ "$(uname)" == "Darwin" ]; then
|
||||||
|
# En macOS, actualizamos pipx a través de Homebrew
|
||||||
|
brew upgrade pipx
|
||||||
|
else
|
||||||
|
# En otros sistemas, actualizamos pipx a través de pip
|
||||||
|
python3 -m pip install --user --upgrade pipx
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "pipx actualizado correctamente."
|
||||||
|
}
|
||||||
|
|
||||||
|
pipx_update_internal
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: pipx no está instalado. Ejecute bin/bootstrap.sh primero."
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Actualización de Python, pip y pipx completada."
|
||||||
}
|
}
|
||||||
|
|
||||||
# Verificar si Python o pip están instalados y si se necesitan actualizar
|
# Verificar si Python, pip o pipx están instalados y si se necesitan actualizar
|
||||||
command_installed python3
|
command_installed python3
|
||||||
PYTHON_INSTALLED=$?
|
PYTHON_INSTALLED=$?
|
||||||
|
|
||||||
command_installed pip3
|
command_installed pip3
|
||||||
PIP_INSTALLED=$?
|
PIP_INSTALLED=$?
|
||||||
|
|
||||||
|
command_installed pipx
|
||||||
|
PIPX_INSTALLED=$?
|
||||||
|
|
||||||
# Si cualquiera de ellos está instalado, necesitamos actualizar con privilegios de superusuario
|
# Si cualquiera de ellos está instalado, necesitamos actualizar con privilegios de superusuario
|
||||||
if [ $PYTHON_INSTALLED -eq 0 ] || [ $PIP_INSTALLED -eq 0 ]; then
|
if [ $PYTHON_INSTALLED -eq 0 ] || [ $PIP_INSTALLED -eq 0 ] || [ $PIPX_INSTALLED -eq 0 ]; then
|
||||||
# Ejecutar la actualización de Python y pip con sudo
|
# Ejecutar la actualización de Python, pip y pipx con sudo
|
||||||
echo -e "\n${head_info}: Se necesitan privilegios de administrador para actualizar Python y pip..."
|
echo -e "\n${head_info}: Se necesitan privilegios de administrador para actualizar Python, pip y pipx..."
|
||||||
|
|
||||||
# Exportar todas las funciones necesarias para que estén disponibles en el subproceso sudo
|
# Exportar todas las funciones necesarias para que estén disponibles en el subproceso sudo
|
||||||
# Esto incluye command_installed y otras funciones de base.lib que se necesitan
|
# Esto incluye command_installed y otras funciones de base.lib que se necesitan
|
||||||
sudo bash -c "$(declare -f command_installed; declare -f update_python_and_pip); update_python_and_pip $SCRIPT_DIR $BIN_LIBS $BIN_MESG $BIN_LANG"
|
sudo bash -c "$(declare -f command_installed; declare -f update_python_and_pip); update_python_and_pip $SCRIPT_DIR $BIN_LIBS $BIN_MESG $BIN_LANG"
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo -e "\n${head_error}: No se pudo actualizar Python y pip. Verifique sus privilegios."
|
echo -e "\n${head_error}: No se pudo actualizar Python, pip y pipx. Verifique sus privilegios."
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo -e "\n${head_info}: No se detectaron Python ni pip instalados. No hay actualizaciones que realizar."
|
echo -e "\n${head_info}: No se detectaron Python, pip ni pipx instalados. No hay actualizaciones que realizar."
|
||||||
echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero."
|
echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
472
bin/vscode_install.sh
Executable file
472
bin/vscode_install.sh
Executable file
|
@ -0,0 +1,472 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#Script : vscode_install.sh
|
||||||
|
#Apps : MRDEVS TOOLS
|
||||||
|
#Description : Instala Visual Studio Code con soporte multiplataforma
|
||||||
|
#Author : Cortana Rosero One <cortana@rosero.one>
|
||||||
|
#Generated : Created by Claude Code (claude-3-7-sonnet-20250219)
|
||||||
|
#Created : 2025/04/04 10:00:00
|
||||||
|
#Modified : 2025/04/04 10: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
|
||||||
|
|
||||||
|
# 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 instalar VSCode en sistemas basados en Debian/Ubuntu
|
||||||
|
install_vscode_debian() {
|
||||||
|
echo -e "\n${head_info}: Instalando paquetes necesarios..."
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y wget gpg apt-transport-https
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Descargando e instalando la clave GPG de Microsoft..."
|
||||||
|
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
|
||||||
|
sudo install -D -o root -g root -m 644 microsoft.gpg /etc/apt/keyrings/microsoft.gpg
|
||||||
|
rm microsoft.gpg
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Configurando el repositorio de VSCode..."
|
||||||
|
echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/code stable main" | \
|
||||||
|
sudo tee /etc/apt/sources.list.d/vscode.list
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Actualizando repositorios e instalando Visual Studio Code..."
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install -y code
|
||||||
|
|
||||||
|
if command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente."
|
||||||
|
echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo instalar Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para desinstalar VSCode en sistemas basados en Debian/Ubuntu
|
||||||
|
uninstall_vscode_debian() {
|
||||||
|
echo -e "\n${head_info}: Desinstalando Visual Studio Code..."
|
||||||
|
sudo apt remove --purge -y code
|
||||||
|
sudo rm -f /etc/apt/sources.list.d/vscode.list
|
||||||
|
sudo rm -f /etc/apt/keyrings/microsoft.gpg
|
||||||
|
sudo apt update
|
||||||
|
|
||||||
|
if ! command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para instalar VSCode en sistemas basados en Red Hat (Fedora, RHEL, etc.)
|
||||||
|
install_vscode_redhat() {
|
||||||
|
echo -e "\n${head_info}: Instalando paquetes necesarios..."
|
||||||
|
sudo dnf check-update
|
||||||
|
sudo dnf install -y dnf-plugins-core
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Configurando el repositorio de VSCode..."
|
||||||
|
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
|
||||||
|
sudo sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Instalando Visual Studio Code..."
|
||||||
|
sudo dnf install -y code
|
||||||
|
|
||||||
|
if command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente."
|
||||||
|
echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo instalar Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para desinstalar VSCode en sistemas basados en Red Hat
|
||||||
|
uninstall_vscode_redhat() {
|
||||||
|
echo -e "\n${head_info}: Desinstalando Visual Studio Code..."
|
||||||
|
sudo dnf remove -y code
|
||||||
|
sudo rm -f /etc/yum.repos.d/vscode.repo
|
||||||
|
|
||||||
|
if ! command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para instalar VSCode en Arch Linux
|
||||||
|
install_vscode_arch() {
|
||||||
|
echo -e "\n${head_info}: Actualizando repositorios..."
|
||||||
|
sudo pacman -Sy
|
||||||
|
|
||||||
|
# Verificar si yay está instalado
|
||||||
|
if command -v yay &>/dev/null; then
|
||||||
|
echo -e "\n${head_info}: Instalando Visual Studio Code usando yay..."
|
||||||
|
yay -S --noconfirm visual-studio-code-bin
|
||||||
|
else
|
||||||
|
echo -e "\n${head_info}: Instalando Visual Studio Code desde los repositorios oficiales..."
|
||||||
|
# Intentar instalar el paquete oficial si está disponible
|
||||||
|
if pacman -Si code &>/dev/null; then
|
||||||
|
sudo pacman -S --noconfirm code
|
||||||
|
else
|
||||||
|
# Si no está disponible, intentar con el AUR
|
||||||
|
echo -e "\n${head_info}: El paquete no está en los repositorios oficiales. Intentando con git..."
|
||||||
|
sudo pacman -S --noconfirm git base-devel
|
||||||
|
|
||||||
|
# Directorio temporal para la compilación
|
||||||
|
BUILD_DIR=$(mktemp -d)
|
||||||
|
cd "$BUILD_DIR"
|
||||||
|
|
||||||
|
# Clonar el paquete del AUR y compilarlo
|
||||||
|
git clone https://aur.archlinux.org/visual-studio-code-bin.git
|
||||||
|
cd visual-studio-code-bin
|
||||||
|
makepkg -si --noconfirm
|
||||||
|
|
||||||
|
# Limpiar
|
||||||
|
cd
|
||||||
|
rm -rf "$BUILD_DIR"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente."
|
||||||
|
echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo instalar Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para desinstalar VSCode en Arch Linux
|
||||||
|
uninstall_vscode_arch() {
|
||||||
|
echo -e "\n${head_info}: Desinstalando Visual Studio Code..."
|
||||||
|
|
||||||
|
# Intentar desinstalar desde diferentes paquetes posibles
|
||||||
|
if pacman -Qi visual-studio-code-bin &>/dev/null; then
|
||||||
|
sudo pacman -R --noconfirm visual-studio-code-bin
|
||||||
|
elif pacman -Qi code &>/dev/null; then
|
||||||
|
sudo pacman -R --noconfirm code
|
||||||
|
elif pacman -Qi visual-studio-code &>/dev/null; then
|
||||||
|
sudo pacman -R --noconfirm visual-studio-code
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para instalar VSCode en macOS
|
||||||
|
install_vscode_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 Visual Studio Code mediante Homebrew..."
|
||||||
|
brew install --cask visual-studio-code
|
||||||
|
|
||||||
|
if [ -d "/Applications/Visual Studio Code.app" ]; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo instalar Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para desinstalar VSCode en macOS
|
||||||
|
uninstall_vscode_macos() {
|
||||||
|
echo -e "\n${head_info}: Desinstalando Visual Studio Code..."
|
||||||
|
|
||||||
|
if command -v brew &>/dev/null; then
|
||||||
|
brew uninstall --cask visual-studio-code
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d "/Applications/Visual Studio Code.app" ]; then
|
||||||
|
rm -rf "/Applications/Visual Studio Code.app"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -d "/Applications/Visual Studio Code.app" ]; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para instalar VSCode en FreeBSD
|
||||||
|
install_vscode_freebsd() {
|
||||||
|
echo -e "\n${head_info}: Actualizando repositorios..."
|
||||||
|
sudo pkg update
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Instalando Visual Studio Code..."
|
||||||
|
sudo pkg install -y vscode
|
||||||
|
|
||||||
|
if command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido instalado correctamente."
|
||||||
|
echo -e "${head_info}: Versión instalada: $(code --version | head -n 1)"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo instalar Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para desinstalar VSCode en FreeBSD
|
||||||
|
uninstall_vscode_freebsd() {
|
||||||
|
echo -e "\n${head_info}: Desinstalando Visual Studio Code..."
|
||||||
|
sudo pkg remove -y vscode
|
||||||
|
|
||||||
|
if ! command -v code &>/dev/null; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente."
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "\n${head_error}: No se pudo desinstalar completamente Visual Studio Code."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función principal para instalar VSCode
|
||||||
|
install_vscode() {
|
||||||
|
local os=$(detect_os)
|
||||||
|
local result=0
|
||||||
|
|
||||||
|
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_vscode_debian
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*)
|
||||||
|
install_vscode_redhat
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*)
|
||||||
|
install_vscode_arch
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"macOS"*)
|
||||||
|
install_vscode_macos
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"FreeBSD"*)
|
||||||
|
install_vscode_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}: Visual Studio Code ha sido instalado correctamente."
|
||||||
|
echo -e "${head_info}: Para iniciar VSCode, ejecute: code"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función principal para desinstalar VSCode
|
||||||
|
uninstall_vscode() {
|
||||||
|
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 "Confirmación" --yesno "¿Está seguro que desea desinstalar Visual Studio Code?" 8 60
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo -e "\n${head_info}: Desinstalación cancelada por el usuario."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
read -p "¿Está seguro que desea desinstalar Visual Studio Code? (s/n): " CONFIRM
|
||||||
|
if [[ ! "$CONFIRM" =~ ^[Ss]$ ]]; then
|
||||||
|
echo -e "\n${head_info}: Desinstalación cancelada por el usuario."
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Desinstalar según el sistema operativo
|
||||||
|
case "$os" in
|
||||||
|
*"Ubuntu"*|*"Debian"*|*"Linux Mint"*|*"Pop!_OS"*|*"elementary OS"*)
|
||||||
|
uninstall_vscode_debian
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"Fedora"*|*"Red Hat"*|*"CentOS"*|*"Rocky"*|*"AlmaLinux"*|*"Oracle Linux"*)
|
||||||
|
uninstall_vscode_redhat
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"Arch"*|*"Manjaro"*|*"EndeavourOS"*|*"Garuda"*)
|
||||||
|
uninstall_vscode_arch
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"macOS"*)
|
||||||
|
uninstall_vscode_macos
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*"FreeBSD"*)
|
||||||
|
uninstall_vscode_freebsd
|
||||||
|
result=$?
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "\n${head_error}: ${os_nofound}"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Si la desinstalación fue exitosa, mostrar mensaje
|
||||||
|
if [ $result -eq 0 ]; then
|
||||||
|
echo -e "\n${head_success}: Visual Studio Code ha sido desinstalado correctamente."
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $result
|
||||||
|
}
|
||||||
|
|
||||||
|
# Mostrar encabezado
|
||||||
|
echo -e "\n=== Instalación de Visual Studio Code ==="
|
||||||
|
|
||||||
|
# Verificar si VSCode ya está instalado
|
||||||
|
if command -v code &>/dev/null; then
|
||||||
|
CODE_VERSION=$(code --version | head -n 1)
|
||||||
|
echo -e "\n${npm_019}"
|
||||||
|
echo "Visual Studio Code: $CODE_VERSION"
|
||||||
|
|
||||||
|
# Si se solicita desinstalación
|
||||||
|
if [ $UNINSTALL -eq 1 ]; then
|
||||||
|
uninstall_vscode
|
||||||
|
else
|
||||||
|
# Si ya está instalado y no se solicita desinstalación, preguntar qué hacer
|
||||||
|
if command -v dialog &>/dev/null; then
|
||||||
|
dialog --title "${npm_031}" --yesno "Visual Studio Code ya está instalado (versión $CODE_VERSION).\n¿Desea reinstalarlo?" 8 60
|
||||||
|
REINSTALL=$?
|
||||||
|
if [ $REINSTALL -eq 0 ]; then
|
||||||
|
uninstall_vscode && install_vscode
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
read -p "Visual Studio Code ya está instalado (versión $CODE_VERSION). ¿Desea reinstalarlo? (s/n): " REINSTALL
|
||||||
|
if [[ "$REINSTALL" =~ ^[Ss]$ ]]; then
|
||||||
|
uninstall_vscode && install_vscode
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Si no está instalado
|
||||||
|
if [ $UNINSTALL -eq 1 ]; then
|
||||||
|
echo -e "\n${head_info}: Visual Studio Code no está instalado. Nada que hacer."
|
||||||
|
else
|
||||||
|
# Mostrar diálogo de confirmación para instalar
|
||||||
|
if command -v dialog &>/dev/null; then
|
||||||
|
dialog --title "Confirmación" --yesno "¿Desea instalar Visual Studio Code?" 8 60
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
install_vscode
|
||||||
|
else
|
||||||
|
echo -e "\n${head_info}: Instalación cancelada por el usuario."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
read -p "¿Desea instalar Visual Studio Code? (s/n): " CONFIRM
|
||||||
|
if [[ "$CONFIRM" =~ ^[Ss]$ ]]; then
|
||||||
|
install_vscode
|
||||||
|
else
|
||||||
|
echo -e "\n${head_info}: Instalación cancelada por el usuario."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "\n=== Proceso Finalizado ==="
|
608
bin/zettlr_install.sh
Executable file
608
bin/zettlr_install.sh
Executable file
|
@ -0,0 +1,608 @@
|
||||||
|
#!/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 biblioteca de consola
|
||||||
|
if [ -f "$SCRIPT_DIR/$BIN_LIBS/console.lib" ]; then
|
||||||
|
source "$SCRIPT_DIR/$BIN_LIBS/console.lib"
|
||||||
|
else
|
||||||
|
echo "Error: No se encontró la biblioteca console.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
|
||||||
|
|
||||||
|
# Configurar título
|
||||||
|
title="${head_000} ${head_002}"
|
||||||
|
apps_title="${zl_001}"
|
||||||
|
|
||||||
|
# Función para limpiar la pantalla y salir
|
||||||
|
function finish() {
|
||||||
|
clear
|
||||||
|
exit
|
||||||
|
}
|
||||||
|
|
||||||
|
# Función para ejecutar comandos con sudo si es necesario
|
||||||
|
run_cmd() {
|
||||||
|
if [ "$EUID" -eq 0 ]; then
|
||||||
|
"$@"
|
||||||
|
else
|
||||||
|
echo "$SUDO_PASS" | sudo -S "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Devuelve el código de estado del último comando ejecutado
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
|
||||||
|
# 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..."
|
||||||
|
run_cmd apt update
|
||||||
|
run_cmd 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..."
|
||||||
|
run_cmd 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..."
|
||||||
|
run_cmd apt remove --purge -y zettlr
|
||||||
|
run_cmd 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..."
|
||||||
|
run_cmd dnf check-update
|
||||||
|
run_cmd 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..."
|
||||||
|
run_cmd 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..."
|
||||||
|
run_cmd 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..."
|
||||||
|
run_cmd pacman -Sy
|
||||||
|
|
||||||
|
echo -e "\n${head_info}: Instalando dependencias necesarias..."
|
||||||
|
run_cmd 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
|
||||||
|
run_cmd pacman -R --noconfirm zettlr-bin
|
||||||
|
elif pacman -Qi zettlr &>/dev/null; then
|
||||||
|
run_cmd 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
|
||||||
|
# La información se mostrará después del gauge
|
||||||
|
INSTALL_SUCCESS=1
|
||||||
|
ZETTLR_INFO="Zettlr es un editor Markdown moderno con enfoque académico\n"
|
||||||
|
ZETTLR_INFO+="- Incluye editor Markdown WYSIWYG y soporte para Zettelkasten\n"
|
||||||
|
ZETTLR_INFO+="- Integración con Pandoc y LaTeX para exportación de documentos\n"
|
||||||
|
ZETTLR_INFO+="- Soporte para Markdown, Citas, Referencias y más\n"
|
||||||
|
ZETTLR_INFO+="- Sitio web oficial: https://www.zettlr.com/"
|
||||||
|
else
|
||||||
|
INSTALL_SUCCESS=0
|
||||||
|
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_yesno "¿Está seguro que desea ${head_delete} Zettlr Markdown Editor?"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo -e "\n${head_info}: ${head_op_error}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
read -p "¿Está seguro que desea ${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
|
||||||
|
}
|
||||||
|
|
||||||
|
# Si no se ejecuta como root, solicitar contraseña para escalamiento vía dialog
|
||||||
|
if [ "$EUID" -ne 0 ]; then
|
||||||
|
dialog_error_box "${head_superuser}" "${zl_011}"
|
||||||
|
dialog_input_pass "${npm_002}" "" ""
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
dialog_error_box "${head_error}" "${npm_003}"
|
||||||
|
finish
|
||||||
|
fi
|
||||||
|
SUDO_PASS="$value"
|
||||||
|
|
||||||
|
# Verificar que la contraseña funcione
|
||||||
|
echo "$SUDO_PASS" | sudo -S true &> /dev/null
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
dialog_error_box "${head_error}" "${npm_003}"
|
||||||
|
finish
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Mensaje de bienvenida
|
||||||
|
clear
|
||||||
|
dialog_error_box "${zl_001}" "${zl_002}"
|
||||||
|
|
||||||
|
# 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
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Determinar acción a realizar
|
||||||
|
if [ $UNINSTALL -eq 1 ]; then
|
||||||
|
# Desinstalar si está instalado
|
||||||
|
if [ $ZETTLR_INSTALLED -eq 1 ]; then
|
||||||
|
dialog_yesno "¿${head_delete} Zettlr Markdown Editor?"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Limpiar pantalla y ejecutar en consola
|
||||||
|
clear
|
||||||
|
echo -e "\n=== ${head_delete} Zettlr Markdown Editor ==="
|
||||||
|
|
||||||
|
uninstall_zettlr
|
||||||
|
UNINSTALL_RESULT=$?
|
||||||
|
|
||||||
|
if [ $UNINSTALL_RESULT -eq 0 ]; then
|
||||||
|
echo -e "\n=== ${head_success}: Zettlr ha sido desinstalado correctamente ==="
|
||||||
|
else
|
||||||
|
echo -e "\n=== ${head_error}: No se pudo desinstalar Zettlr ==="
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dialog_error_box "${head_canceled}" "${head_op_error}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dialog_error_box "${head_info}" "Zettlr no está instalado. Nada que desinstalar."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Instalar o reinstalar
|
||||||
|
if [ $ZETTLR_INSTALLED -eq 1 ]; then
|
||||||
|
# Preguntar si desea reinstalar
|
||||||
|
dialog_yesno "Zettlr ${head_version} ya está instalado.\n\n¿Desea reinstalarlo?"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Limpiar pantalla y ejecutar en consola
|
||||||
|
clear
|
||||||
|
echo -e "\n=== ${zl_003} ==="
|
||||||
|
sleep 1
|
||||||
|
echo -e "\n=== ${zl_004} ==="
|
||||||
|
sleep 1
|
||||||
|
echo -e "\n=== ${zl_005} ==="
|
||||||
|
|
||||||
|
# Desinstalar e instalar Zettlr
|
||||||
|
uninstall_zettlr && install_zettlr
|
||||||
|
INSTALL_RESULT=$?
|
||||||
|
|
||||||
|
# Verificar el resultado de la instalación
|
||||||
|
if [ $INSTALL_RESULT -eq 0 ]; then
|
||||||
|
echo -e "\n=== ${zl_006} ==="
|
||||||
|
if [ $INSTALL_SUCCESS -eq 1 ]; then
|
||||||
|
echo -e "\n${ZETTLR_INFO}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "\n=== ${zl_008} ==="
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Preguntar si desea instalar
|
||||||
|
dialog_yesno "${zl_009}"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
# Limpiar pantalla y ejecutar en consola
|
||||||
|
clear
|
||||||
|
echo -e "\n=== ${zl_003} ==="
|
||||||
|
sleep 1
|
||||||
|
echo -e "\n=== ${zl_004} ==="
|
||||||
|
sleep 1
|
||||||
|
echo -e "\n=== ${zl_005} ==="
|
||||||
|
|
||||||
|
# Instalar Zettlr
|
||||||
|
install_zettlr
|
||||||
|
INSTALL_RESULT=$?
|
||||||
|
|
||||||
|
# Verificar el resultado de la instalación
|
||||||
|
if [ $INSTALL_RESULT -eq 0 ]; then
|
||||||
|
echo -e "\n=== ${zl_006} ==="
|
||||||
|
if [ $INSTALL_SUCCESS -eq 1 ]; then
|
||||||
|
echo -e "\n${ZETTLR_INFO}"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "\n=== ${zl_008} ==="
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
dialog_error_box "${head_canceled}" "${head_op_error}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Salir
|
||||||
|
finish
|
0
data/.gitkeep
Normal file
0
data/.gitkeep
Normal file
Loading…
Reference in a new issue