Files
omarchy_setup/omarchy-setup.sh
2025-11-14 12:19:58 -06:00

239 lines
7.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# ===============================================================
# 🌀 Omarchy Setup Script — Configuración modular para Arch Linux
# ===============================================================
set -uo pipefail
# Directorio del script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
MODULES_DIR="${SCRIPT_DIR}/modules"
REPO_BASE="https://raw.githubusercontent.com/marcogll/omarchy_setup/main"
# Verificar que los módulos existen
if [[ ! -d "${MODULES_DIR}" ]] || [[ ! -f "${MODULES_DIR}/common.sh" ]]; then
echo -e "\033[0;31m✗ Error: Módulos no encontrados\033[0m"
echo ""
echo "Este script requiere que los módulos estén presentes localmente."
echo "Por favor, clona el repositorio completo:"
echo ""
echo " git clone https://github.com/marcogll/omarchy_setup.git"
echo " cd omarchy_setup"
echo " ./omarchy-setup.sh"
echo ""
exit 1
fi
# Cargar funciones comunes
source "${MODULES_DIR}/common.sh"
# Asegurar que los módulos son ejecutables (para ejecución individual)
log_info "Verificando permisos de los módulos..."
chmod +x "${MODULES_DIR}"/*.sh 2>/dev/null || true
# Función para mostrar el menú
show_menu() {
clear
echo -e "${CYAN}╔════════════════════════════════════════════════════════════╗${NC}"
echo -e "${CYAN}${NC} ${BOLD}🌀 Omarchy Setup Script — Configuración Modular${NC} ${CYAN}${NC}"
echo -e "${CYAN}╚════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${BOLD}Selecciona las opciones que deseas instalar:${NC}"
echo ""
echo -e " ${GREEN}1)${NC} 📦 Instalar Aplicaciones (VS Code, Cursor, VLC, herramientas)"
echo -e " ${GREEN}2)${NC} 🐚 Configurar Zsh (shell, plugins, configuración personalizada)"
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} 🎬 Instalar DaVinci Resolve (Intel Edition)"
echo -e " ${GREEN}8)${NC} 🔄 Actualizar Sistema"
echo -e " ${GREEN}9)${NC} 🧹 Limpiar Paquetes Huérfanos"
echo -e " ${GREEN}A)${NC} ✅ Instalar Todo (opciones 1-6)"
echo -e " ${GREEN}0)${NC} 🚪 Salir"
echo ""
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -ne "${BOLD}Selecciona opción [0-9]: ${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"
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
;;
*)
log_error "Función no definida para el módulo ${module_name}"
return 1
;;
esac
}
# 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"
else
log_error "Error en el módulo ${module}"
failed+=("${module}")
fi
echo ""
done
if [[ ${#failed[@]} -eq 0 ]]; then
log_success "Todas las instalaciones se completaron correctamente"
else
log_warning "Algunos módulos fallaron: ${failed[*]}"
fi
}
# Función principal
main() {
# Verificar que estamos en Arch Linux
if [[ ! -f /etc/arch-release ]]; then
log_error "Este script está diseñado para Arch Linux"
exit 1
fi
# Verificar permisos de sudo
if ! sudo -n true 2>/dev/null; then
log_info "Este script requiere permisos de sudo"
sudo -v
fi
# Mantener sudo activo en background
(while true; do
sudo -n true
sleep 60
kill -0 "$$" || exit
done 2>/dev/null) &
# Bucle principal del menú
while true; do
show_menu
read -r choice
choice=$(echo "${choice// /}" | tr '[:lower:]' '[:upper:]') # Eliminar espacios y convertir a mayúsculas
case "${choice}" in
1)
run_module "apps"
echo ""
read -p "Presiona Enter para continuar..."
;;
2)
run_module "zsh-config"
echo ""
read -p "Presiona Enter para continuar..."
;;
3)
run_module "docker"
echo ""
read -p "Presiona Enter para continuar..."
;;
4)
run_module "zerotier"
echo ""
read -p "Presiona Enter para continuar..."
;;
5)
run_module "printer"
echo ""
read -p "Presiona Enter para continuar..."
;;
6)
run_module "mouse_cursor"
echo ""
read -p "Presiona Enter para continuar..."
;;
7)
run_module "mouse_cursor"
echo ""
read -p "Presiona Enter para continuar..."
;;
7)
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
run_module "davinci-resolve"
else
log_info "Instalación cancelada"
fi
echo ""
read -p "Presiona Enter para continuar..."
;;
8)
update_system
echo ""
read -p "Presiona Enter para continuar..."
;;
9)
cleanup_orphans
echo ""
read -p "Presiona Enter para continuar..."
;;
A)
echo -ne "${BOLD}¿Instalar todas las opciones (1-5)? [s/N]: ${NC}"
read -r confirm
if [[ "${confirm}" =~ ^[Ss]$ ]]; then
install_all
else
log_info "Instalación cancelada"
fi
echo ""
read -p "Presiona Enter para continuar..."
;;
0)
log_info "Saliendo..."
exit 0
;;
*)
log_error "Opción inválida. Presiona Enter para continuar..."
read -r
;;
esac
done
}
# Ejecutar función principal
main "$@"