# pop-launcher — el MOTOR del lanzador. No es de la suite COSMIC y por eso casi se pasa por alto.
#
# ── POR QUÉ APARECE RECIÉN AHORA ────────────────────────────────────────────────────────────────
# `cosmic-launcher` selló, arranca, se registra en el bus… y `Super` no abre nada. La razón está en
# una línea del serial que no menciona ninguna tecla:
#     ERROR pop-launcher failed to start: No such file or directory (os error 2)
# `cosmic-launcher` es **sólo la interfaz**: dibuja la lista y manda lo que tecleás por stdin a un
# proceso hijo, `pop-launcher`, que es quien busca. Sin ese binario la ventana no tiene nada que
# mostrar, así que no se muestra. Mismo modo de falla que el panel sin applets: **el componente que
# falta es un HIJO, no una librería**, y el log del padre se lee sano.
#
# Vive en OTRO repo (`pop-os/launcher`), no versiona por `epoch-N` y no entra en el pin lockstep de
# la suite: la versión la fija el `Cargo.lock` de cosmic-launcher, que pinea la rev exacta
# `a332a3a7` de la 1.2.7. Ese lock es la fuente de verdad — no el último tag del repo, que podría
# hablar otro protocolo con la interfaz que ya tenemos sellada.
name    = "pop-launcher"
version = "1.2.7"
license = "MPL-2.0"

[source]
# Tarball por COMMIT, no por tag: la rev sale del Cargo.lock de cosmic-launcher y no hay tag que la
# nombre. GitHub sirve `/archive/<sha>.tar.gz` igual que los de tag, y el sha256 de abajo lo ancla.
tarball = "https://github.com/pop-os/launcher/archive/a332a3a73316a3595816dd02fe426a1d3543167a.tar.gz"
sha256  = "adff78338a1680d9efa068741f6a95458b21e8278d96f4903f06004fda8ad7c6"

[build]
compiler = "zig-cc"
target   = "x86_64-linux-musl"
# DINÁMICO, por la misma razón que todo cliente de la suite: el plugin `cosmic_toplevel` entra con
# `cctk`/`sctk`, que traen `wayland-client` con la feature `dlopen`. Un musl estático no la honra.
link     = "dynamic"
# El binario se llama `pop-launcher-bin` (paquete `bin/` del workspace) y se INSTALA como
# `pop-launcher`. Los tres nombres —paquete, binario compilado, binario instalado— no coinciden, y el
# que importa para que la interfaz lo encuentre es el último. `-p` además de `--bin` porque el
# workspace tiene cuatro miembros y `cargo rustc` exige un único target cuando hay flags tras `--`.
flags    = ["-p", "pop-launcher-bin", "--bin", "pop-launcher-bin"]

[build.phases]
# El `just install` traducido, con `rootdir=/` (o sea `/usr`, no `~/.local`).
#
# ⚠ EL DISEÑO ES UN MULTIPLEXOR POR SYMLINK, igual que cosmic-applets: hay UN binario y cada plugin
# es un enlace con su nombre dentro de su propio directorio, junto al `plugin.ron` que lo describe.
# El servicio enumera `plugins/*/` y ejecuta el enlace; si el `.ron` está y el enlace no —o al revés—
# el plugin simplemente no existe para él, sin error. Por eso van los dos, y por eso el bucle no se
# puede "simplificar" a copiar los .ron sueltos.
#
# El `sed 's/_/-/'` de upstream cambia SÓLO el primer guión bajo, y así queda: `desktop_entries` es
# el directorio y `desktop-entries` el ejecutable de adentro. No es un descuido: son dos nombres
# distintos a propósito.
install = '''
mkdir -p /out/usr/bin /out/usr/lib/pop-launcher/plugins /out/usr/lib/pop-launcher/scripts
cp target/release/pop-launcher-bin /out/usr/bin/pop-launcher
chmod 755 /out/usr/bin/pop-launcher
for p in calc desktop_entries files find pop_shell pulse recent scripts terminal web cosmic_toplevel; do
  mkdir -p /out/usr/lib/pop-launcher/plugins/$p
  cp plugins/src/$p/*.ron /out/usr/lib/pop-launcher/plugins/$p/
  ln -sf /usr/bin/pop-launcher "/out/usr/lib/pop-launcher/plugins/$p/$(echo $p | sed 's/_/-/')"
done
cp -r scripts/. /out/usr/lib/pop-launcher/scripts/ 2>/dev/null || true
'''

[deps]
# El juego fijo de todo cliente de la suite. `sctk`/`cctk` (plugin cosmic_toplevel) enlazan
# xkbcommon; udev/input llegan por la misma cadena. NO hace falta openssl: `reqwest` entra con
# `default-features = false` y `rustls-tls`, o sea TLS en Rust puro — al revés que
# cosmic-settings-daemon, que sí lo arrastra por native-tls.
# Tampoco hace falta pulseaudio pese al plugin `pulse`: habla con el servidor por su protocolo, no
# por libpulse.
build = ["libxkbcommon", "pkgconf", "libudev-zero", "libinput"]
