Compare commits

...

20 commits

Author SHA1 Message Date
f4568ef57d
[IMPROVED] Estandarizar y mejorar scripts con estructura unificada
- Actualizar scripts con estructura de cabecera estandarizada
- Renombrar cortana_install.sh a claude_install.sh
- Agregar cortana_unalias.sh para facilitar la gestión de alias
- Mejorar manejo de rutas usando SCRIPT_DIR para determinar ubicaciones
- Usar variables de configuración consistentes en todos los scripts
- Implementar carga de mensajes estandarizada en todos los scripts
- Agregar limpieza de consola al finalizar la mayoría de scripts
- Eliminar scripts obsoletos y redundantes

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 20:24:42 -05:00
f6f2ebcaa0
[IMPROVED] Integrar dialog con console.lib en scripts de instalación
- Incorporar funciones de diálogo de console.lib en ghadmin_install.sh
- Incorporar funciones de diálogo de console.lib en gladmin_install.sh
- Agregar variable head_success en head.es
- Mejorar mensajes y presentación de información

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 17:54:10 -05:00
f415e54d34
[IMPROVED] Agregar mensajes i18n para gladmin_install.sh
- Añadir mensajes i18n con prefijo glmsg_ para GitLab CLI installer
- Implementar variables de mensajes localizados en todo el script
- Mantener consistencia con el estilo de otros scripts de instalación

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 17:51:04 -05:00
1b4993ea4b
[IMPROVED] Agregar mensajes i18n para ghadmin_install.sh
- Añadir mensajes i18n con prefijo ghmsg_ para GitHub CLI installer
- Implementar variables de mensajes localizados en todo el script
- Mantener consistencia con el estilo de otros scripts

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 17:41:54 -05:00
31735062c2
[IMPROVED] Agregar mensajes i18n para forgejo_login.sh
- Agregar mensajes i18n para integración de Forgejo
- Actualizar hora de modificación del script
- Implementar uso de variables de mensajes localizados

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 17:33:41 -05:00
e67b6fc5de
[IMPROVED] Actualizar fjadmin_install.sh para usar console.lib y mensajes i18n
- Añadir mensajes fjmsg_* a developers.es para soporte de localización
- Integrar funciones de diálogo de console.lib para mejorar la interfaz de usuario
- Crear estructura de función principal para mejor organización del script
- Mejorar manejo de errores con mensajes informativos

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 17:16:13 -05:00
d5b3b1bc31
[IMPROVED] Actualizar cversion_token.sh para usar funciones de console.lib
- Reemplazar llamadas directas a dialog por funciones de console.lib
- Simplificar el flujo de diálogo para solicitar tokens
- Mejorar manejo de errores utilizando métodos estándar
- Mostrar mensajes i18n adecuados de head.es y developers.es

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 15:00:37 -05:00
64c32003fe
[FIXED] Corregir errores en script standardize_scripts.sh
- Reemplazar llamadas a funciones inexistentes dialog_msg_box y dialog_info_box
- Usar la función dialog_error_box para todos los mensajes

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 11:59:26 -05:00
d405113803
[IMPROVED] Actualizar script de estandarización con mensajes i18n
- Usar funciones de diálogo para mensajes de interfaz
- Incorporar mensajes localizados desde head.es
- Mostrar progreso durante la estandarización de scripts
- Crear copias de respaldo de los archivos originales

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 11:52:53 -05:00
60a8a86ca2
[ADDED] Script para estandarizar encabezados y variables en scripts Bash
- Crear plantilla bash.head para encabezados de scripts
- Crear plantilla bash.variables para variables comunes en todos los scripts
- Implementar script standardize_scripts.sh para aplicar estas plantillas

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 11:46:59 -05:00
7114c43475
[IMPROVED] Mejorar funcionalidad de qr_secret.sh
- Utilizar dialog_input_filepath para selección de archivos
- Reordenar verificación de dialog para consistencia
- Codificar secreto en base64 para mayor seguridad
- Ajustar flujo lógico de la función principal

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 07:21:30 -05:00
d32832b091
[IMPROVED] Centralizar versión en bin/config/version
- Modificar todos los scripts para leer la versión desde bin/config/version
- Añadir variable BIN_CFGS donde faltaba
- Eliminar definiciones locales de VERSION en los scripts

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-19 07:09:30 -05:00
c51bdfdf9f
[IMPROVED] Usar dialog de forma consistente para mensajes en qr_secret.sh
- Reemplazar todos los mensajes mostrados con echo por llamadas a dialog
- Mostrar errores de dependencias con dialog_error_box cuando sea posible
- Usar dialog para confirmaciones de operación cancelada
- Mantener mensaje echo solo para el caso donde dialog no está instalado
- Mejorar el mensaje de operación cancelada para mayor claridad

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:29:15 -05:00
efb5aa5d2a
[IMPROVED] Añadir soporte de localización a qr_secret.sh con developers.es
- Incorporar mensajes en developers.es para qr_secret.sh
- Mover todos los textos UI a variables localizables
- Reemplazar strings hardcodeados con referencias a variables de mensajes
- Seguir formato estándar de mensajes usado en otros scripts del proyecto
- Mejorar procesamiento de errores con mensajes consistentes

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:24:52 -05:00
d3bad69f02
[FIXED] Corregir selección de archivos en qr_secret.sh
- Reemplazar función dialog_input_filepath que no funcionaba correctamente
- Implementar selección de archivos directamente con dialog y --fselect
- Mejorar tamaño y visibilidad del selector de archivos (15x60)
- Añadir validación apropiada para asegurar que se seleccionó un archivo válido

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:22:51 -05:00
78c5a03f17
[IMPROVED] Cambiar sufijo de archivos a .totp.yaml en qr_secret.sh
- Modificar sufijo de archivos de .sops.yaml a .totp.yaml para mejor contextualización
- Actualizar mensajes de éxito para reflejar el nuevo formato de nombre de archivo
- Mantener el mismo mecanismo de encriptación con SOPS

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:21:08 -05:00
57f59ddffe
[ADDED] Script qr_secret.sh para extraer secretos de imágenes QR
- Crear script para extraer secretos de imágenes QR usando zbar
- Implementar selección de archivos mediante dialog_input_filepath
- Validar nombres de archivos según criterios específicos (sin espacios, caracteres limitados)
- Guardar secretos encriptados con SOPS en DEVELOPER_DIR
- Detectar y procesar URLs de autenticación TOTP (otpauth://)
- Actualizar README con documentación del nuevo script

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:19:06 -05:00
12495ab53e
[IMPROVED] Simplificar update.sh y eliminar parámetros específicos para herramientas
- Quitar parámetros específicos --oathtool y --zbar del script update.sh
- Simplificar la función update_additional_tools eliminando parámetros opcionales
- Actualizar automáticamente oathtool y zbar si están instalados
- Eliminar procesamiento de argumentos redundante
- Actualizar README para reflejar la nueva funcionalidad simplificada

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:08:18 -05:00
60d0d3337d
[IMPROVED] Modificar bootstrap.sh para instalar oathtool y zbar automáticamente
- Eliminar parámetros específicos para instalaciones individuales
- Añadir instalación automática de oathtool y zbar en el flujo principal
- Verificar si las herramientas ya están instaladas antes de proceder
- Simplificar la función install() y eliminar manejo de parámetros opcionales
- Actualizar README para reflejar que bootstrap.sh ahora instala estas herramientas por defecto

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:06:31 -05:00
074643e21d
[IMPROVED] Actualizar script update.sh para gestionar oathtool y zbar
- Añadir función update_additional_tools() para actualizar herramientas adicionales
- Implementar parámetros --oathtool y --zbar para actualización selectiva
- Detectar automáticamente si las herramientas están instaladas antes de actualizarlas
- Actualizar README con documentación de las nuevas opciones
- Mantener compatibilidad con el flujo de actualización existente

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-03-15 19:04:44 -05:00
49 changed files with 1719 additions and 569 deletions

11
.gitignore vendored
View file

@ -12,26 +12,21 @@
!bin/config/ !bin/config/
!bin/ansible/ !bin/ansible/
!inventory/ !inventory/
!templates/
!sops/ !sops/
!proyectos/ !projects/
# Permitir el seguimiento de archivos específicos # Permitir el seguimiento de archivos específicos
# !archivo1.txt # !archivo1.txt
!README.md !README.md
!CLUADE.md
!.gitignore !.gitignore
# Ignorar archivos específicos
CLAUDE.md
bin/config/rates/
# Permitir archivos en carpetas específicas # Permitir archivos en carpetas específicas
# !carpeta1/*.txt # !carpeta1/*.txt
!bin/* !bin/*
!bin/lib/* !bin/lib/*
!bin/msg/* !bin/msg/*
!bin/config/* !bin/config/**
!bin/ansible/** !bin/ansible/**
!inventory/** !inventory/**
!templates/**
!sops/*.yaml !sops/*.yaml

View file

@ -18,13 +18,17 @@
## Development Practices ## Development Practices
- Use `bin/lib/base.lib` for common functions - Use `bin/lib/base.lib` for common functions
- Use `bin/lib/developers.lib` for developers functions
- Use `bin/lib/clonsole.lib` for dialog functions
- Message files stored in `bin/msg/` (multilingual support) - Message files stored in `bin/msg/` (multilingual support)
- Configuration in `bin/config/` directory - Configuration in `bin/config/` directory
- Use git commit messages with prefixes: [ADDED], [IMPROVED], [FIXED], [SOPS] - Use git commit messages with prefixes: [ADDED], [IMPROVED], [FIXED], [SOPS], [INIT]
- Prefer podman over docker for container management - Prefer podman over docker for container management
- All shell scripts (.sh) and Python scripts (.py) must be placed in the `bin/` directory unless explicitly specified otherwise - All shell scripts (.sh) and Python scripts (.py) must be placed in the `bin/` directory unless explicitly specified otherwise
## Authorship Policy ## Authorship Policy
- Use `bin/config/python.header` how example to python comment header
- Use `bin/config/bash.header` how example to bash comment header
- For new projects created by Claude Code, use author: "Cortana Rosero One <cortana@rosero.one>" - For new projects created by Claude Code, use author: "Cortana Rosero One <cortana@rosero.one>"
- Include reference indicating generation by Claude Code and the version used - Include reference indicating generation by Claude Code and the version used
- Example header comment: - Example header comment:

View file

@ -38,10 +38,8 @@ bin/update.sh
| Comando | Descripción | | Comando | Descripción |
|---------|-------------| |---------|-------------|
| `bin/bootstrap.sh` | Instala herramientas básicas y configura la gestión de contenedores | | `bin/bootstrap.sh` | Instala herramientas básicas (incluyendo oathtool y zbar) y configura la gestión de contenedores |
| `bin/bootstrap.sh --oathtool` | Instala únicamente oathtool (herramienta para TOTP/HOTP) | | `bin/update.sh` | Actualiza el entorno de desarrollo y herramientas (incluyendo oathtool y zbar) |
| `bin/bootstrap.sh --zbar` | Instala únicamente zbar (herramienta para lectura de códigos QR) |
| `bin/update.sh` | Actualiza el entorno de desarrollo con las últimas funcionalidades |
| `bin/npm_install.sh` | Instala NodeJS y npm de forma interactiva | | `bin/npm_install.sh` | Instala NodeJS y npm de forma interactiva |
| `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado | | `bin/project_new.sh` | Crea un nuevo proyecto con estructura estandarizada según el tipo seleccionado |
@ -76,6 +74,7 @@ bin/update.sh
| Comando | Descripción | | Comando | Descripción |
|---------|-------------| |---------|-------------|
| `bin/qr_secret.sh` | Extrae secretos de imágenes QR y los guarda encriptados con SOPS |
| `bin/vpn_install.sh` | Instala el cliente Pritunl VPN | | `bin/vpn_install.sh` | Instala el cliente Pritunl VPN |
| `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión | | `bin/vpn_install.sh --update` | Actualiza el cliente VPN a la última versión |
| `bin/vpn_users.sh` | Gestiona usuarios de la VPN | | `bin/vpn_users.sh` | Gestiona usuarios de la VPN |

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# bootstrap.sh # Script: bootstrap.sh
# Description: Script para bootstrap.sh
# Created: 2025/03/19 11:57:08
# Modified: 2025/03/15 16:30:00 # Modified: 2025/03/15 16:30:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@roser.one>] # [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,17 +21,34 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_MESG=bin/msg
BIN_LIBS=bin/lib # Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
#baselib_test
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
# Variables globales
title="${head_000} ${head_002}"
load_bootstrap_msg() { load_bootstrap_msg() {
@ -48,7 +69,6 @@ install() {
local LIBRARY=$2 local LIBRARY=$2
local MESSAGES=$3 local MESSAGES=$3
local INSTALL_LANG=$4 local INSTALL_LANG=$4
local PACKAGE_ONLY=$5 # Paquete específico a instalar (opcional)
local PYTHON_PACKAGE=python3 local PYTHON_PACKAGE=python3
local GIT_PACKAGE=git local GIT_PACKAGE=git
@ -75,32 +95,6 @@ install() {
# Load bootstrap messages # Load bootstrap messages
load_bootstrap_msg $BIN_PATH $MESSAGES $INSTALL_LANG load_bootstrap_msg $BIN_PATH $MESSAGES $INSTALL_LANG
# Si se especificó un paquete específico, instalar solo ese
if [ -n "$PACKAGE_ONLY" ]; then
case "$PACKAGE_ONLY" in
"oathtool")
# Instalar oathtool
command_installed $OATHTOOL_PACKAGE
if [ $? -ne 0 ]; then
oathtool_install
fi
return 0
;;
"zbar")
# Instalar zbar
command_installed $ZBAR_PACKAGE
if [ $? -ne 0 ]; then
zbar_install
fi
return 0
;;
*)
echo "Paquete '$PACKAGE_ONLY' no reconocido o no soportado."
return 1
;;
esac
fi
# Install wget from OS Packages # Install wget from OS Packages
command_installed $WGET_PACKAGE command_installed $WGET_PACKAGE
if [ $? -ne 0 ] if [ $? -ne 0 ]
@ -189,40 +183,29 @@ install() {
echo "$domsg_005" echo "$domsg_005"
fi fi
# Install oathtool if not already installed
command_installed oathtool
if [ $? -ne 0 ]
then
echo "Instalando oathtool..."
oathtool_install
fi
# Install zbar if not already installed
command_installed zbar-tools
if [ $? -ne 0 ]
then
echo "Instalando zbar..."
zbar_install
fi
} }
# Load messages # Load messages
load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG
# Procesar argumentos # Display Headers
PACKAGE_TO_INSTALL="" display_devstools_header "- $bomsg_000"
if [ $# -ge 1 ]; then # Run install with sudo (sin parámetros específicos)
case "$1" in sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG"
"--oathtool")
PACKAGE_TO_INSTALL="oathtool"
display_devstools_header "- Instalación de oathtool"
;;
"--zbar")
PACKAGE_TO_INSTALL="zbar"
display_devstools_header "- Instalación de zbar"
;;
*)
display_devstools_header "- $bomsg_000"
;;
esac
else
display_devstools_header "- $bomsg_000"
fi
# Run install with sudo
sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG '$PACKAGE_TO_INSTALL'"
result=$?
# Run install ansible with regular user
#if [ $result -eq 0 ]
#then
# Load bootstrap bash library
# source $BIN_HOME/$BIN_LIBS/bootstrap.lib
# ansible_install
#fi

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# cortana_install.sh # Script: claude_install.sh
# Modified: 2024/12/01 15:27:00 # Description: Script para instalar o desinstalar Anthropoc Claude Code con npm
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] # Created: 2024/12/01 15:27:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -19,28 +23,37 @@
# Script para instalar o desinstalar Anthropoc Claude Code con npm # Script para instalar o desinstalar Anthropoc Claude Code con npm
# Uso: # Uso:
# ./script.sh -> Instalación # ./claude_install.sh -> Instalación
# ./script.sh -u -> Desinstalación # ./claude_install -u -> Desinstalación
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_CFGS=bin/config BIN_LIBS="lib"
VERSION=1.0.1 BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
#baselib_test
# Load head messages # Cargar mensajes en el idioma del sistema o español por defecto
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
# Verificar que 'dialog' esté instalado # Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then if ! command -v dialog &>/dev/null; then
echo "${npm_001}" echo "${npm_001}"
@ -50,10 +63,10 @@ fi
# Verificar que 'npm' esté instalado # Verificar que 'npm' esté instalado
if ! command -v npm &>/dev/null; then if ! command -v npm &>/dev/null; then
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_022}" 7 50 dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_022}" 7 50
exit 1 ${BIN_HOME}/${BIN_BASE}/npm_install.sh
fi fi
# Función para preparar pre-requisitos para instalación de Cortana # Función para preparar pre-requisitos para instalación de Claude Code
pre_anthropic() { pre_anthropic() {
# First, save a list of your existing global packages for later migration # First, save a list of your existing global packages for later migration
npm list -g --depth=0 > ~/npm-global-packages.txt npm list -g --depth=0 > ~/npm-global-packages.txt
@ -95,7 +108,7 @@ pre_anthropic() {
# Función para instalar Anthropoc Claude Code # Función para instalar Anthropoc Claude Code
install_anthropic() { install_anthropic() {
dialog --backtitle "${title}" --title "${npm_018} ${npm_000} ${npm_000_1}" --msgbox "${npm_023}" 7 60 dialog --backtitle "${title}" --title "${npm_018}" --msgbox "${npm_023}" 7 60
# Ejecutar la instalación # Ejecutar la instalación
pre_anthropic pre_anthropic
npm install -g @anthropic-ai/claude-code npm install -g @anthropic-ai/claude-code
@ -109,7 +122,7 @@ install_anthropic() {
# Función para desinstalar Anthropoc Claude Code # Función para desinstalar Anthropoc Claude Code
uninstall_anthropic() { uninstall_anthropic() {
dialog --backtitle "${title}" --title "${npm_026} ${npm_000} ${npm_000_1}" --msgbox "${npm_027}" 7 60 dialog --backtitle "${title}" --title "${npm_026}" --msgbox "${npm_027}" 7 60
# Ejecutar la desinstalación # Ejecutar la desinstalación
npm uninstall -g @anthropic-ai/claude-code npm uninstall -g @anthropic-ai/claude-code
if [[ $? -eq 0 ]]; then if [[ $? -eq 0 ]]; then
@ -127,6 +140,7 @@ if [[ "$1" == "-u" ]]; then
uninstall_anthropic uninstall_anthropic
else else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 1 exit 1
fi fi
else else
@ -135,7 +149,11 @@ else
install_anthropic install_anthropic
else else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 1 exit 1
fi fi
fi fi
# Limpiar consola
clear

23
bin/config/bash.head Normal file
View file

@ -0,0 +1,23 @@
#!/bin/bash
#
# Script: $SCRIPT_NAME
# Description: $DESCRIPTION
# Created: $CREATED_DATE
# Modified: $MODIFIED_DATE
# [Author] $AUTHOR
# [Generated] $GENERATED_BY
#
# Derechos de Autor (C) [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/>.

29
bin/config/bash.variables Normal file
View file

@ -0,0 +1,29 @@
# Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
# Variables globales
title="${head_000} ${head_002}"

View file

@ -1 +1 @@
proyectos projects

View file

@ -0,0 +1 @@
57.73

View file

@ -0,0 +1 @@
23.64

View file

@ -0,0 +1 @@
51.00

View file

@ -0,0 +1 @@
56.81

View file

@ -0,0 +1 @@
59.11

View file

@ -0,0 +1 @@
49.00

View file

@ -0,0 +1 @@
41.00

View file

@ -0,0 +1 @@
88.66

View file

@ -0,0 +1 @@
49.00

1
bin/config/rates/ml.rate Normal file
View file

@ -0,0 +1 @@
49.00

View file

@ -0,0 +1 @@
47.00

View file

@ -0,0 +1 @@
20.00

View file

@ -0,0 +1 @@
49.00

View file

@ -0,0 +1 @@
49.00

View file

@ -0,0 +1 @@
31.00

View file

@ -1,20 +1,4 @@
#!/bin/bash #!/bin/bash
# Source de head.es para cargar los mensajes
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_LANG=${LANG:0:2}
# Intentar cargar mensajes (si es posible)
if [ -f "$BIN_HOME/$BIN_LIBS/base.lib" ] && [ -f "$BIN_HOME/$BIN_MESG/head.$BIN_LANG" ]; then
source "$BIN_HOME/$BIN_LIBS/base.lib"
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
USE_MESSAGES=true
else
USE_MESSAGES=false
fi
# Verificar si ~/.npm-global/bin está en el PATH # Verificar si ~/.npm-global/bin está en el PATH
if [[ ":$PATH:" != *":$HOME/.npm-global/bin:"* ]]; then if [[ ":$PATH:" != *":$HOME/.npm-global/bin:"* ]]; then
# Si no está en el PATH, usamos la ruta completa en el alias # Si no está en el PATH, usamos la ruta completa en el alias
@ -23,10 +7,4 @@ else
# Si está en el PATH, podemos usar el nombre directamente # Si está en el PATH, podemos usar el nombre directamente
alias cortana="claude" alias cortana="claude"
fi fi
echo "Alias cortana activado en la sesión actual."
# Mostrar el mensaje usando variables si están disponibles
if [ "$USE_MESSAGES" = true ]; then
echo "${npm_046}"
else
echo "Alias cortana activado en la sesión actual."
fi

View file

@ -1,8 +1,10 @@
#!/bin/bash # Script: cortana_disable.sh
# # Description: # Script para desactivar el alias 'cortana' para Claude Code
# cortana_disable.sh # Created: 2025/03/19 11:57:08
# Modified: 2025/03/11 12:00:00 # Modified: 2025/03/11 12:00:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] # [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -20,22 +22,34 @@
# Script para desactivar el alias 'cortana' para Claude Code # Script para desactivar el alias 'cortana' para Claude Code
# Uso: # Uso:
# ./cortana_disable.sh # ./cortana_disable.sh
# Nota: no usa console.lib, ni console.es
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_CFGS=bin/config BIN_LIBS="lib"
VERSION=1.0.0 BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages # Cargar mensajes en el idioma del sistema o español por defecto
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
# Verificar que 'dialog' esté instalado # Verificar que 'dialog' esté instalado
@ -63,3 +77,6 @@ else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
exit 1 exit 1
fi fi
# Limpiar consola
clear

View file

@ -1,8 +1,10 @@
#!/bin/bash # Script: cortana_enable.sh
# # Description: # Script para activar el alias 'cortana' para Claude Code
# cortana_enable.sh # Created: 2025/03/19 11:57:08
# Modified: 2025/03/11 12:00:00 # Modified: 2025/03/11 12:00:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] # [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,30 +19,43 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
# Script para activar el alias 'cortana' para Claude Code # Script para desactivar el alias 'cortana' para Claude Code
# Uso: # Uso:
# ./cortana_enable.sh # ./cortana_enable.sh
# Nota: no usa console.lib, ni console.es
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_CFGS=bin/config BIN_LIBS="lib"
VERSION=1.0.0 BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages # Cargar mensajes en el idioma del sistema o español por defecto
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
# Verificar que 'dialog' esté instalado # Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then if ! command -v dialog &>/dev/null; then
echo "${npm_001}" echo "${npm_001}"
clear
exit 1 exit 1
fi fi
@ -68,5 +83,11 @@ if [[ $? -eq 0 ]]; then
dialog --backtitle "${title}" --title "${npm_036}" --msgbox "${npm_037}\n\n${npm_047}\n\nsource $ALIAS_FILE\n\n" 10 70 dialog --backtitle "${title}" --title "${npm_036}" --msgbox "${npm_037}\n\n${npm_047}\n\nsource $ALIAS_FILE\n\n" 10 70
else else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40 dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 1 exit 1
fi fi
# Limpiar consola
clear

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# cortana_token.sh # Script: cortana_token.sh
# Modified: 2025-03-12 20:26:07 # Description: Script para encriptar el token de Claude Code usando SOPS
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] # Created: 2025/03/12 20:26:07
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,23 +21,35 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
# Script para encriptar el token de Cortana (Claude Code) usando SOPS # Script para encriptar el token de Cortana (Claude Code) para Cortana usando SOPS
# Cortana Token se utiliza para la agente Cortana que es la asistente para los desarrolladores
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_CFGS=bin/config BIN_LIBS="lib"
VERSION=1.0.0 BIN_MESG="msg"
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
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages # Cargar mensajes en el idioma del sistema o español por defecto
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
check_dependencies() { check_dependencies() {
@ -149,6 +165,7 @@ main() {
dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} ${HOME}/.cortana/cortana.sops.yaml" 7 70 dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} ${HOME}/.cortana/cortana.sops.yaml" 7 70
else else
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50 dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50
clear
exit 1 exit 1
fi fi
} }

3
bin/cortana_unalias.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/bash
unalias cortana 2>/dev/null
echo "Alias cortana desactivado en la sesión actual."

View file

@ -1,12 +1,13 @@
#!/bin/bash #!/bin/bash
# #
# Script: cversadm_token.sh # Script: cversion_token.sh
# Description: Administrador de tokens para plataformas de control de versiones # Description: Administrador de tokens para plataformas de control de versiones
# Modified: 2025/03/15 # Created: 2025/03/15 10:07:08
# Modified: 2025/03/19 11:57:08
# [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)
# #
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@roser.one>] # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -24,36 +25,33 @@
# Configuración inicial # Configuración inicial
# Usar DEVELOPER_DIR de base.lib # Usar DEVELOPER_DIR de base.lib
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto # Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat") DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else else
DEVSPATH="devs" DEVSPATH="devs"
fi fi
BIN_HOME="$HOME/$DEVSPATH" BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin" VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
BIN_LIBS="lib"
BIN_MESG="msg"
# Definir variables necesarias para uso en funciones
head_error="ERROR"
head_exit="Salir"
head_key_end="END"
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.lib"
# Cargar mensajes en el idioma del sistema o español por defecto # Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "console"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
# Variables globales
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
apps_title="${cvmsg_000}" apps_title="${cvmsg_000}"
@ -79,13 +77,7 @@ ensure_developers_dir() {
# Función para seleccionar la plataforma de control de versiones usando menu_actions # Función para seleccionar la plataforma de control de versiones usando menu_actions
select_platform() { select_platform() {
# Preparar opciones para menu_actions # Preparar opciones para menu_actions
local menu_options="1:${cvmsg_010} local menu_options="1:${cvmsg_010}\n2:${cvmsg_011}\n3:${cvmsg_012}"
2:${cvmsg_011}
3:${cvmsg_012}
"
# Usar menu_actions en lugar de dialog_input_menu # Usar menu_actions en lugar de dialog_input_menu
local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9) local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9)
@ -118,33 +110,35 @@ request_token() {
"forgejo") platform_name="${cvmsg_012}" ;; "forgejo") platform_name="${cvmsg_012}" ;;
esac esac
# Bucle para validación de token usando dialog directamente # Bucle para validación de token usando funciones de console.lib
while true; do while true; do
# Usar dialog directamente en lugar de dialog_input_pass # Usar dialog_input_pass de console.lib
token=$(dialog --backtitle "$title" --stdout --title "${cvmsg_003}" \ dialog_input_pass "${cvmsg_004} $platform_name" "${cvmsg_005}"
--passwordbox "${cvmsg_004} $platform_name\n${cvmsg_005}" 8 60)
# Verificar si el usuario canceló # Verificar si el usuario canceló
if [ $? -ne 0 ]; then if [ $codex -ne 0 ]; then
clear clear
return 1 return 1
fi fi
# Obtener token de la variable value establecida por dialog_input_pass
token="$value"
# Validar token # Validar token
if [ -z "$token" ]; then if [ -z "$token" ]; then
dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_015}" 7 60 dialog_error_box "${head_error}" "${cvmsg_015}"
continue continue
fi fi
# Verificar longitud (debería tener al menos 30 caracteres) # Verificar longitud (debería tener al menos 30 caracteres)
if [ ${#token} -lt 30 ]; then if [ ${#token} -lt 30 ]; then
dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_016}" 7 60 dialog_error_box "${head_error}" "${cvmsg_016}"
continue continue
fi fi
# Verificar formato (debería contener caracteres alfanuméricos y algunos especiales) # Verificar formato (debería contener caracteres alfanuméricos y algunos especiales)
if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then
dialog --backtitle "$title" --title "${head_warning}" --msgbox "${cvmsg_017}" 7 60 dialog_error_box "${head_warning}" "${cvmsg_017}"
fi fi
# Token válido # Token válido
@ -198,15 +192,6 @@ main() {
check_sops_installed check_sops_installed
ensure_developers_dir ensure_developers_dir
# Asegurar que head_000 y head_002 estén definidos para el título
if [ -z "$head_000" ] || [ -z "$head_002" ]; then
head_000="MRDevs"
head_002="Tools"
fi
# Mostrar título inicial
display_text_header
# Seleccionar plataforma # Seleccionar plataforma
platform=$(select_platform) platform=$(select_platform)
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
@ -231,7 +216,7 @@ main() {
"forgejo") platform_name="${cvmsg_012}" ;; "forgejo") platform_name="${cvmsg_012}" ;;
esac esac
dialog_error_box "${cvmsg_009}" "${cvmsg_006} $platform_name" dialog_error_box "${head_info}" "${cvmsg_006} $platform_name"
else else
local platform_name="" local platform_name=""
case $platform in case $platform in

138
bin/fjadmin_install.sh Executable file
View file

@ -0,0 +1,138 @@
#!/bin/bash
#
# Script: fjadmin_install.sh
# Description: Script para instalar Forgejo Manager CLI.
# Created: 2025/03/19 11:57:08
# Modified: 2025/03/19 11:57:08
# [Author] Cortana Rosero One <cortana@rosero.one>
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
#
# Derechos de Autor (C) [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
# Usar DEVELOPER_DIR de base.lib
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
title="${head_000} ${head_002}"
apps_title="${fjmsg_000}"
# Verificar si dialog está instalado
check_dialog_installed() {
if ! command -v dialog &> /dev/null; then
echo "${head_001}"
exit 1
fi
}
# Función para verificar si cargo está instalado
check_cargo() {
if ! command -v cargo &> /dev/null; then
dialog_error_box "${head_info}" "${fjmsg_002}"
# Mostrar progreso de instalación
echo "curl https://sh.rustup.rs -sSf | sh"
curl https://sh.rustup.rs -sSf | sh
# Cargar el entorno de Rust
source "$HOME/.cargo/env"
dialog_error_box "${head_info}" "${fjmsg_003}"
else
dialog_error_box "${head_info}" "${fjmsg_004}"
fi
}
# Función para verificar si forgejo-cli está instalado
check_forgejo_cli() {
if ! command -v codeberg &> /dev/null; then
dialog_error_box "${head_info}" "${fjmsg_005}"
# Verificar que cargo esté disponible
if ! command -v cargo &> /dev/null; then
dialog_error_box "${head_error}" "${fjmsg_006}\n${fjmsg_007}"
exit 1
fi
# Instalar forgejo-cli (codeberg-cli)
echo "cargo install codeberg-cli"
cargo install codeberg-cli
if [ $? -eq 0 ]; then
dialog_error_box "${head_info}" "${fjmsg_008}"
else
dialog_error_box "${head_error}" "${fjmsg_009}"
exit 1
fi
else
dialog_error_box "${head_info}" "${fjmsg_008}"
fi
}
# Función principal
main() {
# Verificar si dialog está instalado
check_dialog_installed
# Preguntar al usuario si desea instalar Forgejo CLI
dialog_yesno "${fjmsg_012}\n\n${fjmsg_013}"
if [ $? -ne 0 ]; then
dialog_error_box "${head_canceled}" "${fjmsg_014}"
clear
exit 0
fi
# Verificar si cargo está instalado
check_cargo
dialog_error_box "${head_info}" "${fjmsg_010}"
# Instalar forgejo-cli si no está instalado
check_forgejo_cli
dialog_error_box "${head_info}" "${fjmsg_011}"
clear
exit 0
}
# Ejecutar función principal
main

View file

@ -1,59 +0,0 @@
#!/bin/bash
# ------------------------------------------------------------------
# [Author] Cortana Rosero One <cortana@rosero.one>
# [Title] fjcli_install.sh - Instalador de forgejo-cli
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
#
# AGPL License
# Modified date: 14/03/2025
# ------------------------------------------------------------------
# Función para verificar si cargo está instalado
check_cargo() {
if ! command -v cargo &> /dev/null; then
echo "Cargo no está instalado. Instalando Rust y Cargo..."
curl https://sh.rustup.rs -sSf | sh
source "$HOME/.cargo/env"
echo "Rust y Cargo han sido instalados correctamente."
else
echo "Cargo ya está instalado."
fi
}
# Función para verificar si codeberg-cli está instalado
check_codeberg_cli() {
if ! command -v codeberg &> /dev/null; then
echo "codeberg-cli no está instalado. Instalando..."
# Verificar que cargo esté disponible
if ! command -v cargo &> /dev/null; then
echo "ERROR: No se pudo encontrar cargo en el PATH después de la instalación."
echo "Por favor reinicie su terminal e intente nuevamente."
exit 1
fi
# Instalar codeberg-cli
cargo install codeberg-cli
if [ $? -eq 0 ]; then
echo "codeberg-cli instalado correctamente."
else
echo "ERROR: No se pudo instalar codeberg-cli."
exit 1
fi
else
echo "codeberg-cli ya está instalado."
fi
}
# Verificar si cargo está instalado
check_cargo
echo "Preparando instalación de forgejo-cli..."
# Instalar codeberg-cli si no está instalado
check_codeberg_cli
echo "Instalación completada."
exit 0

View file

@ -1,12 +1,13 @@
#!/bin/bash #!/bin/bash
# #
# Script: fj_login.sh # Script: forgejo_login.sh
# Description: Script para autenticación con Forgejo usando tokens encriptados # Description: Script para autenticación con Forgejo usando tokens encriptados
# Modified: 2025/03/15 # Created: 2025/03/19 11:57:08
# Modified: 2025/03/19 15:47:08
# [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)
# #
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@roser.one>] # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -23,36 +24,39 @@
# Configuración inicial # Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin" BIN_BASE="bin"
BIN_LIBS="lib" BIN_LIBS="lib"
BIN_MESG="msg" BIN_MESG="msg"
BIN_CFGS="config"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# 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
BIN_HOME="$HOME/$DEVSPATH"
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias # Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib" source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto # Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
# Variables globales # Variables globales
title="${head_000} ${head_002}" title="${head_000} ${fgmsg_000}"
# Función para verificar si berg está instalado # Función para verificar si berg está instalado
check_berg_installed() { check_berg_installed() {
if ! command -v berg &> /dev/null; then if ! command -v berg &> /dev/null; then
echo "Error: berg (Forgejo CLI) no está instalado. Por favor, ejecute bin/fjcli_install.sh primero." echo "${fgmsg_001} ${fgmsg_002}"
exit 1 exit 1
fi fi
} }
@ -60,7 +64,7 @@ check_berg_installed() {
# Función para verificar si SOPS está instalado # Función para verificar si SOPS está instalado
check_sops_installed() { check_sops_installed() {
if ! command -v sops &> /dev/null; then if ! command -v sops &> /dev/null; then
echo "Error: SOPS no está instalado. Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias." echo "${fgmsg_003} ${fgmsg_004}"
exit 1 exit 1
fi fi
} }
@ -114,8 +118,8 @@ get_forgejo_url() {
login() { login() {
# Verificar que el archivo de token encriptado existe # Verificar que el archivo de token encriptado existe
if [ ! -f "${DEVELOPER_DIR}/forgejo.sops.yaml" ]; then if [ ! -f "${DEVELOPER_DIR}/forgejo.sops.yaml" ]; then
echo "Error: No se encontró el archivo de token para Forgejo." echo "${fgmsg_005}"
echo "Por favor, ejecute bin/cversadm_token.sh para configurar el token primero." echo "${fgmsg_006}"
exit 1 exit 1
fi fi
@ -126,22 +130,22 @@ login() {
local forgejo_url=$(get_forgejo_url) local forgejo_url=$(get_forgejo_url)
if [ -n "$forgejo_url" ]; then if [ -n "$forgejo_url" ]; then
echo "Usando servidor Forgejo: $forgejo_url" echo "${fgmsg_007} $forgejo_url"
export BERG_BASE_URL="$forgejo_url" export BERG_BASE_URL="$forgejo_url"
else else
echo "ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo." echo "${fgmsg_008}"
echo "Si la autenticación falla, establezca manualmente BERG_BASE_URL." echo "${fgmsg_009}"
fi fi
# Iniciar sesión con berg # Iniciar sesión con berg
echo "Iniciando sesión en Forgejo..." echo "${fgmsg_010}"
berg auth login -t "$token" berg auth login -t "$token"
local login_status=$? local login_status=$?
if [ $login_status -eq 0 ]; then if [ $login_status -eq 0 ]; then
echo "Sesión iniciada correctamente en Forgejo." echo "${fgmsg_011}"
else else
echo "Error al iniciar sesión en Forgejo. Por favor, verifique su token." echo "${fgmsg_012}"
exit 1 exit 1
fi fi
} }
@ -152,18 +156,18 @@ logout() {
local forgejo_url=$(get_forgejo_url) local forgejo_url=$(get_forgejo_url)
if [ -n "$forgejo_url" ]; then if [ -n "$forgejo_url" ]; then
echo "Usando servidor Forgejo: $forgejo_url" echo "${fgmsg_007} $forgejo_url"
export BERG_BASE_URL="$forgejo_url" export BERG_BASE_URL="$forgejo_url"
fi fi
# Ya no se eliminan alias # Ya no se eliminan alias
echo "Cerrando sesión de Forgejo..." echo "${fgmsg_013}"
if ! berg auth status &>/dev/null; then if ! berg auth status &>/dev/null; then
echo "No hay sesión activa en Forgejo." echo "${fgmsg_014}"
else else
berg auth logout -s 2>/dev/null || true berg auth logout -s 2>/dev/null || true
echo "Sesión cerrada." echo "${fgmsg_015}"
fi fi
} }

View file

@ -1,30 +1,77 @@
#!/bin/bash #!/bin/bash
# ------------------------------------------------------------------ #
# Script: ghadmin_install.sh
# Description: Script para instalar github manager CLI
# Created: 2025/03/19 11:57:08
# Modified: 2025/03/19 11:57:08
# [Author] Cortana Rosero One <cortana@rosero.one> # [Author] Cortana Rosero One <cortana@rosero.one>
# [Title] ghcli_install.sh - Instalador de GitHub CLI
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) # [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
# #
# AGPL License # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# Modified date: 14/03/2025 #
# ------------------------------------------------------------------ # 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
# Usar DEVELOPER_DIR de base.lib
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
title="${head_000} ${head_002}"
apps_title="${ghmsg_000}"
# Función para verificar si se está ejecutando como root # Función para verificar si se está ejecutando como root
check_root() { check_root() {
if [ "$(id -u)" -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
echo "Este script requiere privilegios de administrador." echo "${ghmsg_001}"
echo "Intentando escalar privilegios..." echo "${ghmsg_002}"
# Verificar si sudo está disponible # Verificar si sudo está disponible
if command -v sudo &> /dev/null; then if command -v sudo &> /dev/null; then
echo "Usando sudo para escalar privilegios..." echo "${ghmsg_003}"
sudo "$0" "$@" sudo "$0" "$@"
exit $? exit $?
elif command -v doas &> /dev/null; then elif command -v doas &> /dev/null; then
echo "Usando doas para escalar privilegios..." echo "${ghmsg_004}"
doas "$0" "$@" doas "$0" "$@"
exit $? exit $?
else else
echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root." echo "${ghmsg_005}"
clear
exit 1 exit 1
fi fi
fi fi
@ -46,12 +93,12 @@ detect_distro() {
DISTRO=$(uname -s) DISTRO=$(uname -s)
fi fi
echo "Distribución detectada: $DISTRO" echo "${ghmsg_006} $DISTRO"
} }
# Función para instalar GitHub CLI en sistemas basados en Debian/Ubuntu # Función para instalar GitHub CLI en sistemas basados en Debian/Ubuntu
install_gh_debian() { install_gh_debian() {
echo "Instalando GitHub CLI en sistema basado en Debian/Ubuntu..." echo "${ghmsg_007}"
# Añadir repositorio de GitHub CLI # Añadir repositorio de GitHub CLI
type -p curl >/dev/null || apt update && apt install curl -y type -p curl >/dev/null || apt update && apt install curl -y
@ -62,16 +109,17 @@ install_gh_debian() {
&& apt install gh -y && apt install gh -y
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente." echo "${ghmsg_008}"
else else
echo "ERROR: No se pudo instalar GitHub CLI." echo "${ghmsg_009}"
clear
exit 1 exit 1
fi fi
} }
# Función para instalar GitHub CLI en sistemas basados en Red Hat/Fedora # Función para instalar GitHub CLI en sistemas basados en Red Hat/Fedora
install_gh_redhat() { install_gh_redhat() {
echo "Instalando GitHub CLI en sistema basado en Red Hat/Fedora..." echo "${ghmsg_010}"
# Añadir repositorio de GitHub CLI # Añadir repositorio de GitHub CLI
dnf install -y dnf-plugins-core dnf install -y dnf-plugins-core
@ -79,51 +127,54 @@ install_gh_redhat() {
dnf install -y gh dnf install -y gh
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente." echo "${ghmsg_008}"
else else
echo "ERROR: No se pudo instalar GitHub CLI." echo "${ghmsg_009}"
clear
exit 1 exit 1
fi fi
} }
# Función para instalar GitHub CLI en Arch Linux # Función para instalar GitHub CLI en Arch Linux
install_gh_arch() { install_gh_arch() {
echo "Instalando GitHub CLI en Arch Linux..." echo "${ghmsg_011}"
# Instalar GitHub CLI desde los repositorios oficiales # Instalar GitHub CLI desde los repositorios oficiales
pacman -Sy --noconfirm gh pacman -Sy --noconfirm gh
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente." echo "${ghmsg_008}"
else else
echo "ERROR: No se pudo instalar GitHub CLI." echo "${ghmsg_009}"
clear
exit 1 exit 1
fi fi
} }
# Función para instalar GitHub CLI en sistemas basados en SUSE # Función para instalar GitHub CLI en sistemas basados en SUSE
install_gh_suse() { install_gh_suse() {
echo "Instalando GitHub CLI en sistema basado en SUSE..." echo "${ghmsg_012}"
# Añadir repositorio de GitHub CLI # Añadir repositorio de GitHub CLI
zypper addrepo --refresh https://cli.github.com/packages/rpm/gh-cli.repo zypper addrepo --refresh https://cli.github.com/packages/rpm/gh-cli.repo
zypper install -y gh zypper install -y gh
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente." echo "${ghmsg_008}"
else else
echo "ERROR: No se pudo instalar GitHub CLI." echo "${ghmsg_009}"
clear
exit 1 exit 1
fi fi
} }
# Función para instalar GitHub CLI en macOS # Función para instalar GitHub CLI en macOS
install_gh_macos() { install_gh_macos() {
echo "Instalando GitHub CLI en macOS..." echo "${ghmsg_013}"
# Verificar si Homebrew está instalado # Verificar si Homebrew está instalado
if ! command -v brew &> /dev/null; then if ! command -v brew &> /dev/null; then
echo "Homebrew no está instalado. Instalando Homebrew..." echo "${ghmsg_014}"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi fi
@ -131,9 +182,10 @@ install_gh_macos() {
brew install gh brew install gh
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente." echo "${ghmsg_008}"
else else
echo "ERROR: No se pudo instalar GitHub CLI." echo "${ghmsg_009}"
clear
exit 1 exit 1
fi fi
} }
@ -141,12 +193,14 @@ install_gh_macos() {
# Función para verificar si gh está instalado # Función para verificar si gh está instalado
check_gh() { check_gh() {
if command -v gh &> /dev/null; then if command -v gh &> /dev/null; then
echo "GitHub CLI ya está instalado." # Mostrar versión actual
echo "Versión actual:" local current_version=$(gh --version | head -n 1)
gh --version
read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL # Preguntar si se desea reinstalar o actualizar usando dialog
if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then dialog_yesno "${ghmsg_015}\n${ghmsg_016}\n${current_version}\n\n${ghmsg_017}"
echo "Operación cancelada."
if [ $? -ne 0 ]; then
dialog_error_box "${head_info}" "${ghmsg_018}"
exit 0 exit 0
fi fi
fi fi
@ -154,6 +208,12 @@ check_gh() {
# Función principal # Función principal
main() { main() {
# Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then
echo "${head_001}"
exit 1
fi
# Verificar si ya está instalado # Verificar si ya está instalado
check_gh check_gh
@ -183,30 +243,25 @@ main() {
install_gh_macos install_gh_macos
;; ;;
*) *)
echo "Distribución no soportada: $DISTRO" dialog_error_box "${head_error}" "${ghmsg_019} $DISTRO\n\n${ghmsg_020}"
echo "Por favor, visite https://github.com/cli/cli#installation para instrucciones de instalación manual."
exit 1 exit 1
;; ;;
esac esac
# Verificar la instalación # Verificar la instalación
if command -v gh &> /dev/null; then if command -v gh &> /dev/null; then
echo "GitHub CLI instalado correctamente." local current_version=$(gh --version | head -n 1)
gh --version
# Sugerir autenticación # Mostrar mensaje de éxito y sugerir autenticación usando dialog
echo "" dialog_error_box "${head_success}" "${ghmsg_008}\n\n${current_version}\n\n${ghmsg_021}\ngh auth login\n\n${ghmsg_022}"
echo "Para autenticarse con GitHub, ejecute:"
echo "gh auth login"
echo ""
echo "Para más información, visite: https://cli.github.com/manual/"
else else
echo "ERROR: La instalación de GitHub CLI falló." dialog_error_box "${head_error}" "${ghmsg_023}"
exit 1 exit 1
fi fi
clear
} }
# Ejecutar función principal # Ejecutar función principal
main "$@" main "$@"
exit 0 exit 0

View file

@ -1,30 +1,76 @@
#!/bin/bash #!/bin/bash
# ------------------------------------------------------------------ #
# Script: gladmin_install.sh
# Description: Script para instalar Gitlab Manager CLI.
# Created: 2025/03/19 11:57:08
# Modified: 2025/03/19 11:57:08
# [Author] Cortana Rosero One <cortana@rosero.one> # [Author] Cortana Rosero One <cortana@rosero.one>
# [Title] glcli_install.sh - Instalador de GitLab CLI
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219) # [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
# #
# AGPL License # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# Modified date: 14/03/2025 #
# ------------------------------------------------------------------ # 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
# Usar DEVELOPER_DIR de base.lib
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/developers.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
title="${head_000} ${head_002}"
apps_title="${glmsg_000}"
# Función para verificar si se está ejecutando como root # Función para verificar si se está ejecutando como root
check_root() { check_root() {
if [ "$(id -u)" -ne 0 ]; then if [ "$(id -u)" -ne 0 ]; then
echo "Este script requiere privilegios de administrador." echo "${glmsg_001}"
echo "Intentando escalar privilegios..." echo "${glmsg_002}"
# Verificar si sudo está disponible # Verificar si sudo está disponible
if command -v sudo &> /dev/null; then if command -v sudo &> /dev/null; then
echo "Usando sudo para escalar privilegios..." echo "${glmsg_003}"
sudo "$0" "$@" sudo "$0" "$@"
exit $? exit $?
elif command -v doas &> /dev/null; then elif command -v doas &> /dev/null; then
echo "Usando doas para escalar privilegios..." echo "${glmsg_004}"
doas "$0" "$@" doas "$0" "$@"
exit $? exit $?
else else
echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root." echo "${glmsg_005}"
exit 1 exit 1
fi fi
fi fi
@ -46,21 +92,21 @@ detect_distro() {
DISTRO=$(uname -s) DISTRO=$(uname -s)
fi fi
echo "Distribución detectada: $DISTRO" echo "${glmsg_006} $DISTRO"
} }
# Función para instalar glab mediante Homebrew en macOS y Linux # Función para instalar glab mediante Homebrew en macOS y Linux
install_glab_homebrew() { install_glab_homebrew() {
echo "Instalando GitLab CLI mediante Homebrew..." echo "${glmsg_007}"
# Verificar si Homebrew está instalado # Verificar si Homebrew está instalado
if ! command -v brew &> /dev/null; then if ! command -v brew &> /dev/null; then
echo "Homebrew no está instalado. Instalando Homebrew..." echo "${glmsg_008}"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Verificar si la instalación fue exitosa # Verificar si la instalación fue exitosa
if ! command -v brew &> /dev/null; then if ! command -v brew &> /dev/null; then
echo "ERROR: No se pudo instalar Homebrew." echo "${glmsg_009}"
return 1 return 1
fi fi
fi fi
@ -69,17 +115,17 @@ install_glab_homebrew() {
brew install gitlab-glab/tap/glab brew install gitlab-glab/tap/glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante Homebrew." echo "${glmsg_010}"
return 0 return 0
else else
echo "ERROR: No se pudo instalar GitLab CLI mediante Homebrew." echo "${glmsg_011}"
return 1 return 1
fi fi
} }
# Función para instalar glab en sistemas basados en Debian/Ubuntu # Función para instalar glab en sistemas basados en Debian/Ubuntu
install_glab_debian() { install_glab_debian() {
echo "Instalando GitLab CLI en sistema basado en Debian/Ubuntu..." echo "${glmsg_012}"
# Verificar si curl está instalado # Verificar si curl está instalado
if ! command -v curl &> /dev/null; then if ! command -v curl &> /dev/null; then
@ -88,13 +134,13 @@ install_glab_debian() {
# Intentar primero usando los paquetes del sistema si están disponibles # Intentar primero usando los paquetes del sistema si están disponibles
if command -v apt &> /dev/null; then if command -v apt &> /dev/null; then
echo "Verificando si glab está disponible en los repositorios..." echo "${glmsg_013}"
apt-cache search --names-only "^glab$" 2>/dev/null | grep -q "^glab" apt-cache search --names-only "^glab$" 2>/dev/null | grep -q "^glab"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI encontrado en los repositorios. Instalando..." echo "${glmsg_014}"
apt update && apt install -y glab apt update && apt install -y glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales." echo "${glmsg_015}"
return 0 return 0
fi fi
fi fi
@ -102,81 +148,81 @@ install_glab_debian() {
# Si no está en los repositorios, usar el script oficial # Si no está en los repositorios, usar el script oficial
if command -v gpg &> /dev/null; then if command -v gpg &> /dev/null; then
echo "Agregando repositorio oficial de GitLab..." echo "${glmsg_016}"
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante script oficial." echo "${glmsg_017}"
return 0 return 0
fi fi
fi fi
# Si el método anterior falla, probar con Homebrew # Si el método anterior falla, probar con Homebrew
echo "Intentando instalar mediante Homebrew..." echo "${glmsg_018}"
install_glab_homebrew install_glab_homebrew
return $? return $?
} }
# Función para instalar glab en sistemas basados en Red Hat/Fedora # Función para instalar glab en sistemas basados en Red Hat/Fedora
install_glab_redhat() { install_glab_redhat() {
echo "Instalando GitLab CLI en sistema basado en Red Hat/Fedora..." echo "${glmsg_019}"
# Verificar si dnf está instalado # Verificar si dnf está instalado
if command -v dnf &> /dev/null; then if command -v dnf &> /dev/null; then
# Verificar si glab está disponible en los repositorios # Verificar si glab está disponible en los repositorios
echo "Verificando si glab está disponible en los repositorios..." echo "${glmsg_013}"
dnf list glab &>/dev/null dnf list glab &>/dev/null
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI encontrado en los repositorios. Instalando..." echo "${glmsg_014}"
dnf install -y glab dnf install -y glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales." echo "${glmsg_015}"
return 0 return 0
fi fi
fi fi
# Si no está en los repositorios, usar el script oficial # Si no está en los repositorios, usar el script oficial
if command -v gpg &> /dev/null; then if command -v gpg &> /dev/null; then
echo "Usando script oficial de instalación..." echo "${glmsg_020}"
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante script oficial." echo "${glmsg_017}"
return 0 return 0
fi fi
fi fi
# Si el método anterior falla, probar con snap # Si el método anterior falla, probar con snap
if command -v snap &> /dev/null; then if command -v snap &> /dev/null; then
echo "Intentando instalar mediante snap..." echo "${glmsg_021}"
snap install glab snap install glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante snap." echo "${glmsg_022}"
return 0 return 0
fi fi
fi fi
# Si dnf no está disponible, pero yum sí # Si dnf no está disponible, pero yum sí
elif command -v yum &> /dev/null; then elif command -v yum &> /dev/null; then
# Verificar si glab está disponible en los repositorios # Verificar si glab está disponible en los repositorios
echo "Verificando si glab está disponible en los repositorios..." echo "${glmsg_013}"
yum list glab &>/dev/null yum list glab &>/dev/null
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI encontrado en los repositorios. Instalando..." echo "${glmsg_014}"
yum install -y glab yum install -y glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales." echo "${glmsg_015}"
return 0 return 0
fi fi
fi fi
fi fi
# Si los métodos anteriores fallan, probar con Homebrew # Si los métodos anteriores fallan, probar con Homebrew
echo "Intentando instalar mediante Homebrew..." echo "${glmsg_018}"
install_glab_homebrew install_glab_homebrew
return $? return $?
} }
# Función para instalar glab en Arch Linux # Función para instalar glab en Arch Linux
install_glab_arch() { install_glab_arch() {
echo "Instalando GitLab CLI en Arch Linux..." echo "${glmsg_023}"
# Intentar primero usando el repositorio oficial # Intentar primero usando el repositorio oficial
if command -v pacman &> /dev/null; then if command -v pacman &> /dev/null; then
@ -184,7 +230,7 @@ install_glab_arch() {
if pacman -Ss glab | grep -q "^community/glab"; then if pacman -Ss glab | grep -q "^community/glab"; then
pacman -Sy --noconfirm glab pacman -Sy --noconfirm glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales." echo "${glmsg_015}"
return 0 return 0
fi fi
fi fi
@ -193,55 +239,55 @@ install_glab_arch() {
if command -v yay &> /dev/null; then if command -v yay &> /dev/null; then
yay -S --noconfirm glab yay -S --noconfirm glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde AUR." echo "${glmsg_024}"
return 0 return 0
fi fi
fi fi
fi fi
# Si los métodos anteriores fallan, probar con Homebrew # Si los métodos anteriores fallan, probar con Homebrew
echo "Intentando instalar mediante Homebrew..." echo "${glmsg_018}"
install_glab_homebrew install_glab_homebrew
return $? return $?
} }
# Función para instalar glab en sistemas basados en SUSE # Función para instalar glab en sistemas basados en SUSE
install_glab_suse() { install_glab_suse() {
echo "Instalando GitLab CLI en sistema basado en SUSE..." echo "${glmsg_025}"
# Intentar primero usando el script oficial # Intentar primero usando el script oficial
if command -v gpg &> /dev/null; then if command -v gpg &> /dev/null; then
echo "Usando script oficial de instalación..." echo "${glmsg_020}"
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante script oficial." echo "${glmsg_017}"
return 0 return 0
fi fi
fi fi
# Si el método anterior falla, probar con snap # Si el método anterior falla, probar con snap
if command -v snap &> /dev/null; then if command -v snap &> /dev/null; then
echo "Intentando instalar mediante snap..." echo "${glmsg_021}"
snap install glab snap install glab
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante snap." echo "${glmsg_022}"
return 0 return 0
fi fi
fi fi
# Si los métodos anteriores fallan, probar con Homebrew # Si los métodos anteriores fallan, probar con Homebrew
echo "Intentando instalar mediante Homebrew..." echo "${glmsg_018}"
install_glab_homebrew install_glab_homebrew
return $? return $?
} }
# Función para instalar directamente usando Go # Función para instalar directamente usando Go
install_glab_go() { install_glab_go() {
echo "Intentando instalar GitLab CLI mediante Go..." echo "${glmsg_026}"
# Verificar si Go está instalado # Verificar si Go está instalado
if ! command -v go &> /dev/null; then if ! command -v go &> /dev/null; then
echo "Go no está instalado. Se requiere Go para este método de instalación." echo "${glmsg_027}"
return 1 return 1
fi fi
@ -249,20 +295,20 @@ install_glab_go() {
go install gitlab.com/gitlab-org/cli/cmd/glab@main go install gitlab.com/gitlab-org/cli/cmd/glab@main
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante Go." echo "${glmsg_028}"
echo "Asegúrese de que \$GOPATH/bin esté en su PATH." echo "${glmsg_029}"
echo "Por ejemplo, puede agregar lo siguiente a su ~/.bashrc o ~/.zshrc:" echo "${glmsg_030}"
echo "export PATH=\$PATH:\$HOME/go/bin" echo "${glmsg_031}"
return 0 return 0
else else
echo "ERROR: No se pudo instalar GitLab CLI mediante Go." echo "${glmsg_032}"
return 1 return 1
fi fi
} }
# Función para instalar usando método binario genérico # Función para instalar usando método binario genérico
install_glab_binary() { install_glab_binary() {
echo "Instalando GitLab CLI usando binarios precompilados..." echo "${glmsg_033}"
# Crear directorio temporal # Crear directorio temporal
TMP_DIR=$(mktemp -d) TMP_DIR=$(mktemp -d)
@ -278,7 +324,7 @@ install_glab_binary() {
ARCH="arm64" ARCH="arm64"
;; ;;
*) *)
echo "Arquitectura no soportada: $ARCH" echo "${glmsg_034} $ARCH"
return 1 return 1
;; ;;
esac esac
@ -295,12 +341,12 @@ install_glab_binary() {
# Construir URL de descarga # Construir URL de descarga
DOWNLOAD_URL="https://github.com/profclems/glab/releases/download/${LATEST_VERSION}/glab_${LATEST_VERSION:1}_${OS}_${ARCH}.tar.gz" DOWNLOAD_URL="https://github.com/profclems/glab/releases/download/${LATEST_VERSION}/glab_${LATEST_VERSION:1}_${OS}_${ARCH}.tar.gz"
echo "Descargando GitLab CLI desde: $DOWNLOAD_URL" echo "${glmsg_035} $DOWNLOAD_URL"
# Descargar y extraer # Descargar y extraer
curl -L "$DOWNLOAD_URL" -o glab.tar.gz curl -L "$DOWNLOAD_URL" -o glab.tar.gz
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "ERROR: No se pudo descargar GitLab CLI." echo "${glmsg_036}"
cd - > /dev/null cd - > /dev/null
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
return 1 return 1
@ -308,7 +354,7 @@ install_glab_binary() {
tar xzf glab.tar.gz tar xzf glab.tar.gz
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
echo "ERROR: No se pudo extraer el archivo de GitLab CLI." echo "${glmsg_037}"
cd - > /dev/null cd - > /dev/null
rm -rf "$TMP_DIR" rm -rf "$TMP_DIR"
return 1 return 1
@ -324,10 +370,10 @@ install_glab_binary() {
# Verificar instalación # Verificar instalación
if command -v glab &> /dev/null; then if command -v glab &> /dev/null; then
echo "GitLab CLI instalado correctamente mediante binarios precompilados." echo "${glmsg_038}"
return 0 return 0
else else
echo "ERROR: No se pudo instalar GitLab CLI mediante binarios precompilados." echo "${glmsg_039}"
return 1 return 1
fi fi
} }
@ -335,12 +381,14 @@ install_glab_binary() {
# Función para verificar si glab está instalado # Función para verificar si glab está instalado
check_glab() { check_glab() {
if command -v glab &> /dev/null; then if command -v glab &> /dev/null; then
echo "GitLab CLI ya está instalado." # Mostrar versión actual
echo "Versión actual:" local current_version=$(glab --version | head -n 1)
glab --version
read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL # Preguntar si se desea reinstalar o actualizar usando dialog
if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then dialog_yesno "${glmsg_040}\n${glmsg_041}\n${current_version}\n\n${glmsg_042}"
echo "Operación cancelada."
if [ $? -ne 0 ]; then
dialog_error_box "${head_info}" "${glmsg_043}"
exit 0 exit 0
fi fi
fi fi
@ -348,6 +396,12 @@ check_glab() {
# Función principal # Función principal
main() { main() {
# Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then
echo "${head_001}"
exit 1
fi
# Verificar si ya está instalado # Verificar si ya está instalado
check_glab check_glab
@ -394,14 +448,13 @@ main() {
fi fi
;; ;;
*) *)
echo "Distribución no soportada directamente: $DISTRO" dialog_error_box "${head_warning}" "${glmsg_044} $DISTRO\n${glmsg_045}"
echo "Intentando métodos alternativos..."
;; ;;
esac esac
# Si no se pudo instalar con el método específico para la distribución, intentar métodos alternativos # Si no se pudo instalar con el método específico para la distribución, intentar métodos alternativos
if [ "$install_success" = false ]; then if [ "$install_success" = false ]; then
echo "Intentando métodos alternativos de instalación..." dialog_error_box "${head_info}" "${glmsg_046}"
# Intentar instalar con Go # Intentar instalar con Go
if command -v go &> /dev/null; then if command -v go &> /dev/null; then
@ -421,25 +474,19 @@ main() {
# Si todos los métodos fallan # Si todos los métodos fallan
if [ "$install_success" = false ]; then if [ "$install_success" = false ]; then
echo "No se pudo instalar GitLab CLI con ninguno de los métodos disponibles." dialog_error_box "${head_error}" "${glmsg_047}\n\n${glmsg_048}"
echo "Por favor, visite https://gitlab.com/gitlab-org/cli para instrucciones de instalación manual."
exit 1 exit 1
fi fi
fi fi
# Verificar la instalación # Verificar la instalación
if command -v glab &> /dev/null; then if command -v glab &> /dev/null; then
echo "GitLab CLI instalado correctamente." local current_version=$(glab --version | head -n 1)
glab --version
# Sugerir autenticación # Mostrar mensaje de éxito y sugerir autenticación usando dialog
echo "" dialog_error_box "${head_success}" "${glmsg_049}\n\n${current_version}\n\n${glmsg_050}\nglab auth login\n\n${glmsg_051}"
echo "Para autenticarse con GitLab, ejecute:"
echo "glab auth login"
echo ""
echo "Para más información, visite: https://gitlab.com/gitlab-org/cli/blob/main/docs/index.md"
else else
echo "ERROR: La instalación de GitLab CLI falló." dialog_error_box "${head_error}" "${glmsg_052}"
exit 1 exit 1
fi fi
} }
@ -447,4 +494,7 @@ main() {
# Ejecutar función principal # Ejecutar función principal
main "$@" main "$@"
# Limpiar la pantalla al finalizar
clear
exit 0 exit 0

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# gpg_init.sh # Script: gpg_init.sh
# Modified: 2024/12/09 10:27:00 # Description: Script de inicialización de estructura para firma GPG
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>] # Created: 2024/12/09 10:27:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,10 +21,23 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
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
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
@ -43,8 +60,6 @@ load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# Load gpg messages # Load gpg messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "gpg" load_messages $BIN_HOME $BIN_MESG $BIN_LANG "gpg"
########### MAIN PROGRAM ########### ########### MAIN PROGRAM ###########
# Set program title # Set program title

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# helix_install.sh # Script: helix_install.sh
# Modified: 2025/03/11 15:00:00 # Description: Script para instalar Helix Editor
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] # Created: 2025/03/11 15:00:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -21,22 +25,32 @@
# Uso: # Uso:
# ./helix_install.sh # ./helix_install.sh
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_MESG=bin/msg BIN_BASE="bin"
BIN_LIBS=bin/lib BIN_LIBS="lib"
BIN_CFGS=bin/config BIN_MESG="msg"
VERSION=1.0.0 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
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source $BIN_HOME/$BIN_LIBS/console.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Load head messages # Cargar mensajes en el idioma del sistema o español por defecto
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
apps_title="${hx_001}" apps_title="${hx_001}"
@ -221,6 +235,10 @@ install_helix_tarball() {
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -ne 0 ]; then
dialog_error_box "${head_superuser}" "${hx_011}" dialog_error_box "${head_superuser}" "${hx_011}"
dialog_input_pass "${npm_002}" "" "" dialog_input_pass "${npm_002}" "" ""
if [ $? -ne 0 ]; then
dialog_error_box "${head_error}" "${npm_003}"
finish
fi
SUDO_PASS="$value" SUDO_PASS="$value"
# Verificar que la contraseña funcione # Verificar que la contraseña funcione

170
bin/jarvis_token.sh Executable file
View file

@ -0,0 +1,170 @@
#!/bin/bash
#
# Script: jarvis_token.sh
# Description: Script para encriptar el Jarvis token de Claude Code usando SOPS
# Created: 2025/03/12 20:26:07
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [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/>.
# Script para encriptar el token de Cortana (Claude Code) para Cortana usando SOPS
# Jarvis Token se usa para el agente Jarvis a nivel de servidor de desarrollo autonomo
# Configuración inicial
# Usar DEVELOPER_DIR de base.lib
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
BIN_SOPS="sops"
# 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
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}"
check_dependencies() {
# Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then
echo "${npm_001}"
exit 1
fi
# Verificar que 'sops' esté instalado
if ! command -v sops &>/dev/null; then
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_051}" 7 50
exit 1
fi
}
encrypt_token() {
local output_file="$1"
local token="$2"
local token_file="/tmp/jarvis_token_$$"
# Ensure directory exists
mkdir -p "${BIN_HOME}/${BIN_SOPS}"
# Convert token to base64
local token_base64=$(echo -n "$token" | base64)
# Create temporary file with base64 encoded token
echo "$token_base64" > "$token_file"
# Encrypt using sops
if sops --encrypt "$token_file" > "$output_file"; then
# Ensure secure permissions
chmod 600 "$output_file"
else
rm -f "$token_file"
return 1
fi
# Clean up
rm -f "$token_file"
return 0
}
main() {
check_dependencies
# Ensure directory exists
mkdir -p "${BIN_HOME}/${BIN_SOPS}"
# Get SOPS config file path
sops_file="${BIN_HOME}/${BIN_SOPS}/jarvis.sops.yaml"
# Check if file exists and ask for confirmation to overwrite
if [ -f "$sops_file" ]; then
dialog --backtitle "$title" --title "${npm_031}" \
--yesno "El archivo $sops_file ${npm_053}" 7 60
if [ $? -ne 0 ]; then
dialog --backtitle "$title" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 0
fi
fi
# Get Jarvis token
while true; do
token=$(dialog --backtitle "$title" --stdout --title "${npm_000_0} Token" \
--passwordbox "${npm_054} ${npm_000_0}:" 8 60)
# Check if user canceled
if [ $? -ne 0 ]; then
clear
dialog --backtitle "$title" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 0
fi
# Validate token
if [ -z "$token" ]; then
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_055}" 7 60
continue
fi
# Check token length (should be at least 64 characters)
if [ ${#token} -lt 64 ]; then
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_056}" 7 60
continue
fi
# Check token format (should contain alphanumeric characters and some special chars)
if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then
dialog --backtitle "$title" --title "${head_warning}" --msgbox "${npm_057}" 7 60
fi
# Token is valid
break
done
# Clear screen before proceeding
clear
# Encrypt the token
if encrypt_token "$sops_file" "$token"; then
dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} $sops_file" 7 70
else
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50
clear
exit 1
fi
}
# Execute main function
main
clear
exit 0

View file

@ -34,7 +34,7 @@ DEVELOPER_DIR=${HOME}/.developer
DATENOW="$(date +"%Y-%m-%d %H:%M:%S")" DATENOW="$(date +"%Y-%m-%d %H:%M:%S")"
DATEBAK="$(date +"%Y%m%d%H%M%S")" DATEBAK="$(date +"%Y%m%d%H%M%S")"
FREEKV_URL=$(cat < "${BIN_HOME}/${BIN_BASE}/${CONFPATH}/freekeyval.dat") FREEKV_URL=$(cat < "${BIN_PATH:=${BIN_HOME}}/${CONFPATH}/freekeyval.dat")
FREEKV_SOPS_FILE=freekv-sops.devs.yaml FREEKV_SOPS_FILE=freekv-sops.devs.yaml
DOCKER_LOCAL=dockerfile.local DOCKER_LOCAL=dockerfile.local
@ -44,8 +44,6 @@ DOCKER_BUILD=build
DOCKER_FILE=Dockerfile DOCKER_FILE=Dockerfile
DOCKER_ENTRY=entrypoint.sh DOCKER_ENTRY=entrypoint.sh
VERSION="$(cat < ${BIN_HOME}/${BIN_CONF}/version)"
# Verificar si el script se está ejecutando como usuario root (superusuario) # Verificar si el script se está ejecutando como usuario root (superusuario)
function is_root() { function is_root() {
if [ "$(id -u)" -eq 0 ]; then if [ "$(id -u)" -eq 0 ]; then

View file

@ -60,3 +60,136 @@ cvmsg_015="El token no puede estar vacío. Por favor ingrese un token válido."
cvmsg_016="El token parece ser demasiado corto. Verifique que haya copiado el token completo." cvmsg_016="El token parece ser demasiado corto. Verifique que haya copiado el token completo."
cvmsg_017="El token contiene caracteres no estándar. Verifique que sea correcto." cvmsg_017="El token contiene caracteres no estándar. Verifique que sea correcto."
# Mensajes para qr_secret.sh
qrmsg_000="EXTRACTOR DE SECRETOS QR"
qrmsg_001="Nombre del archivo"
qrmsg_002="Ingrese un nombre para el archivo (solo letras, números, ., - y _)"
qrmsg_003="Seleccione una imagen QR"
qrmsg_004="El nombre no puede estar vacío."
qrmsg_005="El nombre no puede contener espacios."
qrmsg_006="El nombre solo puede contener letras, números, ., - y _."
qrmsg_007="No se pudo extraer el secreto de la imagen QR seleccionada."
qrmsg_008="Secreto guardado correctamente en"
qrmsg_009="No se pudo guardar el secreto encriptado."
qrmsg_010="Operación cancelada por el usuario."
qrmsg_011="Éxito"
qrmsg_012="Error"
qrmsg_013="Dialog no está instalado"
qrmsg_014="Zbar no está instalado"
# Mensajes para fjadmin_install.sh
fjmsg_000="INSTALADOR DE FORGEJO CLI"
fjmsg_001="Instalando Forgejo CLI"
fjmsg_002="Cargo no está instalado. Instalando Rust y Cargo..."
fjmsg_003="Rust y Cargo han sido instalados correctamente."
fjmsg_004="Cargo ya está instalado."
fjmsg_005="Forgejo CLI no está instalado. Instalando..."
fjmsg_006="ERROR: No se pudo encontrar cargo en el PATH después de la instalación."
fjmsg_007="Por favor reinicie su terminal e intente nuevamente."
fjmsg_008="Forgejo CLI instalado correctamente."
fjmsg_009="ERROR: No se pudo instalar Forgejo CLI."
fjmsg_010="Preparando instalación de Forgejo CLI..."
fjmsg_011="Instalación completada."
fjmsg_012="¿Desea instalar Forgejo CLI?"
fjmsg_013="Esta herramienta le permite administrar instancias de Forgejo desde línea de comandos."
fjmsg_014="Instalación cancelada por el usuario."
# Mensajes para forgejo_login.sh
fgmsg_000="INICIO DE SESIÓN EN FORGEJO"
fgmsg_001="Error: berg (Forgejo CLI) no está instalado."
fgmsg_002="Por favor, ejecute ${BIN_HOME}/${BIN_BASE}/fjadmin_install.sh primero."
fgmsg_003="Error: SOPS no está instalado."
fgmsg_004="Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias."
fgmsg_005="Error: No se encontró el archivo de token para Forgejo."
fgmsg_006="Por favor, ejecute bin/cversadm_token.sh para configurar el token primero."
fgmsg_007="Usando servidor Forgejo:"
fgmsg_008="ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo."
fgmsg_009="Si la autenticación falla, establezca manualmente BERG_BASE_URL."
fgmsg_010="Iniciando sesión en Forgejo..."
fgmsg_011="Sesión iniciada correctamente en Forgejo."
fgmsg_012="Error al iniciar sesión en Forgejo. Por favor, verifique su token."
fgmsg_013="Cerrando sesión de Forgejo..."
fgmsg_014="No hay sesión activa en Forgejo."
fgmsg_015="Sesión cerrada."
# Mensajes para ghadmin_install.sh
ghmsg_000="INSTALADOR DE GITHUB CLI"
ghmsg_001="Este script requiere privilegios de administrador."
ghmsg_002="Intentando escalar privilegios..."
ghmsg_003="Usando sudo para escalar privilegios..."
ghmsg_004="Usando doas para escalar privilegios..."
ghmsg_005="ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
ghmsg_006="Distribución detectada:"
ghmsg_007="Instalando GitHub CLI en sistema basado en Debian/Ubuntu..."
ghmsg_008="GitHub CLI instalado correctamente."
ghmsg_009="ERROR: No se pudo instalar GitHub CLI."
ghmsg_010="Instalando GitHub CLI en sistema basado en Red Hat/Fedora..."
ghmsg_011="Instalando GitHub CLI en Arch Linux..."
ghmsg_012="Instalando GitHub CLI en sistema basado en SUSE..."
ghmsg_013="Instalando GitHub CLI en macOS..."
ghmsg_014="Homebrew no está instalado. Instalando Homebrew..."
ghmsg_015="GitHub CLI ya está instalado."
ghmsg_016="Versión actual:"
ghmsg_017="¿Desea reinstalar o actualizar? (s/n):"
ghmsg_018="Operación cancelada."
ghmsg_019="Distribución no soportada:"
ghmsg_020="Por favor, visite https://github.com/cli/cli#installation para instrucciones de instalación manual."
ghmsg_021="Para autenticarse con GitHub, ejecute:"
ghmsg_022="Para más información, visite: https://cli.github.com/manual/"
ghmsg_023="ERROR: La instalación de GitHub CLI falló."
# Mensajes para gladmin_install.sh
glmsg_000="INSTALADOR DE GITLAB CLI"
glmsg_001="Este script requiere privilegios de administrador."
glmsg_002="Intentando escalar privilegios..."
glmsg_003="Usando sudo para escalar privilegios..."
glmsg_004="Usando doas para escalar privilegios..."
glmsg_005="ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
glmsg_006="Distribución detectada:"
glmsg_007="Instalando GitLab CLI mediante Homebrew..."
glmsg_008="Homebrew no está instalado. Instalando Homebrew..."
glmsg_009="ERROR: No se pudo instalar Homebrew."
glmsg_010="GitLab CLI instalado correctamente mediante Homebrew."
glmsg_011="ERROR: No se pudo instalar GitLab CLI mediante Homebrew."
glmsg_012="Instalando GitLab CLI en sistema basado en Debian/Ubuntu..."
glmsg_013="Verificando si glab está disponible en los repositorios..."
glmsg_014="GitLab CLI encontrado en los repositorios. Instalando..."
glmsg_015="GitLab CLI instalado correctamente desde los repositorios oficiales."
glmsg_016="Agregando repositorio oficial de GitLab..."
glmsg_017="GitLab CLI instalado correctamente mediante script oficial."
glmsg_018="Intentando instalar mediante Homebrew..."
glmsg_019="Instalando GitLab CLI en sistema basado en Red Hat/Fedora..."
glmsg_020="Usando script oficial de instalación..."
glmsg_021="Intentando instalar mediante snap..."
glmsg_022="GitLab CLI instalado correctamente mediante snap."
glmsg_023="Instalando GitLab CLI en Arch Linux..."
glmsg_024="GitLab CLI instalado correctamente desde AUR."
glmsg_025="Instalando GitLab CLI en sistema basado en SUSE..."
glmsg_026="Intentando instalar GitLab CLI mediante Go..."
glmsg_027="Go no está instalado. Se requiere Go para este método de instalación."
glmsg_028="GitLab CLI instalado correctamente mediante Go."
glmsg_029="Asegúrese de que $GOPATH/bin esté en su PATH."
glmsg_030="Por ejemplo, puede agregar lo siguiente a su ~/.bashrc o ~/.zshrc:"
glmsg_031="export PATH=$PATH:$HOME/go/bin"
glmsg_032="ERROR: No se pudo instalar GitLab CLI mediante Go."
glmsg_033="Instalando GitLab CLI usando binarios precompilados..."
glmsg_034="Arquitectura no soportada:"
glmsg_035="Descargando GitLab CLI desde:"
glmsg_036="ERROR: No se pudo descargar GitLab CLI."
glmsg_037="ERROR: No se pudo extraer el archivo de GitLab CLI."
glmsg_038="GitLab CLI instalado correctamente mediante binarios precompilados."
glmsg_039="ERROR: No se pudo instalar GitLab CLI mediante binarios precompilados."
glmsg_040="GitLab CLI ya está instalado."
glmsg_041="Versión actual:"
glmsg_042="¿Desea reinstalar o actualizar? (s/n):"
glmsg_043="Operación cancelada."
glmsg_044="Distribución no soportada directamente:"
glmsg_045="Intentando métodos alternativos..."
glmsg_046="Intentando métodos alternativos de instalación..."
glmsg_047="No se pudo instalar GitLab CLI con ninguno de los métodos disponibles."
glmsg_048="Por favor, visite https://gitlab.com/gitlab-org/cli para instrucciones de instalación manual."
glmsg_049="GitLab CLI instalado correctamente."
glmsg_050="Para autenticarse con GitLab, ejecute:"
glmsg_051="Para más información, visite: https://gitlab.com/gitlab-org/cli/blob/main/docs/index.md"
glmsg_052="ERROR: La instalación de GitLab CLI falló."

View file

@ -18,6 +18,7 @@ head_installing="Instalando"
head_info="INFO" head_info="INFO"
head_warning="ADVERTENCIA" head_warning="ADVERTENCIA"
head_error="ERROR" head_error="ERROR"
head_success="ÉXITO"
head_unknow="UNKNOW" head_unknow="UNKNOW"
head_version="Versión" head_version="Versión"
head_ubuntu="ubuntu" head_ubuntu="ubuntu"
@ -84,7 +85,9 @@ git_end_commited="Todos los cambios al repositorio nuevo han sido aplicados!"
git_new_project_pushed="Proyecto ha sido creado/actualizado en repositorio remoto" git_new_project_pushed="Proyecto ha sido creado/actualizado en repositorio remoto"
npm_000="Cortana" npm_000="Cortana"
npm_000_0="Jarvis"
npm_000_1="Rosero One" npm_000_1="Rosero One"
npm_000_2="Alias"
npm_001="El programa 'dialog' no está instalado. Por favor, instálalo e inténtalo nuevamente." npm_001="El programa 'dialog' no está instalado. Por favor, instálalo e inténtalo nuevamente."
npm_002="No eres super usuario. Ingresa la contraseña para escalamiento:" npm_002="No eres super usuario. Ingresa la contraseña para escalamiento:"
npm_003="Contraseña incorrecta o error al escalar privilegios." npm_003="Contraseña incorrecta o error al escalar privilegios."
@ -103,22 +106,22 @@ npm_014="Instalación completada."
npm_015="Instalación completada. Versiones instaladas: Node.js: [versión] npm: [versión]" npm_015="Instalación completada. Versiones instaladas: Node.js: [versión] npm: [versión]"
npm_016="Instalador de Node.js y npm" npm_016="Instalador de Node.js y npm"
npm_017="Confirmar Sistema" npm_017="Confirmar Sistema"
npm_018="Instalación" npm_018="Instalación de Anthropic Claude Code"
npm_019="Versiones instaladas:" npm_019="Versiones instaladas:"
npm_020="No encontrado" npm_020="No encontrado"
npm_021="Instalación Finalizada" npm_021="Instalación Finalizada"
npm_022="npm no está instalado. Por favor instálalo e inténtalo de nuevo." npm_022="npm no está instalado. Por favor instálalo e inténtalo de nuevo."
npm_023="Se procederá a instalar Anthropoc Claude Code usando npm." npm_023="Se procederá a instalar Anthropic Claude Code usando npm."
npm_024="Instalación completada satisfactoriamente." npm_024="Instalación completada satisfactoriamente."
npm_025="Ocurrió un error durante la instalación." npm_025="Ocurrió un error durante la instalación."
npm_026="Desinstalar" npm_026="Desinstalar"
npm_027="Se procederá a desinstalar Anthropoc Claude Code usando npm." npm_027="Se procederá a desinstalar Anthropic Claude Code usando npm."
npm_028="Desinstalación Completa" npm_028="Desinstalación Completa"
npm_029="Desinstalación completada exitosamente." npm_029="Desinstalación completada exitosamente."
npm_030="Ocurrió un error durante la desinstalación." npm_030="Ocurrió un error durante la desinstalación."
npm_031="Confirmación" npm_031="Confirmación"
npm_032="¿Está seguro que desea desinstalar Anthropoc Claude Code?" npm_032="¿Está seguro que desea desinstalar Anthropic Claude Code?"
npm_033="¿Desea instalar Anthropoc Claude Code?" npm_033="¿Desea instalar Anthropic Claude Code?"
npm_034="Alias existente" npm_034="Alias existente"
npm_035="El alias 'cortana' ya existe en" npm_035="El alias 'cortana' ya existe en"
npm_036="Alias creado" npm_036="Alias creado"
@ -146,6 +149,7 @@ 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_001="Instalador de Helix Editor"
hx_002="Este script instalará Helix Editor. Soporta Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)." 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_003="Descargando la última versión de Helix..."

View file

@ -1,11 +1,12 @@
#!/bin/bash #!/bin/bash
# npm_install.sh #
# Script interactivo para instalar Node.js y npm en múltiples sistemas operativos # Script: npm_install.sh
# Soporta: Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew) # Description: # Script interactivo para instalar Node.js y npm en múltiples sistemas operativos
# Requiere: dialog # Created: 2025/03/09 10:27:00
# Modified: 2025/03/09 10:27:00 # Modified: 2025/03/19 11:57:08
# Generado con inteligencia artificial # [Author] Mauro Rosero P. <mauro@rosero.one>
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>] #
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -20,22 +21,32 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_CFGS=bin/config BIN_LIBS="lib"
VERSION=1.0.1 BIN_MESG="msg"
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
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
#baselib_test
# Load head messages # Cargar mensajes en el idioma del sistema o español por defecto
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
# Función para limpiar la pantalla y salir # Función para limpiar la pantalla y salir

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# profile_backup.sh # Script: profile_backup.sh
# Modified: 2024/12/09 10:27:00 # Description: Script para hacer copia de seguridad del perfil del desarrollador
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>] # Created: 2024/12/09 10:27:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,37 +21,48 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
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
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test #baselib_test
# LOAD CONSOLE BASH LIBRARY # LOAD CONSOLE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/console.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
#consolelib_test #consolelib_test
# LOAD SQLITE3 BASH LIBRARY # LOAD SQLITE3 BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/sqlite.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib
#sqlitelib_test #sqlitelib_test
# LOAD DEVELOPERS BASH LIBRARY # LOAD DEVELOPERS BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/developers.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib
#gpglib_test #gpglib_test
# Load head messages # Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "head"
# Load gpg messages # Load gpg messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers" load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers"
########### MAIN PROGRAM ########### ########### MAIN PROGRAM ###########

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# profile_restore.sh # Script: profile_restore.sh
# Modified: 2024/12/15 14:27:00 # Description: para restaurar copia de seguridad del perfil del desarrollador
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>] # Created: 2024/12/15 14:27:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,36 +21,48 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
VERSION=0.98.0 BIN_LIBS="lib"
BIN_MESG="msg"
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
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test #baselib_test
# LOAD CONSOLE BASH LIBRARY # LOAD CONSOLE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/console.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
#consolelib_test #consolelib_test
# LOAD SQLITE3 BASH LIBRARY # LOAD SQLITE3 BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/sqlite.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib
#sqlitelib_test #sqlitelib_test
# LOAD DEVELOPERS BASH LIBRARY # LOAD DEVELOPERS BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/developers.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib
#gpglib_test #gpglib_test
# Load head messages # Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "head"
# Load developers messages # Load gpg messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers" load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers"
# Function to display help message # Function to display help message
function help() { function help() {

View file

@ -2,7 +2,10 @@
# #
# Script: project_new.sh # Script: project_new.sh
# Description: Crea una carpeta de proyecto con la estructura requerida # Description: Crea una carpeta de proyecto con la estructura requerida
# Modified: 2025-03-12 20:26:07 # Created: 2025-03-12 20:26:07
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>] # Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # Este programa es software libre: usted puede redistribuirlo y/o modificarlo
@ -18,17 +21,36 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
# Directorios base # Configuración inicial
# Usar DEVELOPER_DIR de base.lib
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BASE_DIR="$(dirname "$SCRIPT_DIR")" BIN_BASE="bin"
CONFIG_DIR="$SCRIPT_DIR/config" BIN_LIBS="lib"
LIB_DIR="$SCRIPT_DIR/lib" BIN_MESG="msg"
MSG_DIR="$SCRIPT_DIR/msg" BIN_CFGS="config"
# Cargar libraries # Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
source "$LIB_DIR/base.lib" if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
source "$LIB_DIR/console.lib" DEVSPATH=$(cat "$SCRIPT_DIR/$BIN_CFGS/devspath.dat")
source "$MSG_DIR/head.es" else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
CONFIG_DIR=$BIN_HOME/$BIN_CFGS
BASE_DIR=$BIN_HOME
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
title="${head_000} ${head_002}"
# Variables globales # Variables globales
title="${head_000} ${head_002}" title="${head_000} ${head_002}"
@ -102,7 +124,7 @@ function get_projects_folder() {
if [ -f "$CONFIG_DIR/projects.dat" ]; then if [ -f "$CONFIG_DIR/projects.dat" ]; then
PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat") PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat")
else else
PROJECTS_DIR_NAME="proyectos" PROJECTS_DIR_NAME="projects"
echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat" echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat"
fi fi
@ -151,7 +173,8 @@ function request_project_name() {
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
request_project_name request_project_name
else else
echo "${proj_007}" dialog_error_box "$head_error" "${proj_007}"
clear
exit 1 exit 1
fi fi
fi fi
@ -860,6 +883,10 @@ function main() {
# Crear estructura del proyecto # Crear estructura del proyecto
create_project_structure create_project_structure
# Limpiar Consola
clear
} }
# Ejecutar función principal # Ejecutar función principal

370
bin/qr_secret.sh Executable file
View file

@ -0,0 +1,370 @@
#!/bin/bash
#
# Script: qr_secret.sh
# Description: Extrae una contraseña secreta de una imagen QR y la guarda encriptada con SOPS
# Created: 2025/03/19 11:57:08
# Modified: 2025/03/15 19:30:00
# [Author] Cortana Rosero One <cortana@rosero.one>
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
#
# Derechos de Autor (C) [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)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
# Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
# Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
# Variables globales
title="${head_000} ${head_002}"
# Script: qr_secret.sh
# Description: Extrae una contraseña secreta de una imagen QR y la guarda encriptada con SOPS
# Created: 2025/03/19 11:57:08
# Modified: 2025/03/15 19:30:00
# [Author] Cortana Rosero One <cortana@rosero.one>
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
#
# Derechos de Autor (C) [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)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
# Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
# Variables globales
title="${head_000} ${head_002}"
# Script: qr_secret.sh
# Description: Extrae una contraseña secreta de una imagen QR y la guarda encriptada con SOPS
# Created: 2025/03/19 11:57:08
# Modified: 2025/03/15 19:30:00
# [Author] Cortana Rosero One <cortana@rosero.one>
# [Generated] Created by Claude Code (claude-3-7-sonnet-20250219)
#
# Derechos de Autor (C) [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)"
# Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "developers"
# Variables globales
title="${head_000} ${head_002}"
apps_title="${qrmsg_000}"
# Verificar dependencias
check_dependencies() {
# Verificar si zbar está instalado
if ! command -v zbarimg &> /dev/null; then
dialog_error_box "${head_error}" "${qrmsg_014}. ${cvmsg_014}"
clear
exit 1
fi
# Verificar si sops está instalado
if ! command -v sops &> /dev/null; then
dialog_error_box "${head_error}" "${cvmsg_013}. ${cvmsg_014}"
clear
exit 1
fi
}
# Validar formato del nombre
validate_name() {
local name="$1"
# Verificar si el nombre está vacío
if [ -z "$name" ]; then
return 1
fi
# Verificar si el nombre contiene espacios
if [[ "$name" =~ [[:space:]] ]]; then
return 2
fi
# Verificar si el nombre contiene caracteres no permitidos
if ! [[ "$name" =~ ^[a-zA-Z0-9._-]+$ ]]; then
return 3
fi
return 0
}
# Solicitar nombre del archivo
get_output_name() {
local name=""
local valid=false
while [ "$valid" != "true" ]; do
# Solicitar nombre
dialog_input_box "${qrmsg_001}" "${qrmsg_002}" ""
if [ $codex -ne 0 ]; then
# Usuario canceló
return 1
fi
name="$value"
# Validar nombre
validate_name "$name"
local validation_result=$?
case $validation_result in
0)
valid="true"
;;
1)
dialog_error_box "${qrmsg_012}" "${qrmsg_004}"
;;
2)
dialog_error_box "${qrmsg_012}" "${qrmsg_005}"
;;
3)
dialog_error_box "${qrmsg_012}" "${qrmsg_006}"
;;
esac
done
echo "$name"
return 0
}
# Extraer secreto de imagen QR
extract_secret() {
local qr_file="$1"
# Usar zbarimg para extraer el texto del QR
local secret=$(zbarimg --quiet --raw "$qr_file")
local result=$?
if [ $result -ne 0 ] || [ -z "$secret" ]; then
return 1
fi
# Si el secreto comienza con "otpauth://", extraer solo el secreto
if [[ "$secret" == otpauth://* ]]; then
# Extraer el valor después de "secret="
secret=$(echo "$secret" | grep -oP 'secret=\K[A-Z0-9]+')
# Si no se pudo extraer el secreto, mostrar error
if [ -z "$secret" ]; then
return 2
fi
fi
echo "$(echo "$secret" | base64)"
return 0
}
# Guardar secreto encriptado con SOPS
save_encrypted_secret() {
local name="$1"
local secret="$2"
local output_file="${DEVELOPER_DIR}/${name}.totp.yaml"
# Crear archivo YAML temporal con el secreto
local temp_file=$(mktemp)
echo "secret: $secret" > "$temp_file"
# Encriptar el archivo con SOPS
sops --encrypt "$temp_file" > "$output_file"
local result=$?
# Eliminar archivo temporal
rm -f "$temp_file"
# Establecer permisos adecuados
if [ $result -eq 0 ]; then
chmod 600 "$output_file"
return 0
else
return 1
fi
}
# Función principal
main() {
# Verificar si dialog está instalado
if ! command -v dialog &> /dev/null; then
# Sin dialog, tenemos que usar echo
echo "Error: ${qrmsg_013}. ${cvmsg_014}"
exit 1
fi
# Verificar dependencias
check_dependencies
# Seleccionar archivo QR
# Usar dialog_input_filepath de console.lib para seleccionar un archivo
local home_dir="$HOME/*.jpg"
dialog_input_filepath "$home_dir" "${qrmsg_003}"
if [ $? -ne 0 ]; then
clear
dialog_error_box "${head_info}" "${qrmsg_010}"
exit 0
fi
# Verificar el resultado
if [ "$valid_file" == "1" ]; then
qr_file="$result"
return 0
else
# Usuario canceló o no seleccionó un archivo válido
return 1
fi
# Extraer secreto de la imagen QR
local secret=$(extract_secret "$qr_file")
local extract_status=$?
# Solicitar nombre del archivo
local output_name=$(get_output_name)
if [ $? -ne 0 ]; then
clear
dialog_error_box "${head_info}" "${qrmsg_010}"
exit 0
fi
if [ $extract_status -ne 0 ]; then
dialog_error_box "${qrmsg_012}" "${qrmsg_007}"
clear
exit 1
fi
# Guardar secreto encriptado
save_encrypted_secret "$output_name" "$secret"
if [ $? -eq 0 ]; then
dialog_error_box "${qrmsg_011}" "${qrmsg_008} ${DEVELOPER_DIR}/${output_name}.totp.yaml"
else
dialog_error_box "${qrmsg_012}" "${qrmsg_009}"
clear
exit 1
fi
clear
}
# Ejecutar función principal
main

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# update.sh # Script: update.sh
# Modified: 2024/12/01 15:27:00 # Description: Script para update.sh
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>] # Created: 2025/03/15 18:25:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,16 +21,25 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
# CHECK SHELL LANGUAGE # Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
BIN_LANG=${LANG:0:2} if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# LOAD BASE BASH LIBRARY # LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test #baselib_test
load_bootstrap_msg() { load_bootstrap_msg() {
@ -59,7 +72,7 @@ else
fi fi
# Load bootstrap library for update functions # Load bootstrap library for update functions
source $BIN_HOME/$BIN_LIBS/bootstrap.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/bootstrap.lib
# Update sistema operativo y repositorios primero (no requiere privilegios de root) # Update sistema operativo y repositorios primero (no requiere privilegios de root)
echo -e "\n${head_info}: Actualizando repositorios locales primero..." echo -e "\n${head_info}: Actualizando repositorios locales primero..."
@ -182,5 +195,36 @@ else
echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero." echo -e "Para instalar estas dependencias, ejecute bin/bootstrap.sh primero."
fi fi
# Actualizar herramientas adicionales si están instaladas
update_additional_tools() {
local BIN_PATH=$1
local LIBRARY=$2
local MESSAGES=$3
local UPDATE_LANG=$4
# Cargar biblioteca bootstrap para acceder a las funciones de instalación
source "$BIN_PATH/$BIN_BASE/$LIBRARY/bootstrap.lib"
# Actualizar oathtool si está instalado
command_installed oathtool
if [ $? -eq 0 ]; then
echo -e "\n${head_info}: Actualizando oathtool..."
oathtool_install
echo -e "${head_info}: oathtool actualizado correctamente."
fi
# Actualizar zbar si está instalado
command_installed zbar-tools
if [ $? -eq 0 ]; then
echo -e "\n${head_info}: Actualizando zbar..."
zbar_install
echo -e "${head_info}: zbar actualizado correctamente."
fi
}
# Actualizar herramientas adicionales con sudo si están instaladas
echo -e "\n${head_info}: Verificando herramientas adicionales..."
sudo bash -c "$(declare -f command_installed; declare -f update_additional_tools); update_additional_tools $BIN_HOME/$BIN_BASE $BIN_LIBS $BIN_MESG $BIN_LANG"
echo -e "\n${head_info}: Proceso de actualización completado." echo -e "\n${head_info}: Proceso de actualización completado."

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# vpn_install.sh # Script: vpn_install.sh
# Modified: 2024/12/01 15:27:00 # Description: Script para vpn_install.sh
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>] # Created: 2024/12/01 15:27:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,18 +21,34 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_MESG=bin/msg
BIN_LIBS=bin/lib # Leer DEVSPATH desde el archivo de configuración o usar "devs" por defecto
VERSION=1.0.1 if [ -f "$SCRIPT_DIR/config/devspath.dat" ]; then
DEVSPATH=$(cat "$SCRIPT_DIR/config/devspath.dat")
else
DEVSPATH="devs"
fi
BIN_HOME="$HOME/$DEVSPATH"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # Importar bibliotecas necesarias
source $BIN_HOME/$BIN_LIBS/base.lib source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
#baselib_test
# Cargar mensajes en el idioma del sistema o español por defecto
load_messages "${BIN_HOME}/${BIN_BASE}" "${BIN_MESG}" "${BIN_LANG}" "head"
# Variables globales
title="${head_000} ${head_002}"
function load_bootstrap_msg() { function load_bootstrap_msg() {
@ -62,7 +82,7 @@ function install() {
local UPDATE=$5 local UPDATE=$5
# Load base bash library # Load base bash library
BIN_HOME=$BIN_PATH BIN_HOME=$BIN_PATH
source $BIN_PATH/$LIBRARY/base.lib source $BIN_PATH/$LIBRARY/base.lib
# Load bootstrap bash library # Load bootstrap bash library
@ -92,9 +112,6 @@ function install() {
esac esac
} }
# Load messages
load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG
# Check for arguments option # Check for arguments option
help=false help=false
version=false version=false
@ -131,7 +148,8 @@ if $version; then
fi fi
# Display Headers # Display Headers
display_devstools_header "- $title" display_devstools_header "PRITUNL VPN"
# Run install with sudo # Run install with sudo
sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG $update" BIN_USER=$(echo $BIN_HOME/$BIN_BASE)
sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_USER $BIN_LIBS $BIN_MESG $BIN_LANG $update"

View file

@ -1,8 +1,12 @@
#!/bin/bash #!/bin/bash
# #
# vpn_users.sh # Script: vpn_users.sh
# Modified: 2024/12/01 15:27:00 # Description: Script para vpn_users.sh
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)] # Created: 2024/12/01 15:27:00
# Modified: 2025/03/19 11:57:08
# [Author] Mauro Rosero P. <mauro@rosero.one>
#
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one>]
# #
# Este programa es software libre: usted puede redistribuirlo y/o modificarlo # 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 # bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,31 +21,42 @@
# Debería haber recibido una copia de la Licencia Pública Affero General # 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/>. # junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs # Configuración inicial
BIN_HOME=$HOME/$DEVSPATH # Usar DEVELOPER_DIR de base.lib
BIN_MESG=bin/msg SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_LIBS=bin/lib BIN_BASE="bin"
BIN_CFGS=bin/config BIN_LIBS="lib"
VERSION=1.0.1 BIN_MESG="msg"
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
BIN_HOME="$HOME/$DEVSPATH"
BIN_PATH=$BIN_HOME/$BIN_BASE
VERSION=$(cat "$BIN_HOME/$BIN_BASE/$BIN_CFGS/version")
# CHECK SHELL LANGUAGE # CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2} BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY # LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test #baselib_test
# LOAD CONSOLE BASH LIBRARY # LOAD CONSOLE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/console.lib source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
#consolelib_test #consolelib_test
# Load head messages # Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head" load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "head"
# Load head messages # Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "pritunl" load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "pritunl"
# Function to display help message # Function to display help message
function help() { function help() {
@ -61,7 +76,7 @@ function vpn_pritunl_users_form() {
declare -a ARRAY declare -a ARRAY
c_val[0]=013 c_val[0]=013
read_file_to_array "${BIN_HOME}/${BIN_CFGS}/pritunl-orgs.dat" read_file_to_array "${BIN_HOME}/${BIN_BASE}/${BIN_CFGS}/pritunl-orgs.dat"
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
ARRAY[0]="" ARRAY[0]=""
c_val[0]=0 c_val[0]=0
@ -104,10 +119,10 @@ function vpn_pritunl_users_form() {
display_devstools_header "${plmsg_000}" display_devstools_header "${plmsg_000}"
if [ "${action}" != "remove" ] if [ "${action}" != "remove" ]
then then
ansible-playbook -i ${BIN_HOME}/inventory/base.ini ${BIN_HOME}/bin/ansible/pritunl_users.yaml \ ansible-playbook -i ${BIN_HOME}/inventory/base.ini ${BIN_HOME}/${BIN_BASE}/${BIN_ANSIBLE}/pritunl_users.yaml \
-e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]} input_pritunl_email=${response[2]}" -e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]} input_pritunl_email=${response[2]}"
else else
ansible-playbook -i $BIN_HOME/inventory/base.ini ${BIN_HOME}/bin/ansible/pritunl_users.yaml \ ansible-playbook -i $BIN_HOME/inventory/base.ini ${BIN_HOME}/${BIN_BASE}/${BIN_ANSIBLE}/pritunl_users.yaml \
-e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]}" -e "input_pritunl_action=${action} input_pritunl_org=${response[0]} input_pritunl_user=${response[1]}"
fi fi
read -p "${head_pause}" read -p "${head_pause}"

21
sops/jarvis.sops.yaml Normal file
View file

@ -0,0 +1,21 @@
{
"data": "ENC[AES256_GCM,data:0QDmEqXpOKs0v1ga5BGLKBMUfG3oonXdwJywtiZEuDzOflSFO9wteezYIz2na85Zlli5I+pYUpt96lg43ZqZ9ZiyCrpfrfuDqcVscVSr9iWc+rMAYjLVBUZI5+gH1PsUZFlG5o+ioKl+tYunFU9hKx7FbHRFIe1AGbweoDxy6mMjqwxHwdopoHoV+8zoSqK5XFo=,iv:HdXQhmFARl9mlAIxfHFjrKT6+wG0SZQ0yvVH9W9yruw=,tag:5wAk2e5wXi5ckDA25tK5kA==,type:str]",
"sops": {
"kms": null,
"gcp_kms": null,
"azure_kv": null,
"hc_vault": null,
"age": null,
"lastmodified": "2025-03-19T19:20:07Z",
"mac": "ENC[AES256_GCM,data:OdAbCBM749u+2jNyWCeqWEZjQhZPBbrFX5D+D00oFCMHdU1SFPE4+7+bcGdjS2sdzgU5VQJhj72RRK0RYToRBQDoW17lmXHhvShrXAfHmtCr27ikjDTRnecBFgGOrzk3LkADtNj33w0U7OeQjC5BzLBXlIJzRCjoAFigXIbvrUA=,iv:8mFrzFyUTx43Pk8ntw7MGc3y2MDgGLBz2lNQQe1J4IA=,tag:dmwrgkBntqtG9z0aNjnCOg==,type:str]",
"pgp": [
{
"created_at": "2025-03-19T19:20:07Z",
"enc": "-----BEGIN PGP MESSAGE-----\n\nhQIMAx5Q8cfEImn/ARAAwYo+n42glMyddN5Ci5aKAp6Eg8rJKSQnzFKAT9CBHCeV\n8p9uymDsEq/BBaUDr3s7uFHHSwMgJLYUfAFcAXC7nFInxQ1t1miUr45njIaKMTuX\nnr72Y6U2xwYlY0vzYC4hmBiedJyRbBV8AIveZLZdhugGq6bsrdJOHjyC67JwwmKX\nZwgmLaCS6qDxoIKnyFIoPWVz4FZCE4y6A27fkXpSjU70/8yZC9ghMN1IXFNsJx6C\nrsyS0tyIwZcz5MSWcSNczgpzC9+UJFGAvZwR2geyUi0xrZpuXD2NAmU2nklG+YsN\ntbdJErFmWvZZBi6Si6AxHaHZLDgGsZq6DltBSjN/ySuNVeZ7M3opi28bHKFwYC2J\n9AAUhNzQIDBA4MQrPLy1u3C6PB6AS6aZ9jnVm3IeWyQUZ0Pk5Xysvp9Re230gMTy\nfR4rESQ0RohBMpMptlYEAZR/PebPSMnH5wikvb84FIROhhcEbn29lOw/ssEHdj7D\nO0VdqDLoW6znHCiuB5NfIxV4x98c5e2/c0KYiZQqRFmGuSndB17M5S8knD8VSJ83\nUIrQtH+Mjp1Yifx4AvPa2TQrmaQNH7dcjtkd5Tqun8NoBYUPv8jTH36ti+lyt2gZ\nSwegV+bTaeMZhvOsc1k2MAtchv8nKno8NQberUIytZteoWJWZs+iBd1/VFBpF4zS\nXgHeYOAtI0FjkX4kVrANwtFcFe7E7/6HgXeUNn2seuapqWp1/1TuVjzv+KM5R+3a\nAk4pwoi0wQnjj0Jk1qE7kDUrQGAxP/gb117ACEewOh1BogMZWvw0YW5xa53iPz4=\n=+/ik\n-----END PGP MESSAGE-----",
"fp": "ACB17A9DB7A680D0FED714E2A17ADF8EA1E9DB07"
}
],
"unencrypted_suffix": "_unencrypted",
"version": "3.9.2"
}
}