# targets.toml — el MANIFIESTO DE OBJETIVO: qué paquetes debe tener la distro. # # POR QUÉ EXISTE. `build-state.json` es el grafo de lo que EXISTE (768 recetas, cierra sin huérfanas). # Lo que la distro DEBE tener no estaba en ningún lado: vivía en dos strings de shell de # `product-userland-from-repo.sh`, otro de `mirada-usb.sh`, 55 listas planas en `tandas/` y una cola # de 206 recetas KDE. Por eso "¿cuánto falta?" no tenía respuesta: el mapa cerraba perfecto, pero # sólo cubría el territorio ya conquistado. Este fichero es el destino. (Plan: docs/plan-catalogo-objetivo.md) # # LA INVERSIÓN. `paquetes` lista sólo las RAÍCES — lo que un usuario pide POR NOMBRE. La clausura # (las libs de las que cuelgan) la calcula el grafo siguiendo las aristas de deps, no la escribe un # humano. Al revés de `tandas/base-system-3-libs.txt`, que enumera a mano miembros de la clausura. # # Un `perfil` = una imagen enviable. `hereda` compone (transitivo, sin ciclos). `cola` dice en qué # árbol de recetas viven sus raíces: `corpus` = `recipes/`; otra cosa = `recipes/incoming-/`, que # `build-state.py` sólo carga con su flag (`--kde`) ⇒ los perfiles de una cola no cargada se saltan # en vez de reportar raíces fantasma. # # Consumidores: `scripts/targets.py ` (expande a lista de nombres) y `scripts/build-state.py` # (marca los nodos `wanted` y calcula la membresía de perfil de cada receta). schema = "hammer-targets/1" [perfil.base] descripcion = "userland foundational C: la distro arranca y se usa (shell, VCS, privilegios, red, disco, TLS, proceso, editor, docs)" # Lift verbatim de BASE_SYSTEM_PKGS (scripts/product-userland-from-repo.sh). De-Alpinizado y firmado, # tandas base-system-1..3. paquetes = [ "bash", "git", "sudo", "doas", "util-linux", "shadow", "kbd", "procps-ng", "iproute2", "iputils", "dhcpcd", "e2fsprogs", "dosfstools", "parted", "rsync", "sed", "tzdata", "vim", "dbus", "ca-certificates", "gnupg", "lsof", "strace", "pciutils", "usbutils", "mandoc", ] [perfil.cli] descripcion = "la capa CLI moderna (Rust) encima de base — el userland real del producto" hereda = ["base"] # Lift verbatim de CLI_RUST_PKGS (scripts/product-userland-from-repo.sh). paquetes = [ "bat", "fd", "ripgrep", "jq", "zoxide", "dust", "procs", "htop", "less", "tree", "hyperfine", "delta", "eza", "sd", "tokei", "fzf", "skim", "git-cliff", "gitui", "starship", ] [perfil.escritorio-mirada] descripcion = "rootfs slim del USB mirada: compositor Wayland propio sobre mesa software" # Lift verbatim de PKGS (scripts/mirada-usb.sh). NO hereda base: es una imagen slim a propósito. # El ORDEN importa (libs primero, binarios mirada al final) y se preserva. paquetes = [ "mesa-swrast", "wayland", "libdrm", "seatd", "libinput", "libudev-zero", "libxkbcommon", "pixman", "linux-pam", "mtdev", "libevdev", "mirada-compositor", "mirada-greeter", "mirada-ctl", ] [perfil.escritorio-kde] descripcion = "escritorio KDE Plasma 6 desde fuente" cola = "incoming-kde" # Raíces del rootfs de metal (docs/HANDOFF-noche-kde-2026-07-14.md:135). El resto del escritorio # —137 artefactos hidratados— es CLAUSURA de estas 7, no lista a mano. paquetes = [ "plasma-workspace", "kwin", "kscreenlocker", "breeze", "frameworkintegration", "qqc2-desktop-style", "plasma-integration", # Huecos de RUNTIME confirmados por el triaje de la frontera (2026-07-22). Ninguno bloquea un # build —todas las recetas que los piden ya están selladas— pero sin ellos el escritorio arranca # roto: sin tipos de fichero, sin apps X11, sin diálogos de autorización y con los controles QML # en un estilo genérico. Ver docs/state/frontera-triaje.toml para el porqué de cada uno. "shared-mime-info", "xwayland", "polkit-qt-1", "qqc2-breeze-style", ]