Commits


NOTES.md: tailscale.scm confirmado, carga limpio contra Guix real


NOTES.md: consolida el estado final de esta ronda + pendientes reales


config.scm + home-configuration.scm: validados contra Guix real, resuelven OK Fixes reales encontrados con guix system build / guix home build en la VM (todos confirmados en vivo, no supuestos): - graphics.scm: session-environment-service-type debe extenderse con simple-service, no instanciarse directo ("more than one target service of type 'session-environment'"). - desktop.scm: (gnu packages kde) no existe (-> kde-pim/kde-plasma), polkit-wheel-service ya es un <service> completo (no envolver en `service`), hyprland vive en window-management (wm.scm re-exporta alias deprecado), yazi/zen-browser-bin agregados desde saayix. - home-configuration.scm: python-yubikey-manager (no "yubikey-manager"), fzf vive en (gnu packages terminals) no xdisorg, obsidian en (nongnu packages productivity) no chrome, falta (guix gexp) para plain-file, pipewire requiere home-dbus-service-type explícito. oh-my-zsh/powerlevel10k/ idea-ultimate agregados (abbe/bugchan/small-guix). Ambos "--dry-run" resuelven el grafo completo sin error contra los 9 canales de channels.scm real (incluido guixdots mismo).


Reestructura: ale/ -> guix/ale/ (directory "guix" en .guix-channel) Fix real y definitivo del "Unbound variable: yubikey-manager"/"channel" que venía persiguiendo desde hace varias rondas: hosts/ale/config.scm y home/ale/home-configuration.scm son scripts (no módulos Guile), y `guix pull` escanea CUALQUIER .scm alcanzable desde la raíz del canal como módulo potencial -- documentado en el manual, sección "Package Modules in a Sub-directory": "guix deploy machine configuration files are not valid Guile modules, and treating them as such would make guix pull fail". Restringir el canal a guix/ (donde SÍ viven módulos reales, guix/ale/packages/*.scm y guix/ale/services/*.scm) deja hosts/, home/ y channels.scm fuera del escaneo. channels.scm.example vuelve a llamarse channels.scm ahora que ya no necesita el hack de extensión.


Renombra channels.scm -> channels.scm.example Causa raíz real del "Unbound variable: channel" / "no code for module (channels)" que venía persiguiendo: Guix escanea cualquier .scm suelto en la raíz del repo como módulo potencial DEL canal guixdots. Este archivo no es contenido del canal -- es la lista de canales para invocar `guix pull -C`. Con extensión no-.scm, Guix lo ignora al escanear y el problema desaparece.


channels.scm: agrega use-modules explícito (Guix lo escanea como módulo del canal)


Saca campo (directory ".") de .guix-channel -- no es un campo real


.guix-channel: declara dependencia de nonguix y rosenthal Sin esto, guix pull intenta compilar este canal aislado y falla con "no code for module (nongnu packages nvidia)" -- ale/services/ graphics.scm y tailscale.scm los necesitan. Sintaxis real del manual, sección "Declaring Channel Dependencies".


channels.scm: introduction apunta al commit con .guix-authorizations válido


Corrige formato de .guix-authorizations (version 0, sin anidar)


channels.scm: agrega saayix/abbe/bugchan/small-guix + fix rama guixdots 4 canales de terceros a pedido explícito para tapar huecos puntuales: saayix (yazi, zen-browser-bin), abbe (oh-my-zsh), bugchan (powerlevel10k), small-guix (idea-ultimate, versión vieja ~2023.2). Introductions copiadas del propio channels.scm que publica toys.whereis.social (git.sr.ht/~whereiseveryone/toys). Además: el canal guixdots usa "main", no "master" -- el repo real siempre fue "main" (git init -b main), el error estaba en channels.scm, no en el repo.


channels.scm: usar el mirror público de GitHub + .guix-authorizations Mismo bootstrap que /nixdots (README, "Bootstrap en una PC nueva"): la URL ssh://...tailscale... no es alcanzable desde una VM/PC nueva sin Tailscale ya andando. Introduction real (primer commit + fingerprint de la YubiKey) + .guix-authorizations para que la cadena de autenticación de guix pull funcione de verdad.


slides: árbol completo de módulos Go v2 via guix import, resuelve OK go-crates-slides.scm nuevo: 535 paquetes Go generados en vivo con guix import go -r --pin-versions para las 8 dependencias directas de slides que no estaban ya en el canal oficial con la versión exacta (charm.land/{bubbletea,lipgloss,bubbles,wish,log}/v2, glamour v1.0.0, muesli/termenv v0.16.0, muesli/coral v1.0.0). Encontrados y corregidos varios bugs reales del importador (no del enfoque): #:subdir referenciando un símbolo sin definir en paquetes del monorepo charmbracelet/x (19 casos), licencia unknown-license! sin prefijo/inexistente en esta versión de Guix (3 casos, -> #f), y el más sistemático: nombres de referencia con "-vN-VERSION" que no coinciden ni con el nombre local generado (le falta el infijo vN) ni con el nombre oficial (que NO lleva la versión en el binding) -- resuelto diferenciando ambos casos. También: bubbletea/v2 y bubbles/v2 fallaron la primera corrida por un problema real de red del guest (QEMU -nic user es solo IPv4, el resolver intentaba AAAA y fallaba en vez de caer a IPv4) -- resuelto con sysctl net.ipv6.conf.all.disable_ipv6=1 en el guest. `guix build -L . slides --dry-run` resuelve el grafo completo sin error. No se intentó una build real (fuera del presupuesto de tiempo de esta ronda, igual que librepods).


librepods: árbol completo de 576 crates via guix import, resuelve OK rust-crates.scm nuevo: 576 crate-source generados en vivo con `guix import crate --lockfile=Cargo.lock librepods` contra el Cargo.lock real (kavishdevar/librepods, rama linux/rust). librepods.scm migrado a la convención moderna de Guix (cargo-inputs + define-cargo-inputs, #:cargo-inputs deprecado) y hash real del source (guix hash -rx). `guix build -L . librepods --dry-run` resuelve el grafo completo sin error -- no se intentó una build real (577 crates + iced/wgpu, fuera del presupuesto de tiempo de esta ronda).


clamui y nezzontli-ctl: builds reales verificados en Guix 1.5.0 Ambos compilan y corren de punta a punta dentro de la VM (guix build + smoke test real, no solo evaluación). Hashes reales vía guix download/ guix hash -rx, reemplazando los placeholders. Fixes encontrados en build real, no anticipables sin Guix: falta de gexp/python-build en imports, tres deps propias (cowsay/flatlatex/textual-image) necesitaban su backend declarado como native-input (setuptools o hatchling según el caso), y clamui pineaba 8 de 10 deps a versiones más nuevas que las empaquetadas en Guix -- relajadas con una fase substitute*. librepods.scm: fix de módulos (gexp, sin guix-build-utils inexistente) pero sigue sin los ~577 crates, pendiente de guix import crate -r.


Esqueleto inicial: canal Guix + paquetes personales portados de /nixdots Traducción parcial de la config NixOS real en /nixdots hacia GNU Guix System. Incluye nezzontli-ctl y clamui completos, esqueletos pendientes de slides/librepods (requieren guix import go/crate con Guix real), y notas de investigación sobre PRIME/HDMI, Noctalia->DankMaterialShell, y viabilidad de cada componente (NOTES.md, PENDIENTES.md).