# 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/.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"]