Refactor icon theme management: improve temporary directory handling and streamline installation functions

This commit is contained in:
Marco Gallegos
2025-11-14 20:27:17 -06:00
parent 045cfb5799
commit 08312f45dd

View File

@@ -1,17 +1,16 @@
#!/bin/bash #!/usr/bin/env bash
#
# icon_manager.sh (v2) # icon_manager.sh (v2)
# #
# Un script de gestión para instalar y cambiar entre diferentes temas de iconos # Un script de gestión para instalar y cambiar entre diferentes temas de iconos
# en un entorno Hyprland/Omarchy. Incluye temas base y personalizaciones. # en un entorno Hyprland/Omarchy. Incluye temas base y personalizaciones.
# #
set -euo pipefail
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"
# --- Variables Globales --- # --- Variables Globales ---
AUTOSTART_FILE="$HOME/.config/hypr/autostart.conf" AUTOSTART_FILE="$HOME/.config/hypr/autostart.conf"
TEMP_DIR="/tmp/icon_theme_setup"
ICON_DIR_USER="$HOME/.local/share/icons" ICON_DIR_USER="$HOME/.local/share/icons"
# --- Funciones de Utilidad --- # --- Funciones de Utilidad ---
@@ -59,70 +58,82 @@ apply_theme() {
# Función auxiliar para asegurar que el tema base Papirus esté instalado # Función auxiliar para asegurar que el tema base Papirus esté instalado
ensure_papirus_installed() { ensure_papirus_installed() {
local temp_dir="$1"
if [[ ! -d "$ICON_DIR_USER/Papirus-Dark" ]]; then if [[ ! -d "$ICON_DIR_USER/Papirus-Dark" ]]; then
log_info "El tema base Papirus no está instalado. Instalándolo ahora..." 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" git clone --depth 1 https://github.com/PapirusDevelopment/papirus-icon-theme.git "$temp_dir/papirus"
"$TEMP_DIR/papirus/install.sh" "$temp_dir/papirus/install.sh"
else else
log_info "El tema base Papirus ya está instalado." log_info "El tema base Papirus ya está instalado."
fi fi
} }
# Función para instalar y aplicar el tema Tela Nord (usado como default) # Función para instalar y aplicar el tema Tela Nord (usado como default)
install_tela_nord() { # Argumento 1 (opcional): Directorio temporal a utilizar.
set_default_icon_theme() {
local theme_name="Tela-nord-dark" local theme_name="Tela-nord-dark"
echo "--- Gestionando Tela Nord Icons ---" local temp_dir_param="${1:-}" # Aceptar directorio temporal como parámetro
log_info "Gestionando el tema de iconos por defecto '$theme_name'..."
if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then
log_info "El tema ya está instalado." log_info "El tema '$theme_name' ya está instalado."
else else
log_info "Instalando el tema..." log_info "Instalando el tema '$theme_name'..."
git clone --depth 1 https://github.com/vinceliuice/Tela-icon-theme.git "$TEMP_DIR/tela" # Si no se pasa un directorio, crear uno propio y limpiarlo.
"$TEMP_DIR/tela/install.sh" -c nord # Si se pasa, usarlo sin limpiarlo (la función llamadora se encarga).
local temp_dir="${temp_dir_param}"
[[ -z "$temp_dir" ]] && temp_dir=$(mktemp -d)
git clone --depth 1 https://github.com/vinceliuice/Tela-icon-theme.git "$temp_dir/tela"
"$temp_dir/tela/install.sh" -c nord
[[ -z "$temp_dir_param" ]] && rm -rf "$temp_dir"
fi fi
apply_theme "$theme_name" apply_theme "$theme_name"
} }
install_papirus() { install_papirus_standard() {
local theme_name="Papirus-Dark" local theme_name="Papirus-Dark"
local temp_dir="$1"
echo "--- Gestionando Papirus Icons (Estándar) ---" echo "--- Gestionando Papirus Icons (Estándar) ---"
ensure_papirus_installed ensure_papirus_installed "$temp_dir"
# Si el usuario quiere el Papirus estándar, restauramos los colores por si acaso # Si el usuario quiere el Papirus estándar, restauramos los colores por si acaso
if command_exists papirus-folders; then if command_exists papirus-folders; then
"$ICON_DIR_USER/papirus-folders" --default --theme "$theme_name" papirus-folders --default --theme "$theme_name"
fi fi
apply_theme "$theme_name" apply_theme "$theme_name"
} }
install_candy() { install_candy() {
local theme_name="Candy" local theme_name="Candy"
local temp_dir="$1"
echo "--- Gestionando Candy Icons ---" echo "--- Gestionando Candy Icons ---"
if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then
log_info "El tema ya está instalado." log_info "El tema ya está instalado."
else else
log_info "Instalando el tema..." log_info "Instalando el tema..."
git clone --depth 1 https://github.com/EliverLara/candy-icons.git "$TEMP_DIR/candy" git clone --depth 1 https://github.com/EliverLara/candy-icons.git "$temp_dir/candy"
"$TEMP_DIR/candy/install.sh" "$temp_dir/candy/install.sh"
fi fi
apply_theme "$theme_name" apply_theme "$theme_name"
} }
install_papirus_catppuccin() { install_papirus_catppuccin() {
local theme_name="Papirus-Dark" local theme_name="Papirus-Dark"
# Catppuccin tiene 4 variantes: latte, frappe, macchiato, mocha. Usaremos Mocha.
local catppuccin_flavor="mocha" local catppuccin_flavor="mocha"
local temp_dir="$1"
echo "--- Gestionando Papirus Icons con colores Catppuccin ($catppuccin_flavor) ---" echo "--- Gestionando Papirus Icons con colores Catppuccin ($catppuccin_flavor) ---"
# 1. Asegurarse de que el tema base Papirus exista ensure_papirus_installed "$temp_dir"
ensure_papirus_installed
# 2. Descargar y ejecutar el script de personalización # 2. Descargar y ejecutar el script de personalización
log_info "Descargando y aplicando el colorizador Catppuccin..." log_info "Descargando y aplicando el colorizador Catppuccin..."
git clone --depth 1 https://github.com/catppuccin/papirus-folders.git "$TEMP_DIR/papirus-folders-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" chmod +x "$temp_dir/papirus-folders-catppuccin/papirus-folders"
# Ejecutar el script para cambiar el color de las carpetas # Ejecutar el script para cambiar el color de las carpetas
"$TEMP_DIR/papirus-folders-catppuccin/papirus-folders" -C "catppuccin-${catppuccin_flavor}" --theme "$theme_name" "$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) # 3. Aplicar el tema (el nombre sigue siendo Papirus-Dark, pero los iconos han cambiado)
apply_theme "$theme_name" apply_theme "$theme_name"
@@ -136,6 +147,10 @@ run_module_main() {
return 1 return 1
fi fi
local temp_dir
temp_dir=$(mktemp -d)
trap 'rm -rf -- "$temp_dir"' EXIT
while true; do while true; do
clear clear
echo -e "${CYAN}==========================================${NC}" echo -e "${CYAN}==========================================${NC}"
@@ -152,36 +167,28 @@ run_module_main() {
echo echo
read -p "Tu elección: " choice read -p "Tu elección: " choice
# Limpiar directorio temporal antes de cada operación # Limpiar el directorio temporal para la nueva operación
rm -rf "$TEMP_DIR" rm -rf -- "$temp_dir"/*
mkdir -p "$TEMP_DIR"
case $choice in case $choice in
1) install_tela_nord ;; 1) set_default_icon_theme "$temp_dir" ;;
2) install_papirus ;; 2) install_papirus_standard "$temp_dir" ;;
3) install_papirus_catppuccin ;; 3) install_papirus_catppuccin "$temp_dir" ;;
4) install_candy ;; 4) install_candy "$temp_dir" ;;
[qQ]) [qQ])
log_info "Volviendo al menú principal." log_info "Volviendo al menú principal."
break break
;; ;;
*) log_error "Opción no válida. Inténtalo de nuevo." ;; *) log_error "Opción no válida. Inténtalo de nuevo." ;;
esac esac
if [[ ! "$choice" =~ [qQ] ]]; then
echo echo
read -p "Presiona Enter para continuar..." || true read -p "Presiona Enter para continuar..."
fi
done done
# Limpieza final
rm -rf "$TEMP_DIR"
return 0 return 0
} }
# La función set_default_icon_theme es un alias para mantener la compatibilidad
# con otros scripts como hyprland-config.sh
set_default_icon_theme() {
install_tela_nord
}
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
run_module_main "$@" run_module_main "$@"
fi fi