[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>
This commit is contained in:
Mauro Rosero P. 2025-03-19 20:24:42 -05:00
parent f6f2ebcaa0
commit f4568ef57d
Signed by: mrosero
GPG key ID: 83BD2A5F674B7E26
28 changed files with 774 additions and 1683 deletions

View file

@ -1,8 +1,12 @@
#!/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
# 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
# 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
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
# 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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
#baselib_test
# 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"
# Variables globales
title="${head_000} ${head_002}"
load_bootstrap_msg() {
@ -188,12 +209,3 @@ display_devstools_header "- $bomsg_000"
# Run install with sudo (sin parámetros específicos)
sudo bash -c "$(declare -f load_bootstrap_msg; declare -f install); install $BIN_HOME $BIN_LIBS $BIN_MESG $BIN_LANG"
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
#
# cortana_install.sh
# Modified: 2024/12/01 15:27:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
# Script: claude_install.sh
# Description: Script para instalar o desinstalar Anthropoc Claude Code con npm
# 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
# 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
# Uso:
# ./script.sh -> Instalación
# ./script.sh -u -> Desinstalación
# ./claude_install.sh -> Instalación
# ./claude_install -u -> Desinstalación
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
#baselib_test
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# 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}"
# Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then
echo "${npm_001}"
@ -50,10 +63,10 @@ fi
# Verificar que 'npm' esté instalado
if ! command -v npm &>/dev/null; then
dialog --backtitle "${title}" --title "${head_error}" --msgbox "${npm_022}" 7 50
exit 1
${BIN_HOME}/${BIN_BASE}/npm_install.sh
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() {
# First, save a list of your existing global packages for later migration
npm list -g --depth=0 > ~/npm-global-packages.txt
@ -95,7 +108,7 @@ pre_anthropic() {
# Función para instalar Anthropoc Claude Code
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
pre_anthropic
npm install -g @anthropic-ai/claude-code
@ -109,7 +122,7 @@ install_anthropic() {
# Función para desinstalar Anthropoc Claude Code
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
npm uninstall -g @anthropic-ai/claude-code
if [[ $? -eq 0 ]]; then
@ -127,6 +140,7 @@ if [[ "$1" == "-u" ]]; then
uninstall_anthropic
else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 1
fi
else
@ -135,7 +149,11 @@ else
install_anthropic
else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 1
fi
fi
# Limpiar consola
clear

View file

@ -1,20 +1,4 @@
#!/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
if [[ ":$PATH:" != *":$HOME/.npm-global/bin:"* ]]; then
# 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
alias cortana="claude"
fi
# 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
echo "Alias cortana activado en la sesión actual."

View file

@ -1,8 +1,10 @@
#!/bin/bash
#
# cortana_disable.sh
# Script: cortana_disable.sh
# Description: # Script para desactivar el alias 'cortana' para Claude Code
# Created: 2025/03/19 11:57:08
# 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
# 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
# Uso:
# ./cortana_disable.sh
# Nota: no usa console.lib, ni console.es
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# 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}"
# Verificar que 'dialog' esté instalado
@ -63,3 +77,6 @@ else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
exit 1
fi
# Limpiar consola
clear

View file

@ -1,8 +1,10 @@
#!/bin/bash
#
# cortana_enable.sh
# Script: cortana_enable.sh
# Description: # Script para activar el alias 'cortana' para Claude Code
# Created: 2025/03/19 11:57:08
# 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
# 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
# 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:
# ./cortana_enable.sh
# Nota: no usa console.lib, ni console.es
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# 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}"
# Verificar que 'dialog' esté instalado
if ! command -v dialog &>/dev/null; then
echo "${npm_001}"
clear
exit 1
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
else
dialog --backtitle "${title}" --title "${head_canceled}" --msgbox "${npm_008}" 6 40
clear
exit 1
fi
# Limpiar consola
clear

View file

@ -1,8 +1,12 @@
#!/bin/bash
#
# cortana_token.sh
# Modified: 2025-03-12 20:26:07
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
# Script: cortana_token.sh
# Description: Script para encriptar el 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
@ -17,23 +21,35 @@
# 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) 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
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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/$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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# 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() {
@ -149,6 +165,7 @@ main() {
dialog --backtitle "$title" --title "${npm_014}" --msgbox "${npm_058} ${HOME}/.cortana/cortana.sops.yaml" 7 70
else
dialog --backtitle "$title" --title "${head_error}" --msgbox "${npm_059}" 7 50
clear
exit 1
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,250 +0,0 @@
#!/bin/bash
#
# Script: cversadm_token.sh
# Description: Administrador de tokens para plataformas de control de versiones
# Modified: 2025/03/15
# [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@roser.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)"
# 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"
# 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
BIN_LANG=${LANG:0:2}
# 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="${cvmsg_000}"
# Función para verificar si SOPS está instalado
check_sops_installed() {
if ! command -v sops &> /dev/null; then
# Mostrar el error usando dialog con mensaje desde developers.es
dialog_error_box "${head_error}" "${cvmsg_013}. ${cvmsg_014}"
clear
exit 1
fi
}
# Función para asegurar que el directorio .developer existe
ensure_developers_dir() {
if [ ! -d "$DEVELOPER_DIR" ]; then
mkdir -p "$DEVELOPER_DIR"
chmod 700 "$DEVELOPER_DIR"
echo "${cvmsg_008} $DEVELOPER_DIR"
fi
}
# Función para seleccionar la plataforma de control de versiones usando menu_actions
select_platform() {
# Preparar opciones para menu_actions
local menu_options="1:${cvmsg_010}
2:${cvmsg_011}
3:${cvmsg_012}
"
# Usar menu_actions en lugar de dialog_input_menu
local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9)
# Verificar si hubo cancelación o error
if [ "$selection" = "${head_key_end}" ]; then
return 1
fi
# Interpretar la selección
case $selection in
1) echo "github" ;;
2) echo "gitlab" ;;
3) echo "forgejo" ;;
*) return 1 ;;
esac
return 0
}
# Función para solicitar y validar el token
request_token() {
local platform=$1
local platform_name=""
local token=""
case $platform in
"github") platform_name="${cvmsg_010}" ;;
"gitlab") platform_name="${cvmsg_011}" ;;
"forgejo") platform_name="${cvmsg_012}" ;;
esac
# Bucle para validación de token usando dialog directamente
while true; do
# Usar dialog directamente en lugar de dialog_input_pass
token=$(dialog --backtitle "$title" --stdout --title "${cvmsg_003}" \
--passwordbox "${cvmsg_004} $platform_name\n${cvmsg_005}" 8 60)
# Verificar si el usuario canceló
if [ $? -ne 0 ]; then
clear
return 1
fi
# Validar token
if [ -z "$token" ]; then
dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_015}" 7 60
continue
fi
# Verificar longitud (debería tener al menos 30 caracteres)
if [ ${#token} -lt 30 ]; then
dialog --backtitle "$title" --title "${head_error}" --msgbox "${cvmsg_016}" 7 60
continue
fi
# Verificar formato (debería contener caracteres alfanuméricos y algunos especiales)
if ! [[ "$token" =~ ^[A-Za-z0-9\#\-\_\.]+$ ]]; then
dialog --backtitle "$title" --title "${head_warning}" --msgbox "${cvmsg_017}" 7 60
fi
# Token válido
break
done
echo "$token"
return 0
}
# Función para guardar el token encriptado con SOPS
save_token() {
local platform=$1
local token=$2
local filename="${DEVELOPER_DIR}/${platform}.sops.yaml"
local token_file="/tmp/vcs_token_$$"
# Convertir token a base64 para mayor seguridad
local token_base64=$(echo -n "$token" | base64)
# Crear archivo temporal con el token en base64
echo "token: $token_base64" > "$token_file"
# Encriptar el archivo con SOPS
sops --encrypt "$token_file" > "$filename"
local result=$?
# Eliminar archivo temporal
rm -f "$token_file"
# Establecer permisos adecuados (solo lectura para el propietario)
if [ $result -eq 0 ]; then
chmod 600 "$filename"
fi
return $result
}
# Verificar si dialog está instalado
check_dialog_installed() {
if ! command -v dialog &> /dev/null; then
echo "${head_001}"
exit 1
fi
}
# Función principal
main() {
# Verificar requisitos
check_dialog_installed
check_sops_installed
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
platform=$(select_platform)
if [ $? -ne 0 ]; then
clear
exit 0
fi
# Solicitar token
token=$(request_token "$platform")
if [ $? -ne 0 ]; then
clear
exit 0
fi
# Guardar token
save_token "$platform" "$token"
if [ $? -eq 0 ]; then
local platform_name=""
case $platform in
"github") platform_name="${cvmsg_010}" ;;
"gitlab") platform_name="${cvmsg_011}" ;;
"forgejo") platform_name="${cvmsg_012}" ;;
esac
dialog_error_box "${cvmsg_009}" "${cvmsg_006} $platform_name"
else
local platform_name=""
case $platform in
"github") platform_name="${cvmsg_010}" ;;
"gitlab") platform_name="${cvmsg_011}" ;;
"forgejo") platform_name="${cvmsg_012}" ;;
esac
dialog_error_box "${head_error}" "${cvmsg_007} $platform_name"
fi
clear
}
# Ejecutar función principal
main

View file

@ -77,7 +77,7 @@ ensure_developers_dir() {
# Función para seleccionar la plataforma de control de versiones usando menu_actions
select_platform() {
# Preparar opciones para menu_actions
local menu_options="1:${cvmsg_010} 2:${cvmsg_011} 3:${cvmsg_012}"
local menu_options="1:${cvmsg_010}\n2:${cvmsg_011}\n3:${cvmsg_012}"
# Usar menu_actions en lugar de dialog_input_menu
local selection=$(menu_actions "${cvmsg_002}" "$menu_options" 9)
@ -192,16 +192,6 @@ main() {
check_sops_installed
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 usando funciones de console.lib
# Reemplazamos display_text_header por un diálogo de inicio
dialog_error_box "$title" "$apps_title - ${head_version} $VERSION"
# Seleccionar plataforma
platform=$(select_platform)
if [ $? -ne 0 ]; then

View file

@ -1,185 +0,0 @@
#!/bin/bash
#
# Script: fj_login.sh
# Description: Script para autenticación con Forgejo usando tokens encriptados
# Modified: 2025/03/15
# [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@roser.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"
# Variables globales
title="${head_000} ${head_002}"
# Función para verificar si berg está instalado
check_berg_installed() {
if ! command -v berg &> /dev/null; then
echo "Error: berg (Forgejo CLI) no está instalado. Por favor, ejecute bin/fjcli_install.sh primero."
exit 1
fi
}
# Función para verificar si SOPS está instalado
check_sops_installed() {
if ! command -v sops &> /dev/null; then
echo "Error: SOPS no está instalado. Por favor, ejecute bin/bootstrap.sh para instalar las herramientas necesarias."
exit 1
fi
}
# Función para extraer la URL base de Forgejo de la configuración de git
get_forgejo_url() {
# Intentar obtener URL desde la configuración global de git
local remote_url=$(git config --get remote.origin.url 2>/dev/null)
# Si no se encuentra en la configuración global, intentar buscar en el directorio actual
if [ -z "$remote_url" ] && [ -d ".git" ]; then
remote_url=$(git config --get remote.origin.url 2>/dev/null)
fi
# Si aún no tenemos URL, intentar buscar en algún repositorio de $HOME
if [ -z "$remote_url" ]; then
# Buscar repositorios en $HOME que podrían tener remotes de Forgejo
for repo_dir in $(find $HOME -name ".git" -type d -maxdepth 3 2>/dev/null); do
local repo_path=$(dirname "$repo_dir")
cd "$repo_path"
local url=$(git config --get remote.origin.url 2>/dev/null)
if [[ "$url" == *"forgejo"* ]] || [[ "$url" == *"codeberg"* ]] || [[ "$url" == *"gitt.rosero"* ]]; then
remote_url="$url"
break
fi
done
fi
# Si encontramos una URL, extraer el dominio base
if [ -n "$remote_url" ]; then
# Eliminar protocolo (http:// o https://)
local base_url=$(echo "$remote_url" | sed -E 's|^(https?://)?([^/]+).*|\2|')
# Si el formato es usuario@dominio, extraer solo el dominio
if [[ "$base_url" == *"@"* ]]; then
base_url=$(echo "$base_url" | cut -d '@' -f2)
fi
# Devolver solo el dominio sin protocolo
echo "$base_url"
else
# Si no se encontró ninguna URL, devolver una cadena vacía
echo ""
fi
}
# Estas funciones han sido eliminadas, ya no se crean ni eliminan alias
# Los usuarios pueden crear su propio alias manualmente si lo desean
# Función para iniciar sesión con token
login() {
# Verificar que el archivo de token encriptado existe
if [ ! -f "${DEVELOPER_DIR}/forgejo.sops.yaml" ]; then
echo "Error: No se encontró el archivo de token para Forgejo."
echo "Por favor, ejecute bin/cversadm_token.sh para configurar el token primero."
exit 1
fi
# Decodificar el token de base64
local token=$(sops -d ${DEVELOPER_DIR}/forgejo.sops.yaml | grep -oP '(?<=token: ).*' | base64 -d)
# Obtener la URL base de Forgejo
local forgejo_url=$(get_forgejo_url)
if [ -n "$forgejo_url" ]; then
echo "Usando servidor Forgejo: $forgejo_url"
export BERG_BASE_URL="$forgejo_url"
else
echo "ADVERTENCIA: No se pudo detectar automáticamente la URL de Forgejo."
echo "Si la autenticación falla, establezca manualmente BERG_BASE_URL."
fi
# Iniciar sesión con berg
echo "Iniciando sesión en Forgejo..."
berg auth login -t "$token"
local login_status=$?
if [ $login_status -eq 0 ]; then
echo "Sesión iniciada correctamente en Forgejo."
else
echo "Error al iniciar sesión en Forgejo. Por favor, verifique su token."
exit 1
fi
}
# Función para cerrar sesión
logout() {
# Obtener la URL base de Forgejo
local forgejo_url=$(get_forgejo_url)
if [ -n "$forgejo_url" ]; then
echo "Usando servidor Forgejo: $forgejo_url"
export BERG_BASE_URL="$forgejo_url"
fi
# Ya no se eliminan alias
echo "Cerrando sesión de Forgejo..."
if ! berg auth status &>/dev/null; then
echo "No hay sesión activa en Forgejo."
else
berg auth logout -s 2>/dev/null || true
echo "Sesión cerrada."
fi
}
# Función principal
main() {
# Verificar requisitos
check_berg_installed
check_sops_installed
# Verificar parámetros
if [ "$1" = "--logout" ]; then
logout
else
login
fi
}
# Ejecutar función principal con los parámetros recibidos
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

@ -71,6 +71,7 @@ check_root() {
exit $?
else
echo "${ghmsg_005}"
clear
exit 1
fi
fi
@ -111,6 +112,7 @@ install_gh_debian() {
echo "${ghmsg_008}"
else
echo "${ghmsg_009}"
clear
exit 1
fi
}
@ -128,6 +130,7 @@ install_gh_redhat() {
echo "${ghmsg_008}"
else
echo "${ghmsg_009}"
clear
exit 1
fi
}
@ -143,6 +146,7 @@ install_gh_arch() {
echo "${ghmsg_008}"
else
echo "${ghmsg_009}"
clear
exit 1
fi
}
@ -159,6 +163,7 @@ install_gh_suse() {
echo "${ghmsg_008}"
else
echo "${ghmsg_009}"
clear
exit 1
fi
}
@ -180,6 +185,7 @@ install_gh_macos() {
echo "${ghmsg_008}"
else
echo "${ghmsg_009}"
clear
exit 1
fi
}
@ -252,12 +258,10 @@ main() {
dialog_error_box "${head_error}" "${ghmsg_023}"
exit 1
fi
clear
}
# Ejecutar función principal
main "$@"
# Limpiar la pantalla al finalizar
clear
exit 0

View file

@ -1,212 +0,0 @@
#!/bin/bash
# ------------------------------------------------------------------
# [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)
#
# AGPL License
# Modified date: 14/03/2025
# ------------------------------------------------------------------
# Función para verificar si se está ejecutando como root
check_root() {
if [ "$(id -u)" -ne 0 ]; then
echo "Este script requiere privilegios de administrador."
echo "Intentando escalar privilegios..."
# Verificar si sudo está disponible
if command -v sudo &> /dev/null; then
echo "Usando sudo para escalar privilegios..."
sudo "$0" "$@"
exit $?
elif command -v doas &> /dev/null; then
echo "Usando doas para escalar privilegios..."
doas "$0" "$@"
exit $?
else
echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
exit 1
fi
fi
}
# Función para detectar la distribución
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
elif type lsb_release >/dev/null 2>&1; then
DISTRO=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
elif [ -f /etc/lsb-release ]; then
. /etc/lsb-release
DISTRO=$DISTRIB_ID
elif [ -f /etc/debian_version ]; then
DISTRO="debian"
else
DISTRO=$(uname -s)
fi
echo "Distribución detectada: $DISTRO"
}
# Función para instalar GitHub CLI en sistemas basados en Debian/Ubuntu
install_gh_debian() {
echo "Instalando GitHub CLI en sistema basado en Debian/Ubuntu..."
# Añadir repositorio de GitHub CLI
type -p curl >/dev/null || apt update && apt install curl -y
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \
&& chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& apt update \
&& apt install gh -y
if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente."
else
echo "ERROR: No se pudo instalar GitHub CLI."
exit 1
fi
}
# Función para instalar GitHub CLI en sistemas basados en Red Hat/Fedora
install_gh_redhat() {
echo "Instalando GitHub CLI en sistema basado en Red Hat/Fedora..."
# Añadir repositorio de GitHub CLI
dnf install -y dnf-plugins-core
dnf config-manager --add-repo https://cli.github.com/packages/rpm/gh-cli.repo
dnf install -y gh
if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente."
else
echo "ERROR: No se pudo instalar GitHub CLI."
exit 1
fi
}
# Función para instalar GitHub CLI en Arch Linux
install_gh_arch() {
echo "Instalando GitHub CLI en Arch Linux..."
# Instalar GitHub CLI desde los repositorios oficiales
pacman -Sy --noconfirm gh
if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente."
else
echo "ERROR: No se pudo instalar GitHub CLI."
exit 1
fi
}
# Función para instalar GitHub CLI en sistemas basados en SUSE
install_gh_suse() {
echo "Instalando GitHub CLI en sistema basado en SUSE..."
# Añadir repositorio de GitHub CLI
zypper addrepo --refresh https://cli.github.com/packages/rpm/gh-cli.repo
zypper install -y gh
if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente."
else
echo "ERROR: No se pudo instalar GitHub CLI."
exit 1
fi
}
# Función para instalar GitHub CLI en macOS
install_gh_macos() {
echo "Instalando GitHub CLI en macOS..."
# Verificar si Homebrew está instalado
if ! command -v brew &> /dev/null; then
echo "Homebrew no está instalado. Instalando Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
# Instalar GitHub CLI
brew install gh
if [ $? -eq 0 ]; then
echo "GitHub CLI instalado correctamente."
else
echo "ERROR: No se pudo instalar GitHub CLI."
exit 1
fi
}
# Función para verificar si gh está instalado
check_gh() {
if command -v gh &> /dev/null; then
echo "GitHub CLI ya está instalado."
echo "Versión actual:"
gh --version
read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL
if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then
echo "Operación cancelada."
exit 0
fi
fi
}
# Función principal
main() {
# Verificar si ya está instalado
check_gh
# Verificar privilegios de root (excepto en macOS)
if [ "$(uname -s)" != "Darwin" ]; then
check_root "$@"
fi
# Detectar la distribución
detect_distro
# Instalar según la distribución
case $DISTRO in
ubuntu|debian|linuxmint|pop|elementary)
install_gh_debian
;;
fedora|rhel|centos|rocky|almalinux)
install_gh_redhat
;;
arch|manjaro|endeavouros)
install_gh_arch
;;
opensuse*|suse|sles)
install_gh_suse
;;
darwin)
install_gh_macos
;;
*)
echo "Distribución no soportada: $DISTRO"
echo "Por favor, visite https://github.com/cli/cli#installation para instrucciones de instalación manual."
exit 1
;;
esac
# Verificar la instalación
if command -v gh &> /dev/null; then
echo "GitHub CLI instalado correctamente."
gh --version
# Sugerir autenticación
echo ""
echo "Para autenticarse con GitHub, ejecute:"
echo "gh auth login"
echo ""
echo "Para más información, visite: https://cli.github.com/manual/"
else
echo "ERROR: La instalación de GitHub CLI falló."
exit 1
fi
}
# Ejecutar función principal
main "$@"
exit 0

View file

@ -1,450 +0,0 @@
#!/bin/bash
# ------------------------------------------------------------------
# [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)
#
# AGPL License
# Modified date: 14/03/2025
# ------------------------------------------------------------------
# Función para verificar si se está ejecutando como root
check_root() {
if [ "$(id -u)" -ne 0 ]; then
echo "Este script requiere privilegios de administrador."
echo "Intentando escalar privilegios..."
# Verificar si sudo está disponible
if command -v sudo &> /dev/null; then
echo "Usando sudo para escalar privilegios..."
sudo "$0" "$@"
exit $?
elif command -v doas &> /dev/null; then
echo "Usando doas para escalar privilegios..."
doas "$0" "$@"
exit $?
else
echo "ERROR: No se encontró sudo ni doas. Por favor ejecute este script como root."
exit 1
fi
fi
}
# Función para detectar la distribución
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
elif type lsb_release >/dev/null 2>&1; then
DISTRO=$(lsb_release -si | tr '[:upper:]' '[:lower:]')
elif [ -f /etc/lsb-release ]; then
. /etc/lsb-release
DISTRO=$DISTRIB_ID
elif [ -f /etc/debian_version ]; then
DISTRO="debian"
else
DISTRO=$(uname -s)
fi
echo "Distribución detectada: $DISTRO"
}
# Función para instalar glab mediante Homebrew en macOS y Linux
install_glab_homebrew() {
echo "Instalando GitLab CLI mediante Homebrew..."
# Verificar si Homebrew está instalado
if ! command -v brew &> /dev/null; then
echo "Homebrew no está instalado. Instalando Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Verificar si la instalación fue exitosa
if ! command -v brew &> /dev/null; then
echo "ERROR: No se pudo instalar Homebrew."
return 1
fi
fi
# Instalar GitLab CLI
brew install gitlab-glab/tap/glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante Homebrew."
return 0
else
echo "ERROR: No se pudo instalar GitLab CLI mediante Homebrew."
return 1
fi
}
# Función para instalar glab en sistemas basados en Debian/Ubuntu
install_glab_debian() {
echo "Instalando GitLab CLI en sistema basado en Debian/Ubuntu..."
# Verificar si curl está instalado
if ! command -v curl &> /dev/null; then
apt update && apt install -y curl
fi
# Intentar primero usando los paquetes del sistema si están disponibles
if command -v apt &> /dev/null; then
echo "Verificando si glab está disponible en los repositorios..."
apt-cache search --names-only "^glab$" 2>/dev/null | grep -q "^glab"
if [ $? -eq 0 ]; then
echo "GitLab CLI encontrado en los repositorios. Instalando..."
apt update && apt install -y glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
return 0
fi
fi
fi
# Si no está en los repositorios, usar el script oficial
if command -v gpg &> /dev/null; then
echo "Agregando repositorio oficial de GitLab..."
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante script oficial."
return 0
fi
fi
# Si el método anterior falla, probar con Homebrew
echo "Intentando instalar mediante Homebrew..."
install_glab_homebrew
return $?
}
# Función para instalar glab en sistemas basados en Red Hat/Fedora
install_glab_redhat() {
echo "Instalando GitLab CLI en sistema basado en Red Hat/Fedora..."
# Verificar si dnf está instalado
if command -v dnf &> /dev/null; then
# Verificar si glab está disponible en los repositorios
echo "Verificando si glab está disponible en los repositorios..."
dnf list glab &>/dev/null
if [ $? -eq 0 ]; then
echo "GitLab CLI encontrado en los repositorios. Instalando..."
dnf install -y glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
return 0
fi
fi
# Si no está en los repositorios, usar el script oficial
if command -v gpg &> /dev/null; then
echo "Usando script oficial de instalación..."
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante script oficial."
return 0
fi
fi
# Si el método anterior falla, probar con snap
if command -v snap &> /dev/null; then
echo "Intentando instalar mediante snap..."
snap install glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante snap."
return 0
fi
fi
# Si dnf no está disponible, pero yum sí
elif command -v yum &> /dev/null; then
# Verificar si glab está disponible en los repositorios
echo "Verificando si glab está disponible en los repositorios..."
yum list glab &>/dev/null
if [ $? -eq 0 ]; then
echo "GitLab CLI encontrado en los repositorios. Instalando..."
yum install -y glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
return 0
fi
fi
fi
# Si los métodos anteriores fallan, probar con Homebrew
echo "Intentando instalar mediante Homebrew..."
install_glab_homebrew
return $?
}
# Función para instalar glab en Arch Linux
install_glab_arch() {
echo "Instalando GitLab CLI en Arch Linux..."
# Intentar primero usando el repositorio oficial
if command -v pacman &> /dev/null; then
# Verificar si glab está en los repositorios
if pacman -Ss glab | grep -q "^community/glab"; then
pacman -Sy --noconfirm glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde los repositorios oficiales."
return 0
fi
fi
# Si no está en los repositorios, intentar con yay (AUR)
if command -v yay &> /dev/null; then
yay -S --noconfirm glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente desde AUR."
return 0
fi
fi
fi
# Si los métodos anteriores fallan, probar con Homebrew
echo "Intentando instalar mediante Homebrew..."
install_glab_homebrew
return $?
}
# Función para instalar glab en sistemas basados en SUSE
install_glab_suse() {
echo "Instalando GitLab CLI en sistema basado en SUSE..."
# Intentar primero usando el script oficial
if command -v gpg &> /dev/null; then
echo "Usando script oficial de instalación..."
curl -s https://gitlab.com/gitlab-org/cli/-/raw/main/scripts/install.sh | bash
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante script oficial."
return 0
fi
fi
# Si el método anterior falla, probar con snap
if command -v snap &> /dev/null; then
echo "Intentando instalar mediante snap..."
snap install glab
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante snap."
return 0
fi
fi
# Si los métodos anteriores fallan, probar con Homebrew
echo "Intentando instalar mediante Homebrew..."
install_glab_homebrew
return $?
}
# Función para instalar directamente usando Go
install_glab_go() {
echo "Intentando instalar GitLab CLI mediante Go..."
# Verificar si Go está instalado
if ! command -v go &> /dev/null; then
echo "Go no está instalado. Se requiere Go para este método de instalación."
return 1
fi
# Instalar GitLab CLI mediante Go
go install gitlab.com/gitlab-org/cli/cmd/glab@main
if [ $? -eq 0 ]; then
echo "GitLab CLI instalado correctamente mediante Go."
echo "Asegúrese de que \$GOPATH/bin esté en su PATH."
echo "Por ejemplo, puede agregar lo siguiente a su ~/.bashrc o ~/.zshrc:"
echo "export PATH=\$PATH:\$HOME/go/bin"
return 0
else
echo "ERROR: No se pudo instalar GitLab CLI mediante Go."
return 1
fi
}
# Función para instalar usando método binario genérico
install_glab_binary() {
echo "Instalando GitLab CLI usando binarios precompilados..."
# Crear directorio temporal
TMP_DIR=$(mktemp -d)
cd "$TMP_DIR" || return 1
# Detectar arquitectura
ARCH=$(uname -m)
case "$ARCH" in
x86_64)
ARCH="amd64"
;;
aarch64|arm64)
ARCH="arm64"
;;
*)
echo "Arquitectura no soportada: $ARCH"
return 1
;;
esac
# Detectar sistema operativo
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
# Obtener la última versión
LATEST_VERSION=$(curl -s https://api.github.com/repos/profclems/glab/releases/latest | grep "tag_name" | cut -d'"' -f4)
if [ -z "$LATEST_VERSION" ]; then
LATEST_VERSION="v1.25.0" # Versión de respaldo si no se puede obtener la última
fi
# Construir URL de descarga
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"
# Descargar y extraer
curl -L "$DOWNLOAD_URL" -o glab.tar.gz
if [ $? -ne 0 ]; then
echo "ERROR: No se pudo descargar GitLab CLI."
cd - > /dev/null
rm -rf "$TMP_DIR"
return 1
fi
tar xzf glab.tar.gz
if [ $? -ne 0 ]; then
echo "ERROR: No se pudo extraer el archivo de GitLab CLI."
cd - > /dev/null
rm -rf "$TMP_DIR"
return 1
fi
# Instalar binario
mv bin/glab /usr/local/bin/glab
chmod +x /usr/local/bin/glab
# Limpiar
cd - > /dev/null
rm -rf "$TMP_DIR"
# Verificar instalación
if command -v glab &> /dev/null; then
echo "GitLab CLI instalado correctamente mediante binarios precompilados."
return 0
else
echo "ERROR: No se pudo instalar GitLab CLI mediante binarios precompilados."
return 1
fi
}
# Función para verificar si glab está instalado
check_glab() {
if command -v glab &> /dev/null; then
echo "GitLab CLI ya está instalado."
echo "Versión actual:"
glab --version
read -p "¿Desea reinstalar o actualizar? (s/n): " REINSTALL
if [[ ! "$REINSTALL" =~ ^[Ss]$ ]]; then
echo "Operación cancelada."
exit 0
fi
fi
}
# Función principal
main() {
# Verificar si ya está instalado
check_glab
# Verificar privilegios de root (excepto en macOS)
if [ "$(uname -s)" != "Darwin" ]; then
check_root "$@"
fi
# Detectar la distribución
detect_distro
# Intentar instalar según la distribución
install_success=false
case $DISTRO in
ubuntu|debian|linuxmint|pop|elementary|raspbian)
install_glab_debian
if [ $? -eq 0 ]; then
install_success=true
fi
;;
fedora|rhel|centos|rocky|almalinux)
install_glab_redhat
if [ $? -eq 0 ]; then
install_success=true
fi
;;
arch|manjaro|endeavouros)
install_glab_arch
if [ $? -eq 0 ]; then
install_success=true
fi
;;
opensuse*|suse|sles)
install_glab_suse
if [ $? -eq 0 ]; then
install_success=true
fi
;;
darwin)
install_glab_homebrew
if [ $? -eq 0 ]; then
install_success=true
fi
;;
*)
echo "Distribución no soportada directamente: $DISTRO"
echo "Intentando métodos alternativos..."
;;
esac
# Si no se pudo instalar con el método específico para la distribución, intentar métodos alternativos
if [ "$install_success" = false ]; then
echo "Intentando métodos alternativos de instalación..."
# Intentar instalar con Go
if command -v go &> /dev/null; then
install_glab_go
if [ $? -eq 0 ]; then
install_success=true
fi
fi
# Si aún no se ha instalado, probar con binarios precompilados
if [ "$install_success" = false ]; then
install_glab_binary
if [ $? -eq 0 ]; then
install_success=true
fi
fi
# Si todos los métodos fallan
if [ "$install_success" = false ]; then
echo "No se pudo instalar GitLab CLI con ninguno de los métodos disponibles."
echo "Por favor, visite https://gitlab.com/gitlab-org/cli para instrucciones de instalación manual."
exit 1
fi
fi
# Verificar la instalación
if command -v glab &> /dev/null; then
echo "GitLab CLI instalado correctamente."
glab --version
# Sugerir autenticación
echo ""
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
echo "ERROR: La instalación de GitLab CLI falló."
exit 1
fi
}
# Ejecutar función principal
main "$@"
exit 0

View file

@ -1,8 +1,12 @@
#!/bin/bash
#
# gpg_init.sh
# Modified: 2024/12/09 10:27:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
# Script: gpg_init.sh
# Description: Script de inicialización de estructura para firma GPG
# 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
# 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
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
# 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/$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}
@ -43,8 +60,6 @@ load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# Load gpg messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "gpg"
########### MAIN PROGRAM ###########
# Set program title

View file

@ -1,8 +1,12 @@
#!/bin/bash
#
# helix_install.sh
# Modified: 2025/03/11 15:00:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
# Script: helix_install.sh
# Description: Script para instalar Helix Editor
# 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
# bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -21,22 +25,32 @@
# Uso:
# ./helix_install.sh
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# Configuración inicial
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/$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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
source $BIN_HOME/$BIN_LIBS/console.lib
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/console.lib"
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# 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}"
apps_title="${hx_001}"
@ -221,6 +235,10 @@ install_helix_tarball() {
if [ "$EUID" -ne 0 ]; then
dialog_error_box "${head_superuser}" "${hx_011}"
dialog_input_pass "${npm_002}" "" ""
if [ $? -ne 0 ]; then
dialog_error_box "${head_error}" "${npm_003}"
finish
fi
SUDO_PASS="$value"
# Verificar que la contraseña funcione

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")"
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
DOCKER_LOCAL=dockerfile.local
@ -44,8 +44,6 @@ DOCKER_BUILD=build
DOCKER_FILE=Dockerfile
DOCKER_ENTRY=entrypoint.sh
VERSION="$(cat < ${BIN_HOME}/${BIN_CONF}/version)"
# Verificar si el script se está ejecutando como usuario root (superusuario)
function is_root() {
if [ "$(id -u)" -eq 0 ]; then

View file

@ -1,12 +1,12 @@
#!/bin/bash
# npm_install.sh
# Script interactivo para instalar Node.js y npm en múltiples sistemas operativos
# Soporta: Arch Linux, Debian/Ubuntu, Fedora, FreeBSD y macOS (Homebrew)
# Requiere: dialog
# Modified: 2025/03/09 10:27:00
# Creado por [Cortana Rosero One <cortana@rosero.one>]
# Generado con inteligencia artificial Claude Source
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
#
# Script: npm_install.sh
# Description: # Script interactivo para instalar Node.js y npm en múltiples sistemas operativos
# Created: 2025/03/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
# bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -21,22 +21,32 @@
# 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/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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/$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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
#baselib_test
# Importar bibliotecas necesarias
source "${BIN_HOME}/${BIN_BASE}/${BIN_LIBS}/base.lib"
# Load head messages
load_messages $BIN_HOME $BIN_MESG $BIN_LANG "head"
# 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}"
# Función para limpiar la pantalla y salir

View file

@ -1,8 +1,12 @@
#!/bin/bash
#
# profile_backup.sh
# Modified: 2024/12/09 10:27:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
# Script: profile_backup.sh
# Description: Script para hacer copia de seguridad del perfil del desarrollador
# 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
# 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
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
# 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/$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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test
# LOAD CONSOLE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/console.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
#consolelib_test
# LOAD SQLITE3 BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/sqlite.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib
#sqlitelib_test
# LOAD DEVELOPERS BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/developers.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib
#gpglib_test
# 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_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers"
load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers"
########### MAIN PROGRAM ###########

View file

@ -1,8 +1,12 @@
#!/bin/bash
#
# profile_restore.sh
# Modified: 2024/12/15 14:27:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
# Script: profile_restore.sh
# Description: para restaurar copia de seguridad del perfil del desarrollador
# 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
# 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
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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/$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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test
# LOAD CONSOLE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/console.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
#consolelib_test
# LOAD SQLITE3 BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/sqlite.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/sqlite.lib
#sqlitelib_test
# LOAD DEVELOPERS BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/developers.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/developers.lib
#gpglib_test
# 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_messages $BIN_HOME $BIN_MESG $BIN_LANG "developers"
# Load gpg messages
load_messages $BIN_HOME/$BIN_BASE $BIN_MESG $BIN_LANG "developers"
# Function to display help message
function help() {

View file

@ -2,7 +2,10 @@
#
# Script: project_new.sh
# 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>]
#
# 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
# 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)"
BASE_DIR="$(dirname "$SCRIPT_DIR")"
CONFIG_DIR="$SCRIPT_DIR/config"
LIB_DIR="$SCRIPT_DIR/lib"
MSG_DIR="$SCRIPT_DIR/msg"
BIN_BASE="bin"
BIN_LIBS="lib"
BIN_MESG="msg"
BIN_CFGS="config"
# Cargar libraries
source "$LIB_DIR/base.lib"
source "$LIB_DIR/console.lib"
source "$MSG_DIR/head.es"
# 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")
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
title="${head_000} ${head_002}"
@ -102,7 +124,7 @@ function get_projects_folder() {
if [ -f "$CONFIG_DIR/projects.dat" ]; then
PROJECTS_DIR_NAME=$(head -n 1 "$CONFIG_DIR/projects.dat")
else
PROJECTS_DIR_NAME="proyectos"
PROJECTS_DIR_NAME="projects"
echo "$PROJECTS_DIR_NAME" > "$CONFIG_DIR/projects.dat"
fi
@ -151,7 +173,8 @@ function request_project_name() {
if [ $? -eq 0 ]; then
request_project_name
else
echo "${proj_007}"
dialog_error_box "$head_error" "${proj_007}"
clear
exit 1
fi
fi
@ -860,6 +883,10 @@ function main() {
# Crear estructura del proyecto
create_project_structure
# Limpiar Consola
clear
}
# Ejecutar función principal

View file

@ -2,11 +2,129 @@
#
# 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@roser.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/>.
# 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

View file

@ -1,265 +0,0 @@
#!/bin/bash
#
# Script: standardize_scripts.sh
# Description: Estandariza los encabezados y estructura de los scripts Bash
# Created: $(date +"%Y/%m/%d %H:%M:%S")
# Modified: $(date +"%Y/%m/%d %H:%M:%S")
# [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"
BIN_CFGS="config"
# 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} - ${head_002}"
apps_title="${head_000} - ${projmsg_007}"
HEADER_TEMPLATE="${BIN_HOME}/${BIN_BASE}/${BIN_CFGS}/bash.head"
VARIABLES_TEMPLATE="${BIN_HOME}/${BIN_BASE}/${BIN_CFGS}/bash.variables"
DEFAULT_AUTHOR="Mauro Rosero P. <mauro@rosero.one>"
CORTANA_AUTHOR="Cortana Rosero One <cortana@rosero.one>"
CORTANA_GENERATED="Created by Claude Code (claude-3-7-sonnet-20250219)"
TODAY=$(date +"%Y/%m/%d %H:%M:%S")
# Función para extraer información del script existente
extract_script_info() {
local script_path="$1"
local script_name=$(basename "$script_path")
local description=""
local created_date=""
local modified_date="$TODAY"
local author="$DEFAULT_AUTHOR"
local generated_by=""
# Extraer descripción si existe
description=$(grep -A 5 "Description:" "$script_path" | grep "Description:" | sed 's/.*Description: \(.*\)/\1/' | head -1)
if [ -z "$description" ]; then
# Intentar extraer del comentario antes de la primera función o variable
description=$(sed -n '/#.*[Ss]cript/p' "$script_path" | head -1 | sed 's/#.*[Ss]cript[^:]*: \(.*\)/\1/')
if [ -z "$description" ]; then
description="Script para $script_name"
fi
fi
# Extraer fecha de creación si existe
created_date=$(grep -A 10 "Created:" "$script_path" | grep "Created:" | sed 's/.*Created: \(.*\)/\1/' | head -1)
if [ -z "$created_date" ]; then
created_date="$TODAY"
fi
# Extraer fecha de modificación si existe
mod_date=$(grep -A 10 "Modified:" "$script_path" | grep "Modified:" | sed 's/.*Modified: \(.*\)/\1/' | head -1)
if [ ! -z "$mod_date" ]; then
modified_date="$mod_date"
fi
# Extraer autor si existe
auth=$(grep -A 10 "\[Author\]" "$script_path" | grep "\[Author\]" | sed 's/.*\[Author\] \(.*\)/\1/' | head -1)
if [ ! -z "$auth" ]; then
author="$auth"
fi
# Extraer información de generación si existe
gen=$(grep -A 10 "\[Generated\]" "$script_path" | grep "\[Generated\]" | sed 's/.*\[Generated\] \(.*\)/\1/' | head -1)
if [ ! -z "$gen" ]; then
generated_by="$gen"
elif [[ "$author" == *"Cortana"* ]]; then
generated_by="$CORTANA_GENERATED"
fi
# Crear array con la información extraída
echo "$script_name|$description|$created_date|$modified_date|$author|$generated_by"
}
# Función para aplicar la plantilla a un script
apply_template() {
local script_path="$1"
local info="$2"
# Separar la información en variables
IFS='|' read -r script_name description created_date modified_date author generated_by <<< "$info"
# Crear encabezado temporal con la información extraída
local temp_header=$(mktemp)
cat "$HEADER_TEMPLATE" > "$temp_header"
# Reemplazar las variables en la plantilla
sed -i "s|\$SCRIPT_NAME|$script_name|g" "$temp_header"
sed -i "s|\$DESCRIPTION|$description|g" "$temp_header"
sed -i "s|\$CREATED_DATE|$created_date|g" "$temp_header"
sed -i "s|\$MODIFIED_DATE|$modified_date|g" "$temp_header"
sed -i "s|\$AUTHOR|$author|g" "$temp_header"
if [ ! -z "$generated_by" ]; then
sed -i "s|\$GENERATED_BY|$generated_by|g" "$temp_header"
else
# Si no hay información de generación, eliminar esa línea
sed -i '/\$GENERATED_BY/d' "$temp_header"
fi
# Extraer el cuerpo del script (todo excepto el encabezado)
local temp_body=$(mktemp)
# Encontrar línea después del encabezado (primera línea en blanco después de los comentarios iniciales)
local header_end=$(grep -n "^$" "$script_path" | head -1 | cut -d: -f1)
if [ -z "$header_end" ]; then
header_end=25 # Valor predeterminado si no se encuentra una línea en blanco
fi
# Extraer el cuerpo del script
tail -n +$header_end "$script_path" > "$temp_body"
# Crear el nuevo script combinando el encabezado y el cuerpo
cat "$temp_header" > "$script_path"
echo "" >> "$script_path" # Línea en blanco después del encabezado
cat "$temp_body" >> "$script_path"
# Limpiar archivos temporales
rm -f "$temp_header" "$temp_body"
echo "Estandarizado: $script_path"
}
# Función para estandarizar variables comunes en el script
standardize_variables() {
local script_path="$1"
# Buscar y reemplazar patrones comunes de variables
if grep -q "DEVSPATH=" "$script_path"; then
# Determinar dónde comienzan las variables
local var_line=$(grep -n "DEVSPATH=" "$script_path" | head -1 | cut -d: -f1)
local next_section=$(grep -n "^# " "$script_path" | awk -v start="$var_line" '$1 > start {print $1; exit}' | cut -d: -f1)
if [ -z "$next_section" ]; then
# Si no hay otra sección, buscar la primera función
next_section=$(grep -n "^[a-zA-Z_][a-zA-Z0-9_]*().*{" "$script_path" | head -1 | cut -d: -f1)
if [ -z "$next_section" ]; then
# Si no hay función, usar el final del archivo
next_section=$(wc -l "$script_path" | awk '{print $1}')
fi
fi
# Crear un archivo temporal con el contenido antes de las variables
local temp_before=$(mktemp)
head -n $((var_line - 1)) "$script_path" > "$temp_before"
# Crear un archivo temporal con el contenido después de las variables
local temp_after=$(mktemp)
tail -n +$next_section "$script_path" > "$temp_after"
# Crear el nuevo script
cat "$temp_before" > "$script_path"
cat "$VARIABLES_TEMPLATE" >> "$script_path"
echo "" >> "$script_path" # Añadir línea en blanco
cat "$temp_after" >> "$script_path"
# Limpiar archivos temporales
rm -f "$temp_before" "$temp_after"
fi
# Estandarizar la carga de bibliotecas
if ! grep -q "source .*base.lib" "$script_path"; then
echo -e "\n# Importar bibliotecas necesarias\nsource \"\${BIN_HOME}/\${BIN_BASE}/\${BIN_LIBS}/base.lib\"" >> "$script_path"
fi
# Estandarizar la carga de mensajes si aún no existe
if ! grep -q "load_messages" "$script_path"; then
echo -e "\n# Cargar mensajes en el idioma del sistema o español por defecto\nload_messages \"\${BIN_HOME}/\${BIN_BASE}\" \"\${BIN_MESG}\" \"\${BIN_LANG}\" \"head\"" >> "$script_path"
fi
# Estandarizar la definición del título si no existe
if ! grep -q "title=" "$script_path"; then
echo -e "\n# Variables globales\ntitle=\"\${head_000} \${head_002}\"" >> "$script_path"
fi
}
# Función principal
main() {
dialog_error_box "$title" "${head_info}: ${head_002} $BIN_HOME/$BIN_BASE"
# Verificar que existe la plantilla de encabezado
if [ ! -f "$HEADER_TEMPLATE" ]; then
dialog_error_box "$title" "${head_error}: ${head_nobuild} $HEADER_TEMPLATE"
exit 1
fi
# Verificar que existe la plantilla de variables
if [ ! -f "$VARIABLES_TEMPLATE" ]; then
dialog_error_box "$title" "${head_error}: ${head_nodockerfile} $VARIABLES_TEMPLATE"
exit 1
fi
# Contar scripts a procesar
local total_scripts=$(find "$BIN_HOME/$BIN_BASE" -name "*.sh" | wc -l)
local current=0
dialog_error_box "${head_info}" "${head_container} $total_scripts"
# Recorrer todos los scripts .sh en el directorio bin
for script in "$BIN_HOME/$BIN_BASE"/*.sh; do
current=$((current + 1))
# Saltar el script actual para evitar problemas
if [ "$(basename "$script")" == "$(basename "$0")" ]; then
echo "[$current/$total_scripts] ${head_exit}: $(basename "$script")"
continue
fi
echo "[$current/$total_scripts] ${head_info}: $(basename "$script")"
# Hacer una copia de seguridad del script
cp "$script" "${script}.bak"
# Extraer información del script
local script_info=$(extract_script_info "$script")
# Aplicar la plantilla de encabezado
apply_template "$script" "$script_info"
# Estandarizar variables y estructura común
standardize_variables "$script"
echo "${head_create}: $(basename "$script")"
done
dialog_error_box "${head_info}" "${head_builded} $current ${head_container}.\n\n${head_version}.bak"
}
# Ejecutar función principal
main

View file

@ -1,8 +1,12 @@
#!/bin/bash
#
# update.sh
# Modified: 2025/03/15 18:25:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@roser.one>]
# Script: update.sh
# Description: Script para update.sh
# 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
# 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
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
# Configuración inicial
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# CHECK SHELL LANGUAGE
BIN_LANG=${LANG:0:2}
# 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")
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test
load_bootstrap_msg() {
@ -59,7 +72,7 @@ else
fi
# 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)
echo -e "\n${head_info}: Actualizando repositorios locales primero..."
@ -190,7 +203,7 @@ update_additional_tools() {
local UPDATE_LANG=$4
# Cargar biblioteca bootstrap para acceder a las funciones de instalación
source "$BIN_PATH/$LIBRARY/bootstrap.lib"
source "$BIN_PATH/$BIN_BASE/$LIBRARY/bootstrap.lib"
# Actualizar oathtool si está instalado
command_installed oathtool
@ -211,7 +224,7 @@ update_additional_tools() {
# 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_LIBS $BIN_MESG $BIN_LANG"
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."

View file

@ -1,8 +1,12 @@
#!/bin/bash
#
# vpn_install.sh
# Modified: 2024/12/01 15:27:00
# Derechos de Autor (C) [2024] [Mauro Rosero P. <mauro@roser.one>]
# Script: vpn_install.sh
# Description: Script para vpn_install.sh
# 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
# bajo los términos de la Licencia Pública Affero General de GNU tal como
@ -17,19 +21,34 @@
# 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/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
#baselib_test
# 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"
# Variables globales
title="${head_000} ${head_002}"
function load_bootstrap_msg() {
@ -93,9 +112,6 @@ function install() {
esac
}
# Load messages
load_bootstrap_msg $BIN_HOME $BIN_MESG $BIN_LANG
# Check for arguments option
help=false
version=false
@ -132,7 +148,8 @@ if $version; then
fi
# Display Headers
display_devstools_header "- $title"
display_devstools_header "PRITUNL VPN"
# 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
#
# vpn_users.sh
# Modified: 2024/12/01 15:27:00
# Derechos de Autor (C) [2025] [Mauro Rosero P. <mauro@rosero.one> (mauro.rosero@gmail.com)]
# Script: vpn_users.sh
# Description: Script para vpn_users.sh
# 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
# 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
# junto con este programa. Si no la recibió, consulte <https://www.gnu.org/licenses/>.
DEVSPATH=devs
BIN_HOME=$HOME/$DEVSPATH
BIN_MESG=bin/msg
BIN_LIBS=bin/lib
BIN_CFGS=bin/config
VERSION=$(cat "$BIN_HOME/$BIN_CFGS/version")
# 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/$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
BIN_LANG=${LANG:0:2}
# LOAD BASE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/base.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/base.lib
#baselib_test
# LOAD CONSOLE BASH LIBRARY
source $BIN_HOME/$BIN_LIBS/console.lib
source $BIN_HOME/$BIN_BASE/$BIN_LIBS/console.lib
#consolelib_test
# 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_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 help() {
@ -61,7 +76,7 @@ function vpn_pritunl_users_form() {
declare -a ARRAY
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
ARRAY[0]=""
c_val[0]=0
@ -104,10 +119,10 @@ function vpn_pritunl_users_form() {
display_devstools_header "${plmsg_000}"
if [ "${action}" != "remove" ]
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]}"
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]}"
fi
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"
}
}