commit cb763040fa838bc539204b648b8769dfd2ba972b from: ale date: Fri Jul 31 01:32:37 2026 UTC Agrega wrapper bin/ctl para comando global (evita el bug de pipx en nixpkgs) pipx no está en el cache binario de nixpkgs para este snapshot — su propio test suite tiene un bug (parametrize mal armado en test_inject.py) que rompe el build desde cero. Y aunque se lo evite, un pipx install plano tampoco alcanzaría: la app necesita libstdc++.so.6 (numpy, para el renderizado de LaTeX del preview) que en NixOS solo está en el LD_LIBRARY_PATH que arma el shellHook del flake. bin/ctl es un wrapper chico que resuelve su propia ubicación (para andar symlinkeado desde ~/.local/bin), se para en el directorio del repo, y delega todo a 'nix develop . --command ctl' — reusa el flake real en vez de duplicar su lógica, así que no se puede desincronizar. Actualiza el README con la instalación (symlink en vez de pipx) y el estado real del proyecto (menú de dos niveles, eliminar, preview LaTeX/imágenes). commit - 50855c87a04309240229d68af9ce3ce5bab7faf2 commit + cb763040fa838bc539204b648b8769dfd2ba972b blob - 66e57bc2c10ac49bd82035c108a8988c79bc7773 blob + 9d387d5fbfcfcc3d3126074e55cf23ff42c83352 --- README.md +++ README.md @@ -20,28 +20,40 @@ sitio sobre el que trabaja. Default: `~/projects/websi fijar de forma persistente en `~/.config/nezzontli-ctl/config.json` (`repo_path`) o cambiarla desde la pantalla de Configuración. -## Instalación (una vez validada) +## Instalación (comando `ctl` global, sin `nix develop` a mano) ```bash -cd nezzontli-ctl -pipx install -e . -ctl # ya disponible en cualquier terminal, sin activar nada +ln -s ~/projects/nezzontli-ctl/bin/ctl ~/.local/bin/ctl +ctl # ya disponible en cualquier terminal ``` +`bin/ctl` es un wrapper (`nix develop . --command ctl` parado en el +directorio del repo) — no un `pipx install`. La app necesita +`libstdc++.so.6` (lo pide numpy, dependencia de matplotlib para el +renderizado de LaTeX del preview), y en NixOS esa lib solo está en el +`LD_LIBRARY_PATH` que arma el `shellHook` del flake; un `pipx install` +plano no lo lleva y crashearía al primer `$...$` en el preview. El wrapper +sortea eso reusando siempre el flake real. + ## Estado -Validada de punta a punta contra un clone local descartable (no el repo -real): las 4 pantallas (post, page, album, add-photos), edición con preview -de Markdown en vivo, commit+push real, y confirmado que las fotos quedan -como punteros git-lfs reales (no blobs crudos). Pantalla de configuración -(animal de cowsay, ruta del repo) también probada. Editar entradas/álbumes -existentes también probado. +Menú de dos niveles: **Crear nuevo…** (post / página en un proyecto / +álbum) y **Editar existente…** (post / página extra de un proyecto / +álbum / agregar fotos a un álbum), más Configuración. Cada flujo de +edición tiene botón "Eliminar" (confirmación simple, borra del disco y +pushea). Validado contra un clone local descartable (bare repo como +origin) para los tres borrados: se confirma qué se borra del disco, el +commit y el push al origin. -El preview del editor, además de Markdown, renderiza fórmulas LaTeX (subset -mathtext de matplotlib) como imagen y muestra las imágenes referenciadas -—locales del repo (`![]()`, shortcodes `photo()`/`gallery()` de Zola) o -remotas por URL (shortcode `image()`)— usando el protocolo de gráficos de -la terminal (requiere Kitty, iTerm2 o soporte Sixel; si no, cae a texto). +El preview del editor, además de Markdown, renderiza fórmulas en bloque +(`$$...$$`) como imagen (subset mathtext de matplotlib, fondo transparente) +y aproxima el LaTeX inline (`$...$`) a texto Unicode en el lugar (no rompe +el párrafo). Muestra imágenes referenciadas —locales del repo (`![]()`, +shortcodes `photo()`/`gallery()` de Zola) o remotas por URL (shortcode +`image()`)— usando el protocolo de gráficos de la terminal (Kitty, Sixel o +half-cell según detección; si no hay terminal real, cae a texto). El +scroll del editor y el preview están sincronizados por línea de origen. -Todavía no reemplaza a `website/scripts/ctl.py` en el uso diario — eso -queda a decisión de Ale, una vez que la pruebe él mismo contra el repo real. +Probado contra el repo real de nezzontli.xyz en uso diario. Queda a +decisión de Ale cuándo retirar `website/scripts/ctl.py` (el script viejo, +todavía intacto) y si integrar esta herramienta a su config de NixOS. blob - /dev/null blob + b27c7cf41402fd46883b5289b4c35bdf021e6d97 (mode 755) --- /dev/null +++ bin/ctl @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# Wrapper para correr `ctl` desde cualquier lado sin activar `nix develop` +# a mano cada vez. Por qué existe: la app necesita libstdc++.so.6 (lo pide +# numpy, dependencia de matplotlib para el renderizado de LaTeX del +# preview) — en NixOS esa lib solo está en el LD_LIBRARY_PATH que arma el +# shellHook del flake, así que no alcanza con activar el venv a mano desde +# afuera de "nix develop". +# +# Instalación (una vez): +# ln -s ~/projects/nezzontli-ctl/bin/ctl ~/.local/bin/ctl +# +# Después, "ctl" desde cualquier lado hace `nix develop` (crea/activa el +# venv si hace falta, arregla LD_LIBRARY_PATH) y corre la app adentro. + +set -euo pipefail + +script_path="${BASH_SOURCE[0]}" +if command -v readlink >/dev/null 2>&1; then + script_path="$(readlink -f "$script_path")" +fi +repo_dir="$(cd "$(dirname "$script_path")/.." && pwd)" + +# El shellHook del flake crea/usa ./.venv relativo al directorio ACTUAL, +# no al del flake — hay que pararse ahí antes de entrar, si no +# "pip install -e ." intenta instalar desde donde se invocó "ctl". +cd "$repo_dir" +exec nix develop . --command ctl "$@"