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 1572Shell 203Rust 109Markdown 993728 Sutichaykuna

⎇ ff78b3d54fb9786c53bf223dde4d428469948289 scripts/nix-import.sh Shell · 41 siq'ikuna · 2.3 KB Ñawpa willay ch'uya

takana etapa 5c: comentarios de scripts, MOTD, y un BUG que introdujo la etapa 4 476168bb0 · Sergio ·

1#!/bin/sh
2# nix-import.sh <attr> — Etapa G: extrae de nixpkgs la "receta" de <attr> (source+hash+deps+flags,
3# NO el binario) y la imprime como receta takana vía `takana import-nix`. Es la semilla del catálogo:
4# nixpkgs es el mayor set de recetas desde fuente; importamos la receta y takana reconstruye.
5#
6# Requiere `nix` (con nix-command). Ej:   scripts/nix-import.sh hello > recipes/hello.toml
7# Env: NIXPKGS=<flakeref> (default nixpkgs), HAMMER=<cmd> (default cargo run -q -p takana-cli --)
8set -eu
9
10ATTR="${1:?uso: nix-import.sh <attr-de-nixpkgs>   (ej: hello, jq, ripgrep)}"
11NIXPKGS="${NIXPKGS:-nixpkgs}"
12HAMMER="${TAKANA:-${HAMMER:-cargo run -q -p takana-cli --}}"
13# NIX_STORE: si el /nix/store del sistema no es escribible (install single-user incompleta), apuntá
14# a un store local, p.ej. NIX_STORE="local?root=$HOME/.nixstore".
15STORE_OPT=""
16[ -n "${NIX_STORE:-}" ] && STORE_OPT="--store ${NIX_STORE}"
17NIXFLAGS="--extra-experimental-features nix-command --extra-experimental-features flakes ${STORE_OPT}"
18
19# `nix eval --apply`: aplica una función al paquete y devuelve el JSON NORMALIZADO que el
20# importador consume. Toma la URL+outputHash del `p.src` (la derivación fija del fetch) y los
21# nombres de las deps; el importador clasifica (github→git, flat→tarball) y emite la receta.
22json=$(nix eval $NIXFLAGS --json "${NIXPKGS}#${ATTR}" --apply '
23  p: {
24    pname = p.pname or (builtins.parseDrvName p.name).name;
25    version = p.version or (builtins.parseDrvName p.name).version;
26    source = {
27      url = p.src.url or (if (p.src.urls or []) == [] then "" else builtins.head p.src.urls);
28      output_hash = p.src.outputHash or "";
29      output_hash_mode = p.src.outputHashMode or "flat";
30    };
31    configure_flags = p.configureFlags or [];
32    build_inputs = builtins.filter (s: s != "") (map (x: x.pname or x.name or "") (p.buildInputs or []));
33    native_build_inputs = builtins.filter (s: s != "") (map (x: x.pname or x.name or "") (p.nativeBuildInputs or []));
34    # Rust: buildRustPackage setea cargoDeps ⇒ activa la plantilla Cargo del importador.
35    is_rust = builtins.hasAttr "cargoDeps" p;
36    # Go: buildGoModule setea vendorHash (goModules en versiones viejas) ⇒ plantilla Go.
37    is_go = builtins.hasAttr "vendorHash" p || builtins.hasAttr "goModules" p;
38    main_program = p.meta.mainProgram or p.pname or "";
39  }')
40
41printf '%s' "$json" | $HAMMER import-nix -