implementacion de script

This commit is contained in:
Marco Gallegos
2025-11-14 12:36:33 -06:00
parent 35606accff
commit 204852d5b4
4 changed files with 158 additions and 57 deletions

View File

@@ -32,8 +32,9 @@ omarchy_zsh_setup/
│ ├── docker.sh # Docker y Portainer │ ├── docker.sh # Docker y Portainer
│ ├── zerotier.sh # ZeroTier VPN │ ├── zerotier.sh # ZeroTier VPN
│ ├── printer.sh # Configuración de impresoras (CUPS) │ ├── printer.sh # Configuración de impresoras (CUPS)
│ ├── mouse_cursor.sh # Tema de cursor Bibata
│ ├── icon_manager.sh # Gestor de temas de iconos
│ ├── davinci-resolve.sh # DaVinci Resolve (Intel Edition) │ ├── davinci-resolve.sh # DaVinci Resolve (Intel Edition)
│ └── mouse_cursor.sh # Tema de cursor Bibata
└── Readme.md └── Readme.md
``` ```
@@ -63,18 +64,10 @@ Selecciona las opciones que deseas instalar:
## 📋 Módulos Disponibles ## 📋 Módulos Disponibles
### 1. 📦 Aplicaciones (`apps.sh`) ### 1. 📦 Aplicaciones (`apps.sh`)
- Herramientas base (git, curl, wget, etc.) - Editores como VS Code y Cursor (desde AUR)
- VS Code
- Cursor (desde AUR)
- VLC y plugins multimedia
- Herramientas de desarrollo
- Configuración de VLC como reproductor predeterminado
### 2. 🐚 Zsh (`zsh-config.sh`) ### 2. 🐚 Zsh (`zsh-config.sh`)
- Instalación de Zsh y plugins - Modifica `.bashrc` para lanzar Zsh automáticamente
- Descarga de configuración `.zshrc` desde GitHub
- Configuración como shell predeterminada
- Plugins: syntax-highlighting, autosuggestions
### 3. 🐳 Docker (`docker.sh`) ### 3. 🐳 Docker (`docker.sh`)
- Instalación de Docker y Docker Compose - Instalación de Docker y Docker Compose
@@ -90,13 +83,15 @@ Selecciona las opciones que deseas instalar:
### 5. 🖨️ Impresoras (`printer.sh`) ### 5. 🖨️ Impresoras (`printer.sh`)
- Instalación de CUPS - Instalación de CUPS
- Drivers comunes de impresora - Drivers comunes de impresora
- Configuración de servicios
- Interfaz web en http://localhost:631
### 6. 🎬 DaVinci Resolve (`davinci-resolve.sh`) ### 6. 🖱️ Tema de Cursor (`mouse_cursor.sh`)
- Instalación de DaVinci Resolve para Intel GPU - Instala el tema de cursor `Bibata-Modern-Ice`.
- Configuración de OpenCL - Configura el cursor para Hyprland y aplicaciones GTK.
- Requiere ZIP de instalación en `~/Downloads`
### 7. 🎨 Gestor de Iconos (`icon_manager.sh`)
- Menú interactivo para instalar y cambiar entre temas de iconos como Papirus, Tela y Candy.
### 8. 🎬 DaVinci Resolve (`davinci-resolve.sh`)
- Configuración de librerías y wrapper - Configuración de librerías y wrapper
## 🔧 Ejecutar Módulos Individualmente ## 🔧 Ejecutar Módulos Individualmente
@@ -160,12 +155,9 @@ cd omarchy_setup
- intel-compute-runtime (OpenCL para Intel) - intel-compute-runtime (OpenCL para Intel)
### 🐚 Zsh ### 🐚 Zsh
- Shell Zsh con plugins (syntax-highlighting, autosuggestions) - Modifica `.bashrc` para lanzar Zsh automáticamente
- Configuración personalizada desde GitHub
- Configuración como shell predeterminada
### 🐳 Docker ### 🐳 Docker
- Docker y Docker Compose
- Portainer (interfaz web de gestión) - Portainer (interfaz web de gestión)
- Usuario agregado al grupo docker - Usuario agregado al grupo docker
- Servicios habilitados y configurados - Servicios habilitados y configurados
@@ -662,9 +654,9 @@ X)
- Docker y Portainer (docker.sh) - Docker y Portainer (docker.sh)
- ZeroTier (zerotier.sh) - ZeroTier (zerotier.sh)
- Impresoras CUPS (printer.sh) - Impresoras CUPS (printer.sh)
- Tema de Cursor (mouse_cursor.sh)
- DaVinci Resolve (davinci-resolve.sh) - DaVinci Resolve (davinci-resolve.sh)
- 🔧 **Fácil de extender**: Agrega nuevos módulos fácilmente - Gestor de Iconos (icon_manager.sh)
- 🧹 **Limpieza**: Eliminado archivo duplicado davinci_resolve_intel.sh
### v2.8.1 (2025-11-02) ### v2.8.1 (2025-11-02)
- Versión unificada con estética Catppuccin - Versión unificada con estética Catppuccin
@@ -696,11 +688,7 @@ bash <(curl -fsSL https://raw.githubusercontent.com/marcogll/scripts_mg/main/oma
## 📝 Notas importantes ## 📝 Notas importantes
- **Módulos locales requeridos**: El script requiere que los módulos estén presentes localmente. Clona el repositorio completo. - **Shell por defecto**: El módulo de Zsh modifica `.bashrc` para que las terminales nuevas usen Zsh.
- **Permisos sudo**: El script requiere permisos de sudo para instalar paquetes y configurar servicios.
- **Reinicio recomendado**: Después de instalar servicios (Docker, ZeroTier, CUPS), se recomienda reiniciar o al menos cerrar sesión para aplicar cambios de grupos.
- **Shell por defecto**: El módulo de Zsh verificará y cambiará el shell predeterminado si es necesario.
- **DaVinci Resolve**: Requiere el ZIP de instalación en `~/Downloads` antes de ejecutar el módulo.
## 🚀 Próximos Pasos ## 🚀 Próximos Pasos

View File

@@ -6,6 +6,29 @@
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/common.sh" source "${SCRIPT_DIR}/common.sh"
# Función para mostrar una barra de progreso
# Uso: show_progress TOTAL_ITEMS CURRENT_ITEM "Mensaje"
show_progress() {
local total=$1
local current=$2
local msg=$3
local percent=$((current * 100 / total))
local completed_len=$((percent / 2))
local bar=""
for ((i=0; i<completed_len; i++)); do bar+="="; done
local empty_len=$((50 - completed_len))
for ((i=0; i<empty_len; i++)); do bar+=" "; done
# Asegurarse de que el cursor esté al principio de la línea y la limpie
echo -ne "\r\033[K"
# Imprimir la barra de progreso
echo -ne " ${GREEN}[${bar}]${NC} ${percent}% - ${msg} (${current}/${total})"
if [[ $current -eq $total ]]; then
echo "" # Nueva línea al final
fi
}
install_davinci_resolve() { install_davinci_resolve() {
log_step "Instalación de DaVinci Resolve (Intel Edition)" log_step "Instalación de DaVinci Resolve (Intel Edition)"
@@ -23,12 +46,13 @@ install_davinci_resolve() {
log_info "Usando ZIP: ${RESOLVE_ZIP}" log_info "Usando ZIP: ${RESOLVE_ZIP}"
start_spinner "Instalando dependencias básicas..."
# Instalación de paquetes básicos # Instalación de paquetes básicos
log_info "Instalando paquetes básicos..."
sudo pacman -S --needed --noconfirm \ sudo pacman -S --needed --noconfirm \
unzip patchelf libarchive xdg-user-dirs desktop-file-utils \ unzip patchelf libarchive xdg-user-dirs desktop-file-utils \
file gtk-update-icon-cache rsync clinfo qt5-base qt5-svg qt5-x11extras \ file gtk-update-icon-cache rsync clinfo qt5-base qt5-svg qt5-x11extras \
libpng libtiff libcurl || true libpng libtiff libcurl &> /dev/null
stop_spinner $? "Dependencias básicas instaladas."
# Configurar OpenCL / Intel GPU # Configurar OpenCL / Intel GPU
log_info "Configurando runtime OpenCL de Intel y drivers de video..." log_info "Configurando runtime OpenCL de Intel y drivers de video..."
@@ -39,15 +63,18 @@ install_davinci_resolve() {
sudo pacman -Rns --noconfirm nvidia nvidia-utils nvidia-settings opencl-nvidia || true sudo pacman -Rns --noconfirm nvidia nvidia-utils nvidia-settings opencl-nvidia || true
fi fi
start_spinner "Instalando headers del kernel (si es necesario)..."
# Instalar headers del kernel si son necesarios # Instalar headers del kernel si son necesarios
KVER="$(uname -r)" KVER="$(uname -r)"
if [[ ! -d "/usr/lib/modules/${KVER}/build" ]]; then if [[ ! -d "/usr/lib/modules/${KVER}/build" ]]; then
log_info "Instalando headers de kernel..." log_info "Instalando headers de kernel..."
sudo pacman -S --needed --noconfirm linux-headers linux-zen-headers || true sudo pacman -S --needed --noconfirm linux-headers linux-zen-headers &> /dev/null
fi fi
stop_spinner $? "Headers del kernel verificados."
# Instalar runtime OpenCL (compute runtime), desde AUR si es necesario # Instalar runtime OpenCL (compute runtime), desde AUR si es necesario
if ! pacman -Qi intel-compute-runtime &>/dev/null; then if ! pacman -Qi intel-compute-runtime &>/dev/null; then
start_spinner "Instalando intel-compute-runtime desde AUR..."
log_info "Instalando intel-compute-runtime (puede venir del AUR)..." log_info "Instalando intel-compute-runtime (puede venir del AUR)..."
AUR_HELPER=$(ensure_aur_helper) AUR_HELPER=$(ensure_aur_helper)
if [ "$AUR_HELPER" = "yay" ]; then if [ "$AUR_HELPER" = "yay" ]; then
@@ -67,10 +94,11 @@ install_davinci_resolve() {
return 1 return 1
fi fi
fi fi
stop_spinner $? "intel-compute-runtime instalado."
fi fi
start_spinner "Instalando paquetes de video y OpenCL..."
# Instalar otros paquetes Intel / VA-API / OpenCL # Instalar otros paquetes Intel / VA-API / OpenCL
log_info "Instalando paquetes Intel / VA-API / OpenCL..."
sudo pacman -S --needed --noconfirm \ sudo pacman -S --needed --noconfirm \
intel-media-driver \ intel-media-driver \
ocl-icd \ ocl-icd \
@@ -79,7 +107,8 @@ install_davinci_resolve() {
glu \ glu \
gtk2 \ gtk2 \
fuse2 \ fuse2 \
libva-utils libvdpau-va-gl || true libva-utils libvdpau-va-gl &> /dev/null
stop_spinner $? "Paquetes de video instalados."
# Asegurar el archivo ICD para OpenCL de Intel # Asegurar el archivo ICD para OpenCL de Intel
if [[ ! -f /etc/OpenCL/vendors/intel.icd ]]; then if [[ ! -f /etc/OpenCL/vendors/intel.icd ]]; then
@@ -104,8 +133,7 @@ install_davinci_resolve() {
log_info "Verificando soporte de decodificación VA-API para H264 / HEVC..." log_info "Verificando soporte de decodificación VA-API para H264 / HEVC..."
vainfo | grep -E "H264|HEVC" || true vainfo | grep -E "H264|HEVC" || true
# Extraer DaVinci Resolve start_spinner "Extrayendo DaVinci Resolve del ZIP (puede tardar)..."
log_info "Extrayendo DaVinci Resolve del ZIP..."
NEEDED_GB=10 NEEDED_GB=10
FREE_KB=$(df --output=avail -k "${ZIP_DIR}" | tail -n1) FREE_KB=$(df --output=avail -k "${ZIP_DIR}" | tail -n1)
FREE_GB=$((FREE_KB / 1024 / 1024)) FREE_GB=$((FREE_KB / 1024 / 1024))
@@ -116,7 +144,8 @@ install_davinci_resolve() {
WORKDIR="$(mktemp -d -p "${ZIP_DIR}" .resolve-extract-XXXXXXXX)" WORKDIR="$(mktemp -d -p "${ZIP_DIR}" .resolve-extract-XXXXXXXX)"
trap 'rm -rf "${WORKDIR}"' EXIT trap 'rm -rf "${WORKDIR}"' EXIT
unzip -q "${RESOLVE_ZIP}" -d "${WORKDIR}" unzip -q "${RESOLVE_ZIP}" -d "${WORKDIR}"
stop_spinner $? "ZIP extraído."
RUN_FILE="$(find "${WORKDIR}" -maxdepth 2 -type f -name 'DaVinci_Resolve_*_Linux.run' | head -n1 || true)" RUN_FILE="$(find "${WORKDIR}" -maxdepth 2 -type f -name 'DaVinci_Resolve_*_Linux.run' | head -n1 || true)"
if [[ -z "${RUN_FILE}" ]]; then if [[ -z "${RUN_FILE}" ]]; then
@@ -125,8 +154,10 @@ install_davinci_resolve() {
fi fi
chmod +x "${RUN_FILE}" chmod +x "${RUN_FILE}"
start_spinner "Extrayendo AppImage..."
EX_DIR="$(dirname "${RUN_FILE}")" EX_DIR="$(dirname "${RUN_FILE}")"
( cd "${EX_DIR}" && "./$(basename "${RUN_FILE}")" --appimage-extract >/dev/null ) ( cd "${EX_DIR}" && "./$(basename "${RUN_FILE}")" --appimage-extract >/dev/null )
stop_spinner $? "AppImage extraído."
APPDIR="${EX_DIR}/squashfs-root" APPDIR="${EX_DIR}/squashfs-root"
if [[ ! -d "${APPDIR}" ]]; then if [[ ! -d "${APPDIR}" ]]; then
@@ -149,8 +180,7 @@ install_davinci_resolve() {
ln -sf /usr/lib/libgmodule-2.0.so.0 libs/libgmodule-2.0.so.0 ln -sf /usr/lib/libgmodule-2.0.so.0 libs/libgmodule-2.0.so.0
popd >/dev/null popd >/dev/null
# Aplicar RPATH log_info "Aplicando RPATH con patchelf (esto puede tardar)..."
log_info "Aplicando RPATH con patchelf..."
RPATH_DIRS=( RPATH_DIRS=(
"libs" "libs"
"libs/plugins/sqldrivers" "libs/plugins/sqldrivers"
@@ -167,17 +197,27 @@ install_davinci_resolve() {
done done
RPATH_ABS+="\$ORIGIN" RPATH_ABS+="\$ORIGIN"
# Usar barra de progreso para patchelf
if command -v patchelf &>/dev/null; then if command -v patchelf &>/dev/null; then
find "${APPDIR}" -type f -exec bash -c ' local files_to_patch
file -b "$1" | grep -q ELF && sudo patchelf --set-rpath "'"${RPATH_ABS}"'" "$1" files_to_patch=$(find "${APPDIR}" -type f -exec file {} + | grep "ELF" | cut -d: -f1)
' _ {} \; || true local total_files=$(echo "$files_to_patch" | wc -l)
local current_file=0
echo "$files_to_patch" | while read -r file; do
current_file=$((current_file + 1))
show_progress "$total_files" "$current_file" "Aplicando RPATH..."
sudo patchelf --set-rpath "${RPATH_ABS}" "$file" &>/dev/null
done
log_success "RPATH aplicado a $total_files archivos."
fi fi
# Instalar en /opt/resolve start_spinner "Copiando archivos a /opt/resolve..."
log_info "Instalando DaVinci Resolve en /opt/resolve..."
sudo rm -rf /opt/resolve sudo rm -rf /opt/resolve
sudo mkdir -p /opt/resolve sudo mkdir -p /opt/resolve
sudo rsync -a --delete "${APPDIR}/" /opt/resolve/ sudo rsync -a --delete "${APPDIR}/" /opt/resolve/
stop_spinner $? "Archivos copiados a /opt/resolve."
sudo mkdir -p /opt/resolve/.license sudo mkdir -p /opt/resolve/.license
# Enlazar libcrypt legado si es necesario # Enlazar libcrypt legado si es necesario
@@ -230,4 +270,3 @@ EOF
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
install_davinci_resolve "$@" install_davinci_resolve "$@"
fi fi

View File

@@ -47,12 +47,14 @@ install_zsh() {
# Instalar Zsh y plugins # Instalar Zsh y plugins
log_info "Instalando Zsh y complementos..." log_info "Instalando Zsh y complementos..."
# El spinner se inicia desde el script principal, aquí solo ejecutamos el comando
sudo pacman -S --noconfirm --needed \ sudo pacman -S --noconfirm --needed \
zsh zsh-completions zsh-syntax-highlighting zsh-autosuggestions || { zsh zsh-completions zsh-syntax-highlighting zsh-autosuggestions || {
log_error "Error al instalar Zsh" log_error "Error al instalar Zsh"
return 1 return 1
} }
# No es necesario un spinner aquí, es muy rápido
# Descargar configuración personalizada # Descargar configuración personalizada
log_info "Descargando configuración de Zsh desde GitHub..." log_info "Descargando configuración de Zsh desde GitHub..."
if curl -fsSL "${REPO_BASE}/.zshrc" -o ~/.zshrc; then if curl -fsSL "${REPO_BASE}/.zshrc" -o ~/.zshrc; then

View File

@@ -3,7 +3,7 @@
# 🌀 Omarchy Setup Script — Configuración modular para Arch Linux # 🌀 Omarchy Setup Script — Configuración modular para Arch Linux
# =============================================================== # ===============================================================
set -uo pipefail set -u
# Directorio del script # Directorio del script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -31,6 +31,52 @@ source "${MODULES_DIR}/common.sh"
log_info "Verificando permisos de los módulos..." log_info "Verificando permisos de los módulos..."
chmod +x "${MODULES_DIR}"/*.sh 2>/dev/null || true chmod +x "${MODULES_DIR}"/*.sh 2>/dev/null || true
# --- Funciones de UI Mejorada (Spinner y Barra de Progreso) ---
SPINNER_PID=
# Inicia una animación de spinner en segundo plano
# Uso: start_spinner "Mensaje..."
start_spinner() {
(
local chars="⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
while :; do
for (( i=0; i<${#chars}; i++ )); do
echo -ne "${CYAN}${chars:$i:1}${NC} $1\r"
sleep 0.1
done
done
) &
SPINNER_PID=$!
# Ocultar cursor
tput civis
}
# Detiene el spinner y muestra un mensaje de finalización
# Uso: stop_spinner $? "Mensaje de éxito" "Mensaje de error"
stop_spinner() {
local exit_code=$1
local success_msg=$2
local error_msg=${3:-"Ocurrió un error"}
if [[ -n "$SPINNER_PID" ]] && kill -0 "$SPINNER_PID" 2>/dev/null; then
kill "$SPINNER_PID" &>/dev/null
wait "$SPINNER_PID" &>/dev/null
fi
# Limpiar la línea del spinner
echo -ne "\r\033[K"
if [[ $exit_code -eq 0 ]]; then
log_success "$success_msg"
else
log_error "$error_msg"
fi
# Restaurar cursor
tput cnorm
SPINNER_PID=
}
# Función para mostrar el menú # Función para mostrar el menú
show_menu() { show_menu() {
clear clear
@@ -40,15 +86,16 @@ show_menu() {
echo "" echo ""
echo -e "${BOLD}Selecciona las opciones que deseas instalar:${NC}" echo -e "${BOLD}Selecciona las opciones que deseas instalar:${NC}"
echo "" echo ""
echo -e " ${GREEN}1)${NC} 📦 Instalar Aplicaciones (VS Code, Cursor, VLC, herramientas)" echo -e " ${GREEN}1)${NC} 📦 Instalar Aplicaciones (VS Code, VLC, drivers, etc.)"
echo -e " ${GREEN}2)${NC} 🐚 Configurar Zsh (shell, plugins, configuración personalizada)" echo -e " ${GREEN}2)${NC} 🐚 Configurar Zsh (shell, plugins, config)"
echo -e " ${GREEN}3)${NC} 🐳 Instalar Docker y Portainer" echo -e " ${GREEN}3)${NC} 🐳 Instalar Docker y Portainer"
echo -e " ${GREEN}4)${NC} 🌐 Instalar ZeroTier" echo -e " ${GREEN}4)${NC} 🌐 Instalar ZeroTier"
echo -e " ${GREEN}5)${NC} 🖨️ Configurar Impresoras (CUPS)" echo -e " ${GREEN}5)${NC} 🖨️ Configurar Impresoras (CUPS)"
echo -e " ${GREEN}6)${NC} 🖱️ Instalar Tema de Cursor (Bibata)" echo -e " ${GREEN}6)${NC} 🖱️ Instalar Tema de Cursor (Bibata)"
echo -e " ${GREEN}7)${NC} 🎬 Instalar DaVinci Resolve (Intel Edition)" echo -e " ${GREEN}7)${NC} 🎨 Gestionar Temas de Iconos (Papirus, Tela, etc.)"
echo -e " ${GREEN}8)${NC} 🔄 Actualizar Sistema" echo -e " ${GREEN}8)${NC} 🎬 Instalar DaVinci Resolve (Intel Edition)"
echo -e " ${GREEN}9)${NC} 🧹 Limpiar Paquetes Huérfanos" echo -e " ${GREEN}9)${NC} 🔄 Actualizar Sistema"
echo -e " ${GREEN}C)${NC} 🧹 Limpiar Paquetes Huérfanos"
echo -e " ${GREEN}A)${NC} ✅ Instalar Todo (opciones 1-6)" echo -e " ${GREEN}A)${NC} ✅ Instalar Todo (opciones 1-6)"
echo -e " ${GREEN}0)${NC} 🚪 Salir" echo -e " ${GREEN}0)${NC} 🚪 Salir"
echo "" echo ""
@@ -94,6 +141,9 @@ run_module() {
"davinci-resolve") "davinci-resolve")
install_davinci_resolve install_davinci_resolve
;; ;;
"icon_manager")
bash "${module_file}"
;;
*) *)
log_error "Función no definida para el módulo ${module_name}" log_error "Función no definida para el módulo ${module_name}"
return 1 return 1
@@ -148,6 +198,10 @@ main() {
done 2>/dev/null) & done 2>/dev/null) &
# Bucle principal del menú # Bucle principal del menú
# Exportar funciones para que los submódulos las puedan usar
export -f start_spinner
export -f stop_spinner
while true; do while true; do
show_menu show_menu
read -r choice read -r choice
@@ -155,45 +209,59 @@ main() {
case "${choice}" in case "${choice}" in
1) 1)
start_spinner "Instalando aplicaciones..."
run_module "apps" run_module "apps"
stop_spinner $? "Módulo de aplicaciones finalizado."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
2) 2)
start_spinner "Configurando Zsh..."
run_module "zsh-config" run_module "zsh-config"
stop_spinner $? "Configuración de Zsh finalizada."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
3) 3)
start_spinner "Instalando Docker..."
run_module "docker" run_module "docker"
stop_spinner $? "Instalación de Docker finalizada."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
4) 4)
start_spinner "Instalando ZeroTier..."
run_module "zerotier" run_module "zerotier"
stop_spinner $? "Instalación de ZeroTier finalizada."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
5) 5)
start_spinner "Configurando impresoras..."
run_module "printer" run_module "printer"
stop_spinner $? "Configuración de impresoras finalizada."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
6) 6)
start_spinner "Instalando tema de cursor..."
run_module "mouse_cursor" run_module "mouse_cursor"
stop_spinner $? "Tema de cursor instalado."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
7) 7)
run_module "mouse_cursor" # Este módulo es interactivo, no usamos spinner aquí
run_module "icon_manager"
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
7) 8)
log_warning "DaVinci Resolve requiere el ZIP de instalación en ~/Downloads" log_warning "DaVinci Resolve requiere el ZIP de instalación en ~/Downloads/"
echo -ne "${BOLD}¿Continuar con la instalación? [s/N]: ${NC}" echo -ne "${BOLD}¿Continuar con la instalación? [s/N]: ${NC} "
read -r confirm read -r confirm
if [[ "${confirm}" =~ ^[SsYy]$ ]]; then if [[ "${confirm}" =~ ^[SsYy]$ ]]; then
# El spinner se maneja dentro del módulo de DaVinci
run_module "davinci-resolve" run_module "davinci-resolve"
else else
log_info "Instalación cancelada" log_info "Instalación cancelada"
@@ -201,18 +269,22 @@ main() {
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
8) 9)
start_spinner "Actualizando el sistema..."
update_system update_system
stop_spinner $? "Sistema actualizado."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
9) C)
start_spinner "Limpiando paquetes huérfanos..."
cleanup_orphans cleanup_orphans
stop_spinner $? "Limpieza finalizada."
echo "" echo ""
read -p "Presiona Enter para continuar..." read -p "Presiona Enter para continuar..."
;; ;;
A) A)
echo -ne "${BOLD}¿Instalar todas las opciones (1-5)? [s/N]: ${NC}" echo -ne "${BOLD}¿Instalar todas las opciones (1-6)? [s/N]: ${NC} "
read -r confirm read -r confirm
if [[ "${confirm}" =~ ^[Ss]$ ]]; then if [[ "${confirm}" =~ ^[Ss]$ ]]; then
install_all install_all