[ADDED] Script de instalación de Helix Editor con soporte para múltiples plataformas

- Detecta automáticamente el sistema operativo y utiliza el método de instalación adecuado
- Soporta instalación mediante snap en Ubuntu
- Fallback a instalación desde tarball cuando es necesario
- Mensajes externalizados en head.es para facilitar la localización
- Uso de la librería console.lib para el manejo de interfaces con dialog
- Actualizado README.md con información sobre la nueva funcionalidad

🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Mauro Rosero P. 2025-03-11 23:13:26 -05:00
parent c9529a1f93
commit 36cc8ac528
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
3 changed files with 317 additions and 0 deletions

View file

@ -53,6 +53,12 @@ bin/update.sh
| `bin/cortana_enable.sh` | Activa el uso de Cortana |
| `bin/cortana_disable.sh` | Desactiva temporalmente Cortana |
### Herramientas para Editores de Código
| Comando | Descripción |
|---------|-------------|
| `bin/helix_install.sh` | Instala Helix Editor con soporte multiplataforma (apt, snap, pacman, etc.) |
### Seguridad y Acceso
| Comando | Descripción |
@ -100,6 +106,21 @@ bin/cortana_alias.sh
El token se encripta usando SOPS y se almacena de forma segura en `$HOME/.cortana/cortana.sops.yaml`.
### Instalación de Helix Editor
Helix es un editor de código moderno similar a Vim/Neovim pero con una curva de aprendizaje más amigable:
```bash
# Instalación automatizada
bin/helix_install.sh
```
El script detecta automáticamente tu sistema operativo y utiliza el método de instalación más adecuado:
- En Ubuntu: Instala mediante snap para obtener la versión más reciente
- En Arch Linux: Utiliza pacman
- En Fedora: Instala a través de dnf
- En otros sistemas: Descarga e instala desde el tarball oficial
### Copias de Seguridad
Para respaldar configuraciones importantes:

281
bin/helix_install.sh Executable file
View file

@ -0,0 +1,281 @@
#!/bin/bash
#
# helix_install.sh
# Modified: 2025/03/11 15:00:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
#
# 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/>.
# Script para instalar Helix Editor
# Uso:
# ./helix_install.sh
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=1.0.0
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
source $BIN_HOME/$BIN_LIBS/console.lib
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
title="${head_000} ${head_002}"
apps_title="${hx_001}"
# Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then
echo "${npm_001}"
exit 1
fi
# 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 $?
}
# Función para instalar Helix según el sistema operativo
install_helix() {
local OS_TYPE=$(uname -s)
local DISTRO=""
local INSTALL_METHOD="package" # Puede ser "package" o "tarball"
# Determinar el método de instalació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 snap está disponible
dialog --backtitle "${title}" --infobox "${hx_014}" 3 40
if command -v snap &> /dev/null; then
INSTALL_METHOD="snap"
else
# Instalar snap si no está disponible
dialog --backtitle "${title}" --infobox "${hx_015}" 3 40
run_cmd apt-get update
run_cmd apt-get install -y snapd
# Verificar si snap se instaló correctamente
if command -v snap &> /dev/null; then
INSTALL_METHOD="snap"
else
# Fallback a tarball si no se pudo instalar snap
INSTALL_METHOD="tarball"
fi
fi
else
# Para Debian usar tarball
INSTALL_METHOD="tarball"
fi
elif command -v pacman &> /dev/null; then
DISTRO="Arch Linux"
# Arch tiene versiones recientes en sus repositorios
INSTALL_METHOD="package"
run_cmd pacman -Sy --noconfirm helix
elif command -v dnf &> /dev/null; then
DISTRO="Fedora"
INSTALL_METHOD="package"
run_cmd dnf install -y helix
elif command -v yum &> /dev/null; then
DISTRO="CentOS/RHEL"
# Mejor usar el tarball para versiones recientes
INSTALL_METHOD="tarball"
else
# Si no se reconoce el gestor de paquetes, usar el tarball
INSTALL_METHOD="tarball"
fi
elif [[ "$OS_TYPE" == "FreeBSD" ]]; then
DISTRO="FreeBSD"
INSTALL_METHOD="package"
run_cmd pkg install -y helix
elif [[ "$OS_TYPE" == "Darwin" ]]; then
DISTRO="macOS"
INSTALL_METHOD="package"
brew install helix
else
dialog_error_box "${head_error}" "${os_nofound}"
return 1
fi
# Seleccionar el método de instalación
if [[ "$INSTALL_METHOD" == "snap" ]]; then
install_helix_snap
elif [[ "$INSTALL_METHOD" == "tarball" ]]; then
install_helix_tarball
fi
# El método "package" ya se ha ejecutado para Arch, Fedora, FreeBSD y macOS
# Verificar que se instaló correctamente
if command -v hx &> /dev/null; then
return 0
else
return 1
fi
}
# Función para instalar Helix mediante Snap
install_helix_snap() {
dialog --backtitle "${title}" --infobox "${hx_013}" 3 40
# Asegurar que snap está actualizado
run_cmd snap refresh
# Instalar Helix vía snap
run_cmd snap install --classic helix
return $?
}
# Función para instalar Helix desde el tarball oficial
install_helix_tarball() {
local TMP_DIR=$(mktemp -d)
local HX_VERSION="master" # Podría ser parametrizado para instalar una versión específica
local ARCH=$(uname -m)
local OS=$(uname -s | tr '[:upper:]' '[:lower:]')
local TARBALL="helix-${OS}-${ARCH}.tar.xz"
local DOWNLOAD_URL="https://github.com/helix-editor/helix/releases/latest/download/${TARBALL}"
local INSTALL_DIR="/usr/local/bin"
local RUNTIME_DIR="/usr/local/lib/helix"
# Crear directorio temporal y entrar en él
if [ ! -d "$TMP_DIR" ]; then
mkdir -p "$TMP_DIR"
fi
cd "$TMP_DIR" || return 1
# Descargar la última versión
dialog --backtitle "${title}" --infobox "${hx_003}" 3 40
wget "$DOWNLOAD_URL" -O "$TARBALL" || curl -L "$DOWNLOAD_URL" -o "$TARBALL"
if [ $? -ne 0 ]; then
rm -rf "$TMP_DIR"
return 1
fi
# Extraer el tarball
dialog --backtitle "${title}" --infobox "${hx_004}" 3 40
tar -xJf "$TARBALL"
# Verificar si la extracción fue exitosa
if [ $? -ne 0 ]; then
rm -rf "$TMP_DIR"
return 1
fi
# Crear directorios de destino
dialog --backtitle "${title}" --infobox "${hx_012}" 3 40
run_cmd mkdir -p "$INSTALL_DIR"
run_cmd mkdir -p "$RUNTIME_DIR"
# Instalar el binario y los archivos de runtime
dialog --backtitle "${title}" --infobox "${hx_005}" 3 40
# Verificar que los directorios existan antes de copiar
if [ -f "helix/hx" ] && [ -d "helix/runtime" ]; then
run_cmd cp helix/hx "$INSTALL_DIR/"
run_cmd cp -r helix/runtime "$RUNTIME_DIR/"
else
rm -rf "$TMP_DIR"
return 1
fi
# Limpiar
rm -rf "$TMP_DIR"
return 0
}
# Si no se ejecuta como root, solicitar contraseña para escalamiento vía dialog
if [ "$EUID" -ne 0 ]; then
dialog_error_box "${head_superuser}" "${hx_011}"
dialog_input_pass "${npm_002}" "" ""
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 "${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}"
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
# Salir
finish

View file

@ -129,3 +129,18 @@ npm_057="El token contiene caracteres no estándar. Verifique que sea correcto."
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_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_012="Creando directorio de destino..."