[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:
parent
c9529a1f93
commit
36cc8ac528
3 changed files with 317 additions and 0 deletions
21
README.md
21
README.md
|
@ -53,6 +53,12 @@ bin/update.sh
|
||||||
| `bin/cortana_enable.sh` | Activa el uso de Cortana |
|
| `bin/cortana_enable.sh` | Activa el uso de Cortana |
|
||||||
| `bin/cortana_disable.sh` | Desactiva temporalmente 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
|
### Seguridad y Acceso
|
||||||
|
|
||||||
| Comando | Descripción |
|
| 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`.
|
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
|
### Copias de Seguridad
|
||||||
|
|
||||||
Para respaldar configuraciones importantes:
|
Para respaldar configuraciones importantes:
|
||||||
|
|
281
bin/helix_install.sh
Executable file
281
bin/helix_install.sh
Executable 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
|
|
@ -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_058="El token de Cortana ha sido encriptado exitosamente en"
|
||||||
npm_059="Falló la encriptación del token de Cortana."
|
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:"
|
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..."
|
||||||
|
|
Loading…
Reference in a new issue