#!/bin/bash # # icon_manager.sh (v2) # # Un script de gestión para instalar y cambiar entre diferentes temas de iconos # en un entorno Hyprland/Omarchy. Incluye temas base y personalizaciones. # SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "${SCRIPT_DIR}/common.sh" # --- Variables Globales --- AUTOSTART_FILE="$HOME/.config/hypr/autostart.conf" TEMP_DIR="/tmp/icon_theme_setup" ICON_DIR_USER="$HOME/.local/share/icons" # --- Funciones de Utilidad --- # Función para verificar dependencias check_deps() { if ! command_exists git; then log_error "git no está instalado. Por favor, instálalo para continuar (ej. sudo pacman -S git)." return 1 fi return 0 } # Función para aplicar la configuración de forma persistente # Argumento 1: Nombre del tema de iconos (ej. 'Tela-nord-dark') apply_theme() { local theme_name="$1" log_info "Aplicando el tema de iconos '$theme_name'..." mkdir -p "$(dirname "$AUTOSTART_FILE")" touch "$AUTOSTART_FILE" # Eliminar cualquier configuración de icon-theme anterior para evitar conflictos sed -i '/exec-once = gsettings set org.gnome.desktop.interface icon-theme/d' "$AUTOSTART_FILE" # Añadir el bloque de configuración si no existe if ! grep -Fq "CONFIGURACIÓN DE TEMA DE ICONOS" "$AUTOSTART_FILE"; then echo -e "\n# -----------------------------------------------------" >> "$AUTOSTART_FILE" echo "# CONFIGURACIÓN DE TEMA DE ICONOS" >> "$AUTOSTART_FILE" echo "# -----------------------------------------------------" >> "$AUTOSTART_FILE" echo "exec-once = /usr/lib/xdg-desktop-portal-gtk" >> "$AUTOSTART_FILE" echo "exec-once = sleep 1" >> "$AUTOSTART_FILE" fi # Añadir el comando gsettings para el tema seleccionado echo "exec-once = gsettings set org.gnome.desktop.interface icon-theme '$theme_name'" >> "$AUTOSTART_FILE" # Aplicar el tema en la sesión actual para un efecto inmediato gsettings set org.gnome.desktop.interface icon-theme "$theme_name" log_success "¡Tema configurado! La configuración se ha guardado en $AUTOSTART_FILE" } # --- Funciones de Instalación de Temas --- # Función auxiliar para asegurar que el tema base Papirus esté instalado ensure_papirus_installed() { if [[ ! -d "$ICON_DIR_USER/Papirus-Dark" ]]; then log_info "El tema base Papirus no está instalado. Instalándolo ahora..." git clone --depth 1 https://github.com/PapirusDevelopment/papirus-icon-theme.git "$TEMP_DIR/papirus" "$TEMP_DIR/papirus/install.sh" else log_info "El tema base Papirus ya está instalado." fi } install_tela_nord() { local theme_name="Tela-nord-dark" echo "--- Gestionando Tela Nord Icons ---" if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then log_info "El tema ya está instalado." else log_info "Instalando el tema..." git clone --depth 1 https://github.com/vinceliuice/Tela-icon-theme.git "$TEMP_DIR/tela" "$TEMP_DIR/tela/install.sh" -c nord fi apply_theme "$theme_name" } install_papirus() { local theme_name="Papirus-Dark" echo "--- Gestionando Papirus Icons (Estándar) ---" ensure_papirus_installed # Si el usuario quiere el Papirus estándar, restauramos los colores por si acaso if command_exists papirus-folders; then "$ICON_DIR_USER/papirus-folders" --default --theme "$theme_name" fi apply_theme "$theme_name" } install_candy() { local theme_name="Candy" echo "--- Gestionando Candy Icons ---" if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then log_info "El tema ya está instalado." else log_info "Instalando el tema..." git clone --depth 1 https://github.com/EliverLara/candy-icons.git "$TEMP_DIR/candy" "$TEMP_DIR/candy/install.sh" fi apply_theme "$theme_name" } install_papirus_catppuccin() { local theme_name="Papirus-Dark" # Catppuccin tiene 4 variantes: latte, frappe, macchiato, mocha. Usaremos Mocha. local catppuccin_flavor="mocha" echo "--- Gestionando Papirus Icons con colores Catppuccin ($catppuccin_flavor) ---" # 1. Asegurarse de que el tema base Papirus exista ensure_papirus_installed # 2. Descargar y ejecutar el script de personalización log_info "Descargando y aplicando el colorizador Catppuccin..." git clone --depth 1 https://github.com/catppuccin/papirus-folders.git "$TEMP_DIR/papirus-folders-catppuccin" chmod +x "$TEMP_DIR/papirus-folders-catppuccin/papirus-folders" # Ejecutar el script para cambiar el color de las carpetas "$TEMP_DIR/papirus-folders-catppuccin/papirus-folders" -C "catppuccin-${catppuccin_flavor}" --theme "$theme_name" # 3. Aplicar el tema (el nombre sigue siendo Papirus-Dark, pero los iconos han cambiado) apply_theme "$theme_name" } # --- Función Principal (Menú) --- run_module_main() { log_step "Gestor de Temas de Iconos para Hyprland" if ! check_deps; then return 1 fi while true; do clear echo -e "${CYAN}==========================================${NC}" echo -e " ${BOLD}Gestor de Temas de Iconos para Hyprland${NC} " echo -e "${CYAN}==========================================${NC}" echo "Selecciona el tema que quieres instalar/activar:" echo echo -e " ${GREEN}1)${NC} Tela (variante Nord)" echo -e " ${GREEN}2)${NC} Papirus (estándar, oscuro)" echo -e " ${GREEN}3)${NC} Papirus (con colores Catppuccin Mocha)" echo -e " ${GREEN}4)${NC} Candy Icons" echo echo -e " ${YELLOW}q)${NC} Volver al menú principal" echo read -p "Tu elección: " choice # Limpiar directorio temporal antes de cada operación rm -rf "$TEMP_DIR" mkdir -p "$TEMP_DIR" case $choice in 1) install_tela_nord ;; 2) install_papirus ;; 3) install_papirus_catppuccin ;; 4) install_candy ;; [qQ]) log_info "Volviendo al menú principal." break ;; *) log_error "Opción no válida. Inténtalo de nuevo." ;; esac echo read -p "Presiona Enter para continuar..." || true done # Limpieza final rm -rf "$TEMP_DIR" return 0 } if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then run_module_main "$@" fi