mirror of
https://github.com/marcogll/omarchy_setup.git
synced 2026-01-13 13:25:16 +00:00
feat: Enhance Omarchy setup script with retry logic and logging improvements
- Updated the installation menu to include DaVinci Resolve in the "Install All" option. - Added a new function `run_module_with_retry` to retry failed module executions. - Integrated retry logic into the installation process for background tasks. - Improved logging messages for better clarity during installation. - Created a dedicated logs directory to store installation logs and updated the log file path. - Added a .gitignore file to exclude the logs directory from version control.
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Ignorar el directorio de logs generado por el script
|
||||
logs/
|
||||
@@ -57,12 +57,14 @@ Selecciona las opciones que deseas instalar:
|
||||
6) 🖱️ Instalar Tema de Cursor (Bibata)
|
||||
7) 🎨 Gestionar Temas de Iconos (Papirus, Tela, etc.)
|
||||
8) 🎬 Instalar DaVinci Resolve (Intel Edition)
|
||||
A) ✅ Instalar Todo (opciones 1, 2, 3, 4, 5, 6)
|
||||
A) ✅ Instalar Todo (opciones 1, 2, 3, 4, 5, 6, 8)
|
||||
F) 💾 Formatear un Disco (FAT32, exFAT, NTFS, ext4)
|
||||
H) 🎨 Instalar Configuración de Hyprland
|
||||
0) 🚪 Salir
|
||||
```
|
||||
|
||||
> ℹ️ **Nota:** La opción `A) Instalar Todo` ejecuta los módulos 1, 2, 3, 4, 5, 6 y 8. Antes de usarla asegúrate de haber descargado manualmente el instalador de DaVinci Resolve (ZIP) en `~/Downloads/`.
|
||||
|
||||
## 📋 Módulos Disponibles
|
||||
|
||||
### 1. 📦 Aplicaciones (`apps.sh`)
|
||||
@@ -407,7 +409,7 @@ $HOME/
|
||||
│ ├── zsh-autosuggestions/
|
||||
│ └── zsh-syntax-highlighting/
|
||||
├── .poshthemes/ # Temas Oh My Posh
|
||||
│ └── catppuccin.omp.json # Tema Catppuccin Frappe
|
||||
│ └── catppuccin_frappe.omp.json # Tema Catppuccin Frappe
|
||||
├── .zsh_functions/ # Funciones personalizadas (directorio creado)
|
||||
├── Videos/YouTube/ # Descargas de yt-dlp
|
||||
│ ├── Music/ # Audios MP3
|
||||
@@ -526,7 +528,7 @@ which oh-my-posh
|
||||
oh-my-posh version
|
||||
|
||||
# Verificar que el tema existe
|
||||
ls ~/.poshthemes/catppuccin.omp.json
|
||||
ls ~/.poshthemes/catppuccin_frappe.omp.json
|
||||
|
||||
# Verificar que tienes una Nerd Font instalada
|
||||
# (El script NO instala fuentes automáticamente)
|
||||
|
||||
@@ -13,13 +13,13 @@ run_module_main() {
|
||||
log_step "Instalación de Configuración de Hyprland"
|
||||
|
||||
# --- 1. Copiar archivos de configuración ---
|
||||
# La configuración de Hyprland debe estar en una carpeta 'hypr' en la raíz del repo
|
||||
local source_dir="${SCRIPT_DIR}/../hypr"
|
||||
# La configuración de Hyprland debe estar en una carpeta 'hypr_config' en la raíz del repo
|
||||
local source_dir="${SCRIPT_DIR}/../hypr_config"
|
||||
local dest_dir="$HOME/.config/hypr"
|
||||
|
||||
if [[ ! -d "$source_dir" ]]; then
|
||||
log_error "No se encontró el directorio de configuración 'hypr' en la raíz del repositorio."
|
||||
log_info "Asegúrate de que la carpeta con tu configuración se llame 'hypr'."
|
||||
log_error "No se encontró el directorio de configuración 'hypr_config' en la raíz del repositorio."
|
||||
log_info "Asegúrate de que la carpeta con tu configuración se llame 'hypr_config'."
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@ install_zsh() {
|
||||
zoxide # Navegación inteligente
|
||||
fastfetch # Información del sistema
|
||||
yt-dlp # Descarga de videos/audio
|
||||
nerd-fonts # Paquete de fuentes con iconos
|
||||
unrar p7zip lsof # Dependencias para funciones en .zshrc
|
||||
)
|
||||
for pkg in "${pkgs[@]}"; do
|
||||
@@ -105,6 +104,7 @@ fi'
|
||||
log_info "2. Ve a la sección de Perfil -> Apariencia/Texto."
|
||||
log_info "3. Cambia la fuente a una 'Nerd Font' (ej: FiraCode Nerd Font, MesloLGS NF)."
|
||||
log_info "4. Cierra y vuelve a abrir la terminal para ver todos los cambios."
|
||||
log_warning "Recuerda instalar manualmente una Nerd Font; el script no instala fuentes."
|
||||
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,69 +0,0 @@
|
||||
[H[2J[3J[0;36m╔════════════════════════════════════════════════════════════╗[0m
|
||||
[0;36m║[0m [1m🌀 Omarchy Setup Script — Configuración Modular[0m [0;36m║[0m
|
||||
[0;36m╚════════════════════════════════════════════════════════════╝[0m
|
||||
|
||||
[1mSelecciona las opciones que deseas instalar:[0m
|
||||
|
||||
[0;32m1)[0m 📦 Instalar Aplicaciones (VS Code, VLC, drivers, etc.)
|
||||
[0;32m2)[0m 🐚 Configurar Zsh (shell, plugins, config)
|
||||
[0;32m3)[0m 🐳 Instalar Docker y Portainer
|
||||
[0;32m4)[0m 🌐 Instalar ZeroTier VPN
|
||||
[0;32m5)[0m 🖨️ Configurar Impresoras (CUPS)
|
||||
[0;32m6)[0m 🖱️ Instalar Tema de Cursor (Bibata)
|
||||
[0;32m7)[0m 🎨 Gestionar Temas de Iconos (Papirus, Tela, etc.)
|
||||
[0;32m8)[0m 🎬 Instalar DaVinci Resolve (Intel Edition)
|
||||
[0;32mF)[0m 💾 Formatear un Disco (FAT32, exFAT, NTFS, ext4)
|
||||
[0;32mH)[0m 🎨 Instalar Configuración de Hyprland
|
||||
[0;32mA)[0m ✅ Instalar Todo (opciones 1, 2, 3, 4, 5, 6)
|
||||
[0;32m0)[0m 🚪 Salir
|
||||
|
||||
[0;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m
|
||||
[1mSelecciona opción: [0m[0;36m⠋[0m Ejecutando: Configurar Zsh (shell, plugins, config)...
|
||||
[?25l
|
||||
[0;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m
|
||||
[0;36m[1m Configuración Completa de Zsh[0m
|
||||
[0;36m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m
|
||||
|
||||
[0;34m▶[0m [1mInstalando Zsh y herramientas esenciales...[0m
|
||||
[0;34m▶[0m [1mzsh ya está instalado.[0m
|
||||
[0;34m▶[0m [1mzsh-completions ya está instalado.[0m
|
||||
[0;34m▶[0m [1mzsh-syntax-highlighting ya está instalado.[0m
|
||||
[0;34m▶[0m [1mzsh-autosuggestions ya está instalado.[0m
|
||||
[0;34m▶[0m [1mInstalando oh-my-posh...[0m
|
||||
error: failed to init transaction (unable to lock database)
|
||||
error: could not lock database: File exists
|
||||
if you're sure a package manager is not already
|
||||
running, you can remove /var/lib/pacman/db.lck
|
||||
[1;33m⚠[0m [1;33mNo se pudo instalar oh-my-posh.[0m
|
||||
[0;34m▶[0m [1mzoxide ya está instalado.[0m
|
||||
[0;36m⠙[0m Ejecutando: Configurar Zsh (shell, plugins, config)...
|
||||
[0;34m▶[0m [1mfastfetch ya está instalado.[0m
|
||||
[0;34m▶[0m [1myt-dlp ya está instalado.[0m
|
||||
[0;34m▶[0m [1mInstalando nerd-fonts...[0m
|
||||
error: failed to init transaction (unable to lock database)
|
||||
error: could not lock database: File exists
|
||||
if you're sure a package manager is not already
|
||||
running, you can remove /var/lib/pacman/db.lck
|
||||
[1;33m⚠[0m [1;33mNo se pudo instalar nerd-fonts.[0m
|
||||
[0;34m▶[0m [1mInstalando unrar...[0m
|
||||
[0;36m⠹[0m Ejecutando: Configurar Zsh (shell, plugins, config)...
|
||||
error: failed to init transaction (unable to lock database)
|
||||
error: could not lock database: File exists
|
||||
if you're sure a package manager is not already
|
||||
running, you can remove /var/lib/pacman/db.lck
|
||||
[1;33m⚠[0m [1;33mNo se pudo instalar unrar.[0m
|
||||
[0;34m▶[0m [1mInstalando p7zip...[0m
|
||||
error: failed to init transaction (unable to lock database)
|
||||
error: could not lock database: File exists
|
||||
if you're sure a package manager is not already
|
||||
running, you can remove /var/lib/pacman/db.lck
|
||||
[1;33m⚠[0m [1;33mNo se pudo instalar p7zip.[0m
|
||||
[0;34m▶[0m [1mlsof ya está instalado.[0m
|
||||
[0;34m▶[0m [1mOh My Zsh ya está instalado.[0m
|
||||
[0;34m▶[0m [1mDescargando configuración .zshrc desde el repositorio...[0m
|
||||
[1;33m⚠[0m [1;33mSe encontró un archivo existente en '/home/marco/.zshrc'.[0m
|
||||
[0;34m▶[0m [1mCreando copia de seguridad en: /home/marco/.zshrc.bak_2025-11-15_12:14:32[0m
|
||||
[0;32m✓[0m [0;32mCopia de seguridad creada.[0m
|
||||
[0;36m⠸[0m Ejecutando: Configurar Zsh (shell, plugins, config)...
|
||||
[0;32m✓[0m [0;32mArchivo .zshrc actualizado.[0m
|
||||
[0;34m▶[0m [1mConfigurando tema de Oh My Posh (Catppuccin Frappe)...[0m
|
||||
@@ -115,7 +115,7 @@ show_menu() {
|
||||
echo -e " ${GREEN}${key})${NC} ${description}"
|
||||
done | sort -V
|
||||
|
||||
echo -e " ${GREEN}A)${NC} ✅ Instalar Todo (opciones 1, 2, 3, 4, 5, 6)"
|
||||
echo -e " ${GREEN}A)${NC} ✅ Instalar Todo (opciones 1, 2, 3, 4, 5, 6, 8)"
|
||||
echo -e " ${GREEN}0)${NC} 🚪 Salir"
|
||||
echo ""
|
||||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
@@ -154,6 +154,34 @@ run_module() {
|
||||
return $?
|
||||
}
|
||||
|
||||
# Función para ejecutar un módulo con lógica de reintento
|
||||
# Intenta ejecutar un módulo. Si falla, lo reintenta una vez más.
|
||||
# Devuelve 0 si tiene éxito en cualquier intento, 1 si falla en ambos.
|
||||
run_module_with_retry() {
|
||||
local choice=$1
|
||||
local max_intentos=2
|
||||
local intento_actual=1
|
||||
|
||||
while [ $intento_actual -le $max_intentos ]; do
|
||||
run_module "$choice"
|
||||
local estado_salida=$?
|
||||
|
||||
if [ $estado_salida -eq 0 ]; then
|
||||
return 0 # Éxito, salimos de la función
|
||||
fi
|
||||
|
||||
log_warning "El módulo falló en el intento $intento_actual (código: $estado_salida)."
|
||||
if [ $intento_actual -lt $max_intentos ]; then
|
||||
log_info "Reintentando en 3 segundos..."
|
||||
sleep 3
|
||||
fi
|
||||
((intento_actual++))
|
||||
done
|
||||
|
||||
log_error "El módulo falló después de $max_intentos intentos."
|
||||
return 1 # Falla definitiva
|
||||
}
|
||||
|
||||
# Función para instalar todo
|
||||
install_all() {
|
||||
log_step "Instalación Completa de Omarchy"
|
||||
@@ -170,13 +198,13 @@ install_all() {
|
||||
# Ejecutar con spinner para tareas de fondo (bg)
|
||||
if [[ "$type" == "bg" ]]; then
|
||||
start_spinner "Ejecutando: ${description#* }..."
|
||||
if run_module "${choice}"; then
|
||||
if run_module_with_retry "${choice}"; then
|
||||
stop_spinner 0 "Módulo '${description}' finalizado."
|
||||
else
|
||||
stop_spinner 1 "Error en el módulo '${description}'."
|
||||
failed+=("${module_file}")
|
||||
fi
|
||||
else # Ejecutar sin spinner para tareas interactivas (fg)
|
||||
else # Ejecutar sin spinner para tareas interactivas (fg) y sin reintento
|
||||
if ! run_module "${choice}"; then
|
||||
log_error "Error en el módulo '${description}'."
|
||||
failed+=("${module_file}")
|
||||
@@ -212,10 +240,11 @@ main() {
|
||||
fi
|
||||
|
||||
# Mantener sudo activo en background
|
||||
local parent_pid=$$
|
||||
(while true; do
|
||||
sudo -n true
|
||||
sleep 60
|
||||
kill -0 "$$" || exit
|
||||
kill -0 "$parent_pid" || exit
|
||||
done 2>/dev/null) &
|
||||
|
||||
# Bucle principal del menú
|
||||
@@ -245,10 +274,14 @@ main() {
|
||||
|
||||
if [[ "$type" == "bg" ]]; then
|
||||
spinner_msg="${description#* }..." # "Instalar Apps..."
|
||||
start_spinner "Ejecutando: ${spinner_msg}"
|
||||
run_module "$choice"
|
||||
stop_spinner $? "Módulo '${description}' finalizado."
|
||||
start_spinner "${spinner_msg}"
|
||||
if run_module_with_retry "$choice"; then
|
||||
stop_spinner 0 "Módulo '${description}' finalizado."
|
||||
else
|
||||
stop_spinner 1 "Error en el módulo '${description}'."
|
||||
fi
|
||||
else # 'fg'
|
||||
log_info "Ejecutando módulo interactivo: ${description}"
|
||||
run_module "$choice"
|
||||
fi
|
||||
|
||||
@@ -256,10 +289,9 @@ main() {
|
||||
read -p "Presiona Enter para continuar..."
|
||||
|
||||
elif [[ "$choice" == "A" ]]; then
|
||||
echo -ne "${BOLD}¿Instalar todas las opciones (1, 2, 3, 4, 5, 6)? [s/N]: ${NC} "
|
||||
log_warning "NOTA: La opción 'Instalar Todo' incluye DaVinci Resolve, que requiere"
|
||||
log_warning "que hayas descargado el archivo ZIP manualmente en tu carpeta ~/Downloads/."
|
||||
echo -ne "${BOLD}¿Confirmas que has hecho esto y deseas continuar? [s/N]: ${NC} "
|
||||
log_warning "La opción 'Instalar Todo' ejecutará los módulos: 1, 2, 3, 4, 5, 6 y 8."
|
||||
log_warning "DaVinci Resolve requiere que el ZIP de instalación esté en ~/Downloads/."
|
||||
echo -ne "${BOLD}¿Confirmas que deseas instalar todas las opciones ahora? [s/N]: ${NC}"
|
||||
read -r confirm
|
||||
if [[ "${confirm}" =~ ^[SsYy]$ ]]; then
|
||||
install_all
|
||||
@@ -281,8 +313,10 @@ main() {
|
||||
# Ejecutar función principal
|
||||
|
||||
# --- Redirección de logs ---
|
||||
# Crear el directorio de logs si no existe
|
||||
mkdir -p "${SCRIPT_DIR}/logs"
|
||||
# Crear un nombre de archivo de log con la fecha y hora
|
||||
LOG_FILE="${SCRIPT_DIR}/omarchy-setup-$(date +%F_%H-%M-%S).log"
|
||||
LOG_FILE="${SCRIPT_DIR}/logs/omarchy-setup-$(date +%F_%H-%M-%S).log"
|
||||
|
||||
# Ejecutar la función principal y redirigir toda la salida (stdout y stderr)
|
||||
# al archivo de log, mientras también se muestra en la terminal.
|
||||
|
||||
Reference in New Issue
Block a user