mirror of
https://github.com/marcogll/omarchy_setup.git
synced 2026-01-14 04:54:58 +00:00
ajustes de optimizacion
This commit is contained in:
225
omarchy-setup.sh
225
omarchy-setup.sh
@@ -77,6 +77,28 @@ stop_spinner() {
|
||||
SPINNER_PID=
|
||||
}
|
||||
|
||||
# --- Definición de Módulos ---
|
||||
# Clave: Opción del menú
|
||||
# Valor: "Nombre del Fichero;Función Principal;Descripción;Tipo (bg/fg)"
|
||||
# Tipo 'bg': Tareas de fondo, usan spinner.
|
||||
# Tipo 'fg': Tareas interactivas (foreground), no usan spinner.
|
||||
declare -A MODULES
|
||||
MODULES=(
|
||||
["1"]="apps;run_module_main;📦 Instalar Aplicaciones (VS Code, VLC, drivers, etc.);bg"
|
||||
["2"]="zsh-config;install_zsh;🐚 Configurar Zsh (shell, plugins, config);bg"
|
||||
["3"]="docker;install_docker;🐳 Instalar Docker y Portainer;bg"
|
||||
["4"]="zerotier;install_zerotier;🌐 Instalar ZeroTier VPN;bg"
|
||||
["5"]="printer;install_printer;🖨️ Configurar Impresoras (CUPS);bg"
|
||||
["6"]="mouse_cursor;install_mouse_cursor;🖱️ Instalar Tema de Cursor (Bibata);bg"
|
||||
["7"]="icon_manager;run_module_main;🎨 Gestionar Temas de Iconos (Papirus, Tela, etc.);fg"
|
||||
["8"]="davinci-resolve;install_davinci_resolve;🎬 Instalar DaVinci Resolve (Intel Edition);fg"
|
||||
["H"]="hyprland-config;run_module_main;🎨 Instalar Configuración de Hyprland;bg"
|
||||
["F"]="disk-format;run_module_main;💾 Formatear un Disco (FAT32, exFAT, NTFS, ext4);fg"
|
||||
)
|
||||
|
||||
# Módulos a incluir en la opción "Instalar Todo"
|
||||
INSTALL_ALL_CHOICES=("1" "2" "3" "4" "5" "6")
|
||||
|
||||
# Función para mostrar el menú
|
||||
show_menu() {
|
||||
clear
|
||||
@@ -86,85 +108,66 @@ show_menu() {
|
||||
echo ""
|
||||
echo -e "${BOLD}Selecciona las opciones que deseas instalar:${NC}"
|
||||
echo ""
|
||||
echo -e " ${GREEN}1)${NC} 📦 Instalar Aplicaciones (VS Code, VLC, drivers, etc.)"
|
||||
echo -e " ${GREEN}2)${NC} 🐚 Configurar Zsh (shell, plugins, config)"
|
||||
echo -e " ${GREEN}3)${NC} 🐳 Instalar Docker y Portainer"
|
||||
echo -e " ${GREEN}4)${NC} 🌐 Instalar ZeroTier"
|
||||
echo -e " ${GREEN}5)${NC} 🖨️ Configurar Impresoras (CUPS)"
|
||||
echo -e " ${GREEN}6)${NC} 🖱️ Instalar Tema de Cursor (Bibata)"
|
||||
echo -e " ${GREEN}7)${NC} 🎨 Gestionar Temas de Iconos (Papirus, Tela, etc.)"
|
||||
echo -e " ${GREEN}8)${NC} 🎬 Instalar DaVinci Resolve (Intel Edition)"
|
||||
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)"
|
||||
# Generar menú dinámicamente
|
||||
for key in "${!MODULES[@]}"; do
|
||||
IFS=';' read -r _ _ description _ <<< "${MODULES[$key]}"
|
||||
# Asegurarse de que las claves numéricas se ordenen correctamente
|
||||
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}0)${NC} 🚪 Salir"
|
||||
echo ""
|
||||
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
|
||||
echo -ne "${BOLD}Selecciona opción [0-9]: ${NC}"
|
||||
echo -ne "${BOLD}Selecciona opción: ${NC}"
|
||||
}
|
||||
|
||||
# Función para ejecutar módulo
|
||||
run_module() {
|
||||
local module_name=$1
|
||||
local module_file="${MODULES_DIR}/${module_name}.sh"
|
||||
|
||||
if [[ ! -f "${module_file}" ]]; then
|
||||
log_error "Módulo ${module_name} no encontrado"
|
||||
local choice=$1
|
||||
IFS=';' read -r module_file func_name description type <<< "${MODULES[$choice]}"
|
||||
|
||||
# Para funciones internas como update_system
|
||||
if [[ ! -f "${MODULES_DIR}/${module_file}.sh" && "$(type -t "$func_name")" == "function" ]]; then
|
||||
"$func_name"
|
||||
return $?
|
||||
fi
|
||||
|
||||
local full_path="${MODULES_DIR}/${module_file}.sh"
|
||||
if [[ ! -f "$full_path" ]]; then
|
||||
log_error "Módulo para la opción '${choice}' (${module_file}.sh) no encontrado."
|
||||
return 1
|
||||
fi
|
||||
|
||||
|
||||
# Exportar REPO_BASE para que los módulos lo puedan usar
|
||||
export REPO_BASE
|
||||
|
||||
|
||||
# Cargar y ejecutar el módulo
|
||||
source "${module_file}"
|
||||
|
||||
case "${module_name}" in
|
||||
"apps")
|
||||
install_apps
|
||||
;;
|
||||
"zsh-config")
|
||||
install_zsh
|
||||
;;
|
||||
"docker")
|
||||
install_docker
|
||||
;;
|
||||
"zerotier")
|
||||
install_zerotier
|
||||
;;
|
||||
"printer")
|
||||
install_printer
|
||||
;;
|
||||
"mouse_cursor")
|
||||
install_mouse_cursor
|
||||
;;
|
||||
"davinci-resolve")
|
||||
install_davinci_resolve
|
||||
;;
|
||||
"icon_manager")
|
||||
bash "${module_file}"
|
||||
;;
|
||||
*)
|
||||
log_error "Función no definida para el módulo ${module_name}"
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
source "$full_path"
|
||||
|
||||
if [[ "$(type -t "$func_name")" != "function" ]]; then
|
||||
log_error "La función principal '${func_name}' no está definida en '${module_file}.sh'."
|
||||
return 1
|
||||
fi
|
||||
|
||||
"$func_name"
|
||||
return $?
|
||||
}
|
||||
|
||||
# Función para instalar todo
|
||||
install_all() {
|
||||
log_step "Instalación Completa de Omarchy"
|
||||
|
||||
local modules=("apps" "zsh-config" "docker" "zerotier" "printer" "mouse_cursor")
|
||||
local failed=()
|
||||
|
||||
for module in "${modules[@]}"; do
|
||||
log_info "Procesando módulo: ${module}"
|
||||
if run_module "${module}"; then
|
||||
log_success "Módulo ${module} completado"
|
||||
for choice in "${INSTALL_ALL_CHOICES[@]}"; do
|
||||
IFS=';' read -r module_file _ description _ <<< "${MODULES[$choice]}"
|
||||
log_info "Ejecutando: ${description}"
|
||||
if run_module "${choice}"; then
|
||||
log_success "Módulo ${module_file} completado"
|
||||
else
|
||||
log_error "Error en el módulo ${module}"
|
||||
failed+=("${module}")
|
||||
log_error "Error en el módulo ${module_file}"
|
||||
failed+=("${module_file}")
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
@@ -207,84 +210,35 @@ main() {
|
||||
read -r choice
|
||||
choice=$(echo "${choice// /}" | tr '[:lower:]' '[:upper:]') # Eliminar espacios y convertir a mayúsculas
|
||||
|
||||
case "${choice}" in
|
||||
1)
|
||||
start_spinner "Instalando aplicaciones..."
|
||||
run_module "apps"
|
||||
stop_spinner $? "Módulo de aplicaciones finalizado."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
2)
|
||||
start_spinner "Configurando Zsh..."
|
||||
run_module "zsh-config"
|
||||
stop_spinner $? "Configuración de Zsh finalizada."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
3)
|
||||
start_spinner "Instalando Docker..."
|
||||
run_module "docker"
|
||||
stop_spinner $? "Instalación de Docker finalizada."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
4)
|
||||
start_spinner "Instalando ZeroTier..."
|
||||
run_module "zerotier"
|
||||
stop_spinner $? "Instalación de ZeroTier finalizada."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
5)
|
||||
start_spinner "Configurando impresoras..."
|
||||
run_module "printer"
|
||||
stop_spinner $? "Configuración de impresoras finalizada."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
6)
|
||||
start_spinner "Instalando tema de cursor..."
|
||||
run_module "mouse_cursor"
|
||||
stop_spinner $? "Tema de cursor instalado."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
7)
|
||||
# Este módulo es interactivo, no usamos spinner aquí
|
||||
run_module "icon_manager"
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
8)
|
||||
if [[ -v "MODULES[$choice]" ]]; then
|
||||
IFS=';' read -r _ _ description type <<< "${MODULES[$choice]}"
|
||||
|
||||
# Manejo especial para DaVinci Resolve
|
||||
if [[ "$choice" == "8" ]]; then
|
||||
log_warning "DaVinci Resolve requiere el ZIP de instalación en ~/Downloads/"
|
||||
echo -ne "${BOLD}¿Continuar con la instalación? [s/N]: ${NC} "
|
||||
read -r confirm
|
||||
if [[ "${confirm}" =~ ^[SsYy]$ ]]; then
|
||||
# El spinner se maneja dentro del módulo de DaVinci
|
||||
run_module "davinci-resolve"
|
||||
else
|
||||
if ! [[ "${confirm}" =~ ^[SsYy]$ ]]; then
|
||||
log_info "Instalación cancelada"
|
||||
read -p "Presiona Enter para continuar..."
|
||||
continue
|
||||
fi
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
9)
|
||||
start_spinner "Actualizando el sistema..."
|
||||
update_system
|
||||
stop_spinner $? "Sistema actualizado."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
C)
|
||||
start_spinner "Limpiando paquetes huérfanos..."
|
||||
cleanup_orphans
|
||||
stop_spinner $? "Limpieza finalizada."
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
A)
|
||||
echo -ne "${BOLD}¿Instalar todas las opciones (1-6)? [s/N]: ${NC} "
|
||||
fi
|
||||
|
||||
if [[ "$type" == "bg" ]]; then
|
||||
spinner_msg="${description#* }..." # "Instalar Apps..."
|
||||
start_spinner "Ejecutando: ${spinner_msg}"
|
||||
run_module "$choice"
|
||||
stop_spinner $? "Módulo '${description}' finalizado."
|
||||
else # 'fg'
|
||||
run_module "$choice"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
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} "
|
||||
read -r confirm
|
||||
if [[ "${confirm}" =~ ^[Ss]$ ]]; then
|
||||
install_all
|
||||
@@ -293,16 +247,13 @@ main() {
|
||||
fi
|
||||
echo ""
|
||||
read -p "Presiona Enter para continuar..."
|
||||
;;
|
||||
0)
|
||||
elif [[ "$choice" == "0" ]]; then
|
||||
log_info "Saliendo..."
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
else
|
||||
log_error "Opción inválida. Presiona Enter para continuar..."
|
||||
read -r
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user