gioser

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 188Rust 55Shell 30Markdown 281211 Definiciones

⎇ 3d79cdf98b9085ee55e2dad8e91b96761772a680 scripts/gnome/inyectar-cards.py Python · 30 líneas · 1.6 KB Historia Quién tocó qué crudo

SDD 30 4c: GNOME con los demonios supervisados por arje — y el control arregló colord 3d79cdf98 · Sergio ·

1#!/usr/bin/env python3
2# inyectar-cards.py — mete las Cards de servicio de un perfil en el `genesis` de la seed (SDD 30 §4c).
3#
4# Por qué es un fichero y no un heredoc dentro del script de imagen: el script ya tiene un heredoc de
5# python (el del console-getty) y anidar dos es la receta del error mudo — el terminador del interno
6# cierra el externo y la mitad del programa se ejecuta como shell. Pasó al escribir esto.
7#
8# NO genera las Cards: las recibe ya emitidas por `takana service-cards`, que es la única
9# implementación de la traducción `[[service]]` → Card. Acá sólo se COMPONE la seed.
10import json, os, sys
11
12seed_p, cards_p = sys.argv[1], sys.argv[2]
13seed = json.load(open(seed_p))
14cards = json.load(open(cards_p))
15
16# Idempotente por `label`: re-armar la imagen no puede duplicar Entes. Dos Cards con el mismo label
17# no son "dos servicios": para el grafo de arje son una colisión de identidad, y el segundo se
18# perdería en silencio o pelearía con el primero por el mismo nombre del bus.
19ya = {g.get("label") for g in seed.get("genesis", [])}
20puestos = [c["label"] for c in cards if c["label"] not in ya]
21seed.setdefault("genesis", []).extend(c for c in cards if c["label"] not in ya)
22
23tmp = seed_p + ".new"
24with open(tmp, "w") as f:
25    json.dump(seed, f, indent=2)
26os.chmod(tmp, 0o644)
27# Reemplazar la ENTRADA de directorio, no escribir en sitio: la seed del árbol fundido es un hardlink
28# read-only al artefacto del store, y escribirle encima mutaría el store.
29os.replace(tmp, seed_p)
30print("   cards en el genesis:", ", ".join(puestos) or "(ninguna nueva)")