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
│ ├── zerotier.sh # ZeroTier VPN
│ ├── 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)
│ └── mouse_cursor.sh # Tema de cursor Bibata
└── Readme.md
```
@@ -63,18 +64,10 @@ Selecciona las opciones que deseas instalar:
## 📋 Módulos Disponibles
### 1. 📦 Aplicaciones (`apps.sh`)
- Herramientas base (git, curl, wget, etc.)
- VS Code
- Cursor (desde AUR)
- VLC y plugins multimedia
- Herramientas de desarrollo
- Configuración de VLC como reproductor predeterminado
- Editores como VS Code y Cursor (desde AUR)
### 2. 🐚 Zsh (`zsh-config.sh`)
- Instalación de Zsh y plugins
- Descarga de configuración `.zshrc` desde GitHub
- Configuración como shell predeterminada
- Plugins: syntax-highlighting, autosuggestions
- Modifica `.bashrc` para lanzar Zsh automáticamente
### 3. 🐳 Docker (`docker.sh`)
- Instalación de Docker y Docker Compose
@@ -90,13 +83,15 @@ Selecciona las opciones que deseas instalar:
### 5. 🖨️ Impresoras (`printer.sh`)
- Instalación de CUPS
- Drivers comunes de impresora
- Configuración de servicios
- Interfaz web en http://localhost:631
### 6. 🎬 DaVinci Resolve (`davinci-resolve.sh`)
- Instalación de DaVinci Resolve para Intel GPU
- Configuración de OpenCL
- Requiere ZIP de instalación en `~/Downloads`
### 6. 🖱️ Tema de Cursor (`mouse_cursor.sh`)
- Instala el tema de cursor `Bibata-Modern-Ice`.
- Configura el cursor para Hyprland y aplicaciones GTK.
### 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
## 🔧 Ejecutar Módulos Individualmente
@@ -160,12 +155,9 @@ cd omarchy_setup
- intel-compute-runtime (OpenCL para Intel)
### 🐚 Zsh
- Shell Zsh con plugins (syntax-highlighting, autosuggestions)
- Configuración personalizada desde GitHub
- Configuración como shell predeterminada
- Modifica `.bashrc` para lanzar Zsh automáticamente
### 🐳 Docker
- Docker y Docker Compose
- Portainer (interfaz web de gestión)
- Usuario agregado al grupo docker
- Servicios habilitados y configurados
@@ -662,9 +654,9 @@ X)
- Docker y Portainer (docker.sh)
- ZeroTier (zerotier.sh)
- Impresoras CUPS (printer.sh)
- Tema de Cursor (mouse_cursor.sh)
- DaVinci Resolve (davinci-resolve.sh)
- 🔧 **Fácil de extender**: Agrega nuevos módulos fácilmente
- 🧹 **Limpieza**: Eliminado archivo duplicado davinci_resolve_intel.sh
- Gestor de Iconos (icon_manager.sh)
### v2.8.1 (2025-11-02)
- 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
- **Módulos locales requeridos**: El script requiere que los módulos estén presentes localmente. Clona el repositorio completo.
- **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.
- **Shell por defecto**: El módulo de Zsh modifica `.bashrc` para que las terminales nuevas usen Zsh.
## 🚀 Próximos Pasos

View File

@@ -6,6 +6,29 @@
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
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() {
log_step "Instalación de DaVinci Resolve (Intel Edition)"
@@ -23,12 +46,13 @@ install_davinci_resolve() {
log_info "Usando ZIP: ${RESOLVE_ZIP}"
start_spinner "Instalando dependencias básicas..."
# Instalación de paquetes básicos
log_info "Instalando paquetes básicos..."
sudo pacman -S --needed --noconfirm \
unzip patchelf libarchive xdg-user-dirs desktop-file-utils \
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
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
fi
start_spinner "Instalando headers del kernel (si es necesario)..."
# Instalar headers del kernel si son necesarios
KVER="$(uname -r)"
if [[ ! -d "/usr/lib/modules/${KVER}/build" ]]; then
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
stop_spinner $? "Headers del kernel verificados."
# Instalar runtime OpenCL (compute runtime), desde AUR si es necesario
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)..."
AUR_HELPER=$(ensure_aur_helper)
if [ "$AUR_HELPER" = "yay" ]; then
@@ -67,10 +94,11 @@ install_davinci_resolve() {
return 1
fi
fi
stop_spinner $? "intel-compute-runtime instalado."
fi
start_spinner "Instalando paquetes de video y OpenCL..."
# Instalar otros paquetes Intel / VA-API / OpenCL
log_info "Instalando paquetes Intel / VA-API / OpenCL..."
sudo pacman -S --needed --noconfirm \
intel-media-driver \
ocl-icd \
@@ -79,7 +107,8 @@ install_davinci_resolve() {
glu \
gtk2 \
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
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..."
vainfo | grep -E "H264|HEVC" || true
# Extraer DaVinci Resolve
log_info "Extrayendo DaVinci Resolve del ZIP..."
start_spinner "Extrayendo DaVinci Resolve del ZIP (puede tardar)..."
NEEDED_GB=10
FREE_KB=$(df --output=avail -k "${ZIP_DIR}" | tail -n1)
FREE_GB=$((FREE_KB / 1024 / 1024))
@@ -116,7 +144,8 @@ install_davinci_resolve() {
WORKDIR="$(mktemp -d -p "${ZIP_DIR}" .resolve-extract-XXXXXXXX)"
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)"
if [[ -z "${RUN_FILE}" ]]; then
@@ -125,8 +154,10 @@ install_davinci_resolve() {
fi
chmod +x "${RUN_FILE}"
start_spinner "Extrayendo AppImage..."
EX_DIR="$(dirname "${RUN_FILE}")"
( cd "${EX_DIR}" && "./$(basename "${RUN_FILE}")" --appimage-extract >/dev/null )
stop_spinner $? "AppImage extraído."
APPDIR="${EX_DIR}/squashfs-root"
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
popd >/dev/null
# Aplicar RPATH
log_info "Aplicando RPATH con patchelf..."
log_info "Aplicando RPATH con patchelf (esto puede tardar)..."
RPATH_DIRS=(
"libs"
"libs/plugins/sqldrivers"
@@ -167,17 +197,27 @@ install_davinci_resolve() {
done
RPATH_ABS+="\$ORIGIN"
# Usar barra de progreso para patchelf
if command -v patchelf &>/dev/null; then
find "${APPDIR}" -type f -exec bash -c '
file -b "$1" | grep -q ELF && sudo patchelf --set-rpath "'"${RPATH_ABS}"'" "$1"
' _ {} \; || true
local files_to_patch
files_to_patch=$(find "${APPDIR}" -type f -exec file {} + | grep "ELF" | cut -d: -f1)
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
# Instalar en /opt/resolve
log_info "Instalando DaVinci Resolve en /opt/resolve..."
start_spinner "Copiando archivos a /opt/resolve..."
sudo rm -rf /opt/resolve
sudo mkdir -p /opt/resolve
sudo rsync -a --delete "${APPDIR}/" /opt/resolve/
stop_spinner $? "Archivos copiados a /opt/resolve."
sudo mkdir -p /opt/resolve/.license
# Enlazar libcrypt legado si es necesario
@@ -230,4 +270,3 @@ EOF
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
install_davinci_resolve "$@"
fi

View File

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

View File

@@ -3,7 +3,7 @@
# 🌀 Omarchy Setup Script — Configuración modular para Arch Linux
# ===============================================================
set -uo pipefail
set -u
# Directorio del script
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..."
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ú
show_menu() {
clear
@@ -40,15 +86,16 @@ show_menu() {
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}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} 🎬 Instalar DaVinci Resolve (Intel Edition)"
echo -e " ${GREEN}8)${NC} 🔄 Actualizar Sistema"
echo -e " ${GREEN}9)${NC} 🧹 Limpiar Paquetes Huérfanos"
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)"
echo -e " ${GREEN}0)${NC} 🚪 Salir"
echo ""
@@ -94,6 +141,9 @@ run_module() {
"davinci-resolve")
install_davinci_resolve
;;
"icon_manager")
bash "${module_file}"
;;
*)
log_error "Función no definida para el módulo ${module_name}"
return 1
@@ -148,6 +198,10 @@ main() {
done 2>/dev/null) &
# 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
show_menu
read -r choice
@@ -155,45 +209,59 @@ main() {
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)
run_module "mouse_cursor"
# Este módulo es interactivo, no usamos spinner aquí
run_module "icon_manager"
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}"
8)
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
log_info "Instalación cancelada"
@@ -201,18 +269,22 @@ main() {
echo ""
read -p "Presiona Enter para continuar..."
;;
8)
9)
start_spinner "Actualizando el sistema..."
update_system
stop_spinner $? "Sistema actualizado."
echo ""
read -p "Presiona Enter para continuar..."
;;
9)
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-5)? [s/N]: ${NC}"
echo -ne "${BOLD}¿Instalar todas las opciones (1-6)? [s/N]: ${NC} "
read -r confirm
if [[ "${confirm}" =~ ^[Ss]$ ]]; then
install_all