#!/bin/bash
# icon_install: pone los lanzadores (.desktop) de un paquete en el menu y en
# el escritorio de un usuario.
#
#   icon_install [--prueba] [USUARIO] DIRECTORIO_DE_LANZADORES
#
# Con --prueba muestra lo que haria, sin hacerlo.
# Lo llama makefile.lib (objetivo de iconos) con cada usuario de /home y
# PREFIX/share/PAQUETE/launchers. Siendo root se puede instalar para otro
# usuario (se hace como el); si no, solo para uno mismo.
#
# Reescrito el 07/10/2026: el anterior agregaba ademas el lanzador a Unity
# (gsettings com.canonical.Unity.Launcher), que no existe desde Ubuntu
# 18.04, y para un usuario comun usaba /root como su directorio.
set -u

if [ "${1:-}" = --help ] || [ "${1:-}" = -h ]; then
    sed -n '2,11s/^# \{0,1\}//p' "$0"
    exit 0
fi
if [ "${1:-}" = --version ]; then
    echo "icon_install 4"
    exit 0
fi

prueba=0
if [ "${1:-}" = --prueba ]; then prueba=1; shift; fi

if [ $# -ge 2 ]; then
    usuario=$1; dir=$2
elif [ $# -eq 1 ]; then
    usuario=$(id -un); dir=$1
else
    echo "uso: icon_install [--prueba] [USUARIO] DIRECTORIO_DE_LANZADORES" >&2
    exit 2
fi

getent passwd "$usuario" > /dev/null || { echo "icon_install: no existe el usuario $usuario" >&2; exit 1; }
[ -d "$dir" ] || { echo "icon_install: no esta el directorio $dir" >&2; exit 1; }
casa=$(getent passwd "$usuario" | cut -d: -f6)

# como el usuario: siendo el mismo, directo; siendo root, con su
como() {
    if [ $prueba = 1 ]; then
        echo "  [como $usuario] $1"
    elif [ "$(id -un)" = "$usuario" ]; then
        bash -c "$1"
    elif [ "$(id -u)" = 0 ]; then
        su "$usuario" -s /bin/bash -c "$1"
    else
        echo "icon_install: no soy root ni $usuario: no puedo instalar para el" >&2
        return 1
    fi
}

hay=0
for f in "$dir"/*; do
    [ -f "$f" ] || continue
    hay=1
    echo "icon_install: $(basename "$f") para $usuario"
    if command -v xdg-desktop-menu > /dev/null; then
        como "xdg-desktop-menu install --novendor '$f'" || true
    fi
    # el escritorio: el de xdg-user-dir si esta, si no Escritorio o Desktop
    como "d=\$(xdg-user-dir DESKTOP 2>/dev/null); \
          [ -n \"\$d\" ] && [ \"\$d\" != '$casa' ] || \
             for d in '$casa/Escritorio' '$casa/Desktop'; do [ -d \"\$d\" ] && break; done; \
          [ -d \"\$d\" ] && cp '$f' \"\$d/\" && chmod +x \"\$d/$(basename "$f")\"" || true
done
[ $hay = 1 ] || echo "icon_install: no hay lanzadores en $dir"
exit 0
