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…
medición: fcitx5 no falta por la receta — falta una decisión de arquitectura del corpus
1{
2 "categorias": [
3 {
4 "categoria": "escritura del mundo",
5 "faltan": [
6 "noto-fonts-extra"
7 ],
8 "items": [
9 {
10 "estado": "tiene-y-viaja",
11 "nombre": "noto-fonts-cjk",
12 "parientes": []
13 },
14 {
15 "estado": "tiene-y-viaja",
16 "nombre": "noto-fonts-emoji",
17 "parientes": []
18 },
19 {
20 "estado": "tiene-y-viaja",
21 "nombre": "noto-fonts",
22 "parientes": []
23 },
24 {
25 "estado": "falta",
26 "nombre": "noto-fonts-extra",
27 "parientes": [
28 "noto-fonts",
29 "noto-fonts-cjk",
30 "noto-fonts-emoji"
31 ],
32 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
33 }
34 ],
35 "porque": "las únicas fuentes del corpus son dejavu y su nerd: sin estas, la distro muestra cuadraditos en chino, japonés, coreano, árabe, hindi, tailandés y emoji"
36 },
37 {
38 "categoria": "escribir en esos idiomas",
39 "faltan": [
40 "anthy",
41 "libpinyin",
42 "hangul",
43 "rime"
44 ],
45 "items": [
46 {
47 "estado": "tiene-sin-viajar",
48 "muro": "corpus-estatico-sin-pic",
49 "muro_porque": "MEDIDO el 2026-10-19 construyéndolo cinco veces. La receta está escrita, el configure pasa limpio y el compilador termina: muere al ENLAZAR, con **7365** errores `relocation … recompile with -fPIC`. fcitx5 produce OCHO bibliotecas compartidas (libFcitx5Utils/Core/Config + los addons classicui, clipboard, dbus, dbusfrontend, emoji) porque sus métodos de entrada se cargan con dlopen; y este corpus es ESTÁTICO-PRIMERO Y SIN PIC, así que un `.a` del catálogo no entra en un `.so`. Dos se resolvieron en el camino —`libuv` PIC-ificado (radio 1) y `ENABLE_LIBUUID=Off` por el fallback del kernel (util-linux es radio 79)— y el tercero no se puede esquivar: `libpng16.a` + `libfreetype.a` + `libfontconfig.a` los pide `libclassicui.so`, que ES la barra de candidatos, o sea la interfaz del IME. ⇒ NO falta una receta: falta decidir si el trío de fuentes se publica con `--with-pic`. Coste medido: **40 recetas en la unión de sus dependientes transitivos** (no 133: se solapan) y las CINCO imágenes de escritorio rearman. Es la misma decisión que el operador tomó en NEGATIVO para `libpng` el 2026-08-21 —«es estático por diseño; eso es arquitectura del corpus»—, pero el contexto cambió: allá era para salvar UN `.so` que no se quería; acá desbloquea una capacidad entera y a cualquier app futura que necesite enlazar desde un `.so`.",
50 "nombre": "fcitx5",
51 "parientes": []
52 },
53 {
54 "estado": "tiene-y-viaja",
55 "nombre": "ibus",
56 "parientes": []
57 },
58 {
59 "estado": "falta",
60 "nombre": "anthy",
61 "parientes": []
62 },
63 {
64 "estado": "falta",
65 "nombre": "libpinyin",
66 "parientes": []
67 },
68 {
69 "estado": "falta",
70 "nombre": "hangul",
71 "parientes": []
72 },
73 {
74 "estado": "falta",
75 "nombre": "rime",
76 "parientes": []
77 }
78 ],
79 "porque": "una fuente deja LEER; para ESCRIBIR hace falta un método de entrada"
80 },
81 {
82 "categoria": "accesibilidad",
83 "faltan": [
84 "orca",
85 "speech-dispatcher",
86 "espeak-ng",
87 "brltty"
88 ],
89 "items": [
90 {
91 "estado": "falta",
92 "nombre": "orca",
93 "parientes": []
94 },
95 {
96 "estado": "falta",
97 "nombre": "speech-dispatcher",
98 "parientes": []
99 },
100 {
101 "estado": "falta",
102 "nombre": "espeak-ng",
103 "parientes": []
104 },
105 {
106 "estado": "falta",
107 "nombre": "brltty",
108 "parientes": []
109 }
110 ],
111 "porque": "sin lector de pantalla ni voz la distro es inusable para quien no ve"
112 },
113 {
114 "categoria": "terminales populares",
115 "faltan": [
116 "kitty",
117 "alacritty",
118 "wezterm",
119 "ghostty",
120 "xterm"
121 ],
122 "items": [
123 {
124 "estado": "falta",
125 "muro": "sin-opengl-de-escritorio",
126 "muro_porque": "setup.py:804 hace pkg_config('gl', '--libs') y data-types.h:25 exige OpenGL >= 3.x core. Medido en el store: NADIE publica `gl.pc` ni `libGL.so` — mesa da egl.pc, glesv2.pc, gbm.pc y dri.pc; libglvnd da opengl.pc con libOpenGL.so/libGLdispatch.so y sólo viaja en escritorio-kde. Compilar no basta: gl.c:68 aborta en runtime con «OpenGL version is X.Y, version >= 3.3 required for kitty». Mismo muro que OBS.",
127 "nombre": "kitty",
128 "parientes": []
129 },
130 {
131 "estado": "falta",
132 "nombre": "alacritty",
133 "parientes": []
134 },
135 {
136 "estado": "falta",
137 "nombre": "wezterm",
138 "parientes": []
139 },
140 {
141 "estado": "falta",
142 "nombre": "ghostty",
143 "parientes": []
144 },
145 {
146 "estado": "falta",
147 "nombre": "xterm",
148 "parientes": []
149 }
150 ],
151 "porque": "`foot` está y alcanza; pero quien llega de otra distro busca el suyo por nombre, y el doc 20 §II.2 ya los listaba como «barato». kitty: 13 de sus 14 deps ya están en el catálogo (falta librsync, opcional)"
152 },
153 {
154 "categoria": "editores",
155 "faltan": [
156 "neovim",
157 "emacs"
158 ],
159 "items": [
160 {
161 "estado": "falta",
162 "nombre": "neovim",
163 "parientes": [
164 "vim"
165 ],
166 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
167 },
168 {
169 "estado": "falta",
170 "nombre": "emacs",
171 "parientes": []
172 },
173 {
174 "estado": "tiene-y-viaja",
175 "nombre": "micro",
176 "parientes": []
177 },
178 {
179 "estado": "tiene-sin-viajar",
180 "nombre": "kakoune",
181 "parientes": []
182 },
183 {
184 "estado": "tiene-y-viaja",
185 "nombre": "nano",
186 "parientes": []
187 }
188 ],
189 "porque": "`vim` y `helix` están. ⚠ Existe `bob-nvim` —el GESTOR DE VERSIONES de neovim— y no existe neovim: el conductor sin el motor, como `crun` sin podman"
190 },
191 {
192 "categoria": "shells",
193 "faltan": [
194 "fish"
195 ],
196 "items": [
197 {
198 "estado": "falta",
199 "nombre": "fish",
200 "parientes": []
201 },
202 {
203 "estado": "tiene-y-viaja",
204 "nombre": "elvish",
205 "parientes": []
206 }
207 ],
208 "porque": "bash, zsh y nushell están"
209 },
210 {
211 "categoria": "lanzador, notificaciones y bloqueo",
212 "faltan": [
213 "rofi",
214 "wofi",
215 "bemenu",
216 "tofi",
217 "swaync",
218 "gtklock",
219 "waylock"
220 ],
221 "items": [
222 {
223 "estado": "falta",
224 "nombre": "rofi",
225 "parientes": []
226 },
227 {
228 "estado": "falta",
229 "nombre": "wofi",
230 "parientes": []
231 },
232 {
233 "estado": "tiene-y-viaja",
234 "nombre": "fuzzel",
235 "parientes": []
236 },
237 {
238 "estado": "falta",
239 "nombre": "bemenu",
240 "parientes": []
241 },
242 {
243 "estado": "falta",
244 "nombre": "tofi",
245 "parientes": []
246 },
247 {
248 "estado": "tiene-sin-viajar",
249 "nombre": "mako",
250 "parientes": []
251 },
252 {
253 "estado": "tiene-y-viaja",
254 "nombre": "dunst",
255 "parientes": []
256 },
257 {
258 "estado": "falta",
259 "nombre": "swaync",
260 "parientes": [
261 "sway"
262 ],
263 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
264 },
265 {
266 "estado": "tiene-y-viaja",
267 "nombre": "swaylock",
268 "parientes": []
269 },
270 {
271 "estado": "falta",
272 "nombre": "gtklock",
273 "parientes": []
274 },
275 {
276 "estado": "falta",
277 "nombre": "waylock",
278 "parientes": []
279 }
280 ],
281 "porque": "el esqueleto de un escritorio Wayland que no sea GNOME/KDE: sin lanzador no se abre nada"
282 },
283 {
284 "categoria": "audio de escritorio",
285 "faltan": [
286 "pavucontrol",
287 "pamixer",
288 "playerctl",
289 "easyeffects",
290 "wiremix"
291 ],
292 "items": [
293 {
294 "estado": "falta",
295 "nombre": "pavucontrol",
296 "parientes": []
297 },
298 {
299 "estado": "falta",
300 "nombre": "pamixer",
301 "parientes": []
302 },
303 {
304 "estado": "falta",
305 "nombre": "playerctl",
306 "parientes": []
307 },
308 {
309 "estado": "falta",
310 "nombre": "easyeffects",
311 "parientes": []
312 },
313 {
314 "estado": "falta",
315 "nombre": "wiremix",
316 "parientes": [
317 "wire"
318 ],
319 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
320 }
321 ],
322 "porque": "PipeWire suena y no hay con qué subirle el volumen desde una ventana"
323 },
324 {
325 "categoria": "capturas y portapapeles",
326 "faltan": [
327 "satty",
328 "swappy",
329 "flameshot",
330 "kanshi"
331 ],
332 "items": [
333 {
334 "estado": "falta",
335 "nombre": "satty",
336 "parientes": []
337 },
338 {
339 "estado": "falta",
340 "nombre": "swappy",
341 "parientes": []
342 },
343 {
344 "estado": "falta",
345 "nombre": "flameshot",
346 "parientes": []
347 },
348 {
349 "estado": "tiene-y-viaja",
350 "nombre": "wtype",
351 "parientes": []
352 },
353 {
354 "estado": "falta",
355 "nombre": "kanshi",
356 "parientes": []
357 }
358 ],
359 "porque": "grim, slurp, wl-clipboard y cliphist ya están"
360 },
361 {
362 "categoria": "visores de imagen",
363 "faltan": [
364 "imv",
365 "nsxiv",
366 "feh",
367 "loupe",
368 "eog"
369 ],
370 "items": [
371 {
372 "estado": "falta",
373 "nombre": "imv",
374 "parientes": []
375 },
376 {
377 "estado": "falta",
378 "nombre": "nsxiv",
379 "parientes": []
380 },
381 {
382 "estado": "falta",
383 "nombre": "feh",
384 "parientes": []
385 },
386 {
387 "estado": "falta",
388 "nombre": "loupe",
389 "parientes": []
390 },
391 {
392 "estado": "falta",
393 "nombre": "eog",
394 "parientes": []
395 }
396 ],
397 "porque": "ninguno: una foto no se abre"
398 },
399 {
400 "categoria": "archivos comprimidos ajenos",
401 "faltan": [
402 "unzip",
403 "zip",
404 "p7zip",
405 "7zip",
406 "unrar"
407 ],
408 "items": [
409 {
410 "cubierto_por": "libarchive",
411 "cubierto_porque": "bsdunzip -o x.zip extrae y conserva el árbol — probado con un zip deflate con subdirectorio el 2026-10-19",
412 "estado": "falta",
413 "nombre": "unzip",
414 "parientes": []
415 },
416 {
417 "cubierto_por": "libarchive",
418 "cubierto_porque": "bsdtar -a -cf x.zip … crea un zip que python zipfile lee y verifica — probado el 2026-10-19",
419 "estado": "falta",
420 "nombre": "zip",
421 "parientes": []
422 },
423 {
424 "estado": "falta",
425 "nombre": "p7zip",
426 "parientes": []
427 },
428 {
429 "estado": "falta",
430 "nombre": "7zip",
431 "parientes": []
432 },
433 {
434 "estado": "falta",
435 "nombre": "unrar",
436 "parientes": []
437 }
438 ],
439 "porque": "⚠ EL ARGUMENTO DE ESTA FILA ERA FALSO Y LO MEDÍ DESPUÉS: decía «no se puede abrir un .zip» porque `libzip` es una biblioteca y no el comando. Cierto para libzip — y falso como conclusión: `libarchive` estaba SELLADO y trae `bsdunzip`/`bsdtar`, verificados con un zip real en lectura Y escritura. Se declaró en `cli` el 2026-10-19. Lo que falta son los ALIAS (`unzip`, `zip`) para que un script ajeno que los invoque no falle, y 7z/rar sin medir"
440 },
441 {
442 "categoria": "imprimir de verdad",
443 "faltan": [
444 "cups-filters",
445 "ghostscript",
446 "gutenprint",
447 "hplip"
448 ],
449 "items": [
450 {
451 "estado": "tiene-y-viaja",
452 "nombre": "cups",
453 "parientes": []
454 },
455 {
456 "estado": "falta",
457 "nombre": "cups-filters",
458 "parientes": [
459 "cups"
460 ],
461 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
462 },
463 {
464 "estado": "falta",
465 "nombre": "ghostscript",
466 "parientes": []
467 },
468 {
469 "estado": "falta",
470 "nombre": "gutenprint",
471 "parientes": []
472 },
473 {
474 "estado": "falta",
475 "nombre": "hplip",
476 "parientes": []
477 }
478 ],
479 "porque": "cups solo no imprime: los filtros y los drivers son otro paquete"
480 },
481 {
482 "categoria": "escanear",
483 "faltan": [
484 "sane-backends",
485 "simple-scan"
486 ],
487 "items": [
488 {
489 "estado": "falta",
490 "nombre": "sane-backends",
491 "parientes": []
492 },
493 {
494 "estado": "falta",
495 "nombre": "simple-scan",
496 "parientes": [
497 "simple-http-server"
498 ],
499 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
500 }
501 ],
502 "porque": "ningún camino hoy"
503 },
504 {
505 "categoria": "documentos técnicos",
506 "faltan": [
507 "texlive",
508 "pandoc",
509 "groff"
510 ],
511 "items": [
512 {
513 "estado": "falta",
514 "nombre": "texlive",
515 "parientes": []
516 },
517 {
518 "estado": "falta",
519 "nombre": "pandoc",
520 "parientes": []
521 },
522 {
523 "estado": "tiene-y-viaja",
524 "nombre": "typst",
525 "parientes": []
526 },
527 {
528 "estado": "falta",
529 "nombre": "groff",
530 "parientes": []
531 }
532 ],
533 "porque": "nada que componga un PDF desde texto marcado"
534 },
535 {
536 "categoria": "páginas de manual",
537 "faltan": [
538 "man-pages",
539 "texinfo"
540 ],
541 "items": [
542 {
543 "estado": "falta",
544 "nombre": "man-pages",
545 "parientes": [
546 "mandoc",
547 "mandown",
548 "mani"
549 ],
550 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
551 },
552 {
553 "estado": "falta",
554 "nombre": "texinfo",
555 "parientes": []
556 }
557 ],
558 "porque": "`mandoc` LEE man; falta el CONTENIDO y el formateador de info"
559 },
560 {
561 "categoria": "virtualización",
562 "faltan": [
563 "qemu",
564 "libvirt",
565 "virt-manager"
566 ],
567 "items": [
568 {
569 "estado": "falta",
570 "nombre": "qemu",
571 "parientes": []
572 },
573 {
574 "estado": "falta",
575 "nombre": "libvirt",
576 "parientes": []
577 },
578 {
579 "estado": "falta",
580 "nombre": "virt-manager",
581 "parientes": []
582 }
583 ],
584 "porque": "ni invitado ni anfitrión: no se puede probar la propia ISO sin salir"
585 },
586 {
587 "categoria": "contenedores",
588 "faltan": [
589 "podman",
590 "docker",
591 "buildah",
592 "flatpak",
593 "distrobox"
594 ],
595 "items": [
596 {
597 "estado": "falta",
598 "nombre": "podman",
599 "parientes": []
600 },
601 {
602 "estado": "falta",
603 "nombre": "docker",
604 "parientes": []
605 },
606 {
607 "estado": "falta",
608 "nombre": "buildah",
609 "parientes": []
610 },
611 {
612 "estado": "falta",
613 "nombre": "flatpak",
614 "parientes": []
615 },
616 {
617 "estado": "falta",
618 "nombre": "distrobox",
619 "parientes": []
620 }
621 ],
622 "porque": "`crun` está (el motor); falta quien lo conduzca"
623 },
624 {
625 "categoria": "java",
626 "faltan": [
627 "openjdk",
628 "jdk",
629 "temurin"
630 ],
631 "items": [
632 {
633 "estado": "falta",
634 "nombre": "openjdk",
635 "parientes": []
636 },
637 {
638 "estado": "falta",
639 "nombre": "jdk",
640 "parientes": []
641 },
642 {
643 "estado": "falta",
644 "nombre": "temurin",
645 "parientes": []
646 }
647 ],
648 "porque": "un ecosistema entero queda fuera sin una JVM"
649 },
650 {
651 "categoria": "bases de datos de servidor",
652 "faltan": [
653 "postgresql",
654 "mariadb",
655 "redis"
656 ],
657 "items": [
658 {
659 "estado": "falta",
660 "nombre": "postgresql",
661 "parientes": []
662 },
663 {
664 "estado": "falta",
665 "nombre": "mariadb",
666 "parientes": []
667 },
668 {
669 "estado": "falta",
670 "nombre": "redis",
671 "parientes": []
672 },
673 {
674 "estado": "tiene-y-viaja",
675 "nombre": "valkey",
676 "parientes": []
677 }
678 ],
679 "porque": "sqlite está; un servicio con varios clientes no"
680 },
681 {
682 "categoria": "depurar y medir",
683 "faltan": [
684 "gdb",
685 "lldb",
686 "valgrind",
687 "ltrace",
688 "perf",
689 "patchelf"
690 ],
691 "items": [
692 {
693 "estado": "falta",
694 "nombre": "gdb",
695 "parientes": []
696 },
697 {
698 "estado": "falta",
699 "nombre": "lldb",
700 "parientes": []
701 },
702 {
703 "estado": "falta",
704 "nombre": "valgrind",
705 "parientes": []
706 },
707 {
708 "estado": "falta",
709 "nombre": "ltrace",
710 "parientes": []
711 },
712 {
713 "estado": "falta",
714 "nombre": "perf",
715 "parientes": []
716 },
717 {
718 "estado": "falta",
719 "nombre": "patchelf",
720 "parientes": [
721 "patch"
722 ],
723 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
724 }
725 ],
726 "porque": "se construye la distro entera y no hay con qué mirar un core"
727 },
728 {
729 "categoria": "discos y salud del equipo",
730 "faltan": [
731 "smartmontools",
732 "nvme-cli",
733 "hdparm",
734 "gparted"
735 ],
736 "items": [
737 {
738 "estado": "falta",
739 "nombre": "smartmontools",
740 "parientes": []
741 },
742 {
743 "estado": "falta",
744 "nombre": "nvme-cli",
745 "parientes": []
746 },
747 {
748 "estado": "falta",
749 "nombre": "hdparm",
750 "parientes": []
751 },
752 {
753 "estado": "falta",
754 "nombre": "gparted",
755 "parientes": [
756 "parted"
757 ],
758 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
759 }
760 ],
761 "porque": "nada que avise de un disco muriéndose"
762 },
763 {
764 "categoria": "otros lenguajes",
765 "faltan": [
766 "deno",
767 "bun",
768 "ruby",
769 "php",
770 "julia",
771 "ghc",
772 "ocaml",
773 "elixir",
774 "erlang"
775 ],
776 "items": [
777 {
778 "estado": "tiene-sin-viajar",
779 "nombre": "nodejs",
780 "parientes": []
781 },
782 {
783 "estado": "falta",
784 "nombre": "deno",
785 "parientes": []
786 },
787 {
788 "estado": "falta",
789 "nombre": "bun",
790 "parientes": []
791 },
792 {
793 "estado": "falta",
794 "nombre": "ruby",
795 "parientes": []
796 },
797 {
798 "estado": "falta",
799 "nombre": "php",
800 "parientes": []
801 },
802 {
803 "estado": "falta",
804 "nombre": "julia",
805 "parientes": []
806 },
807 {
808 "estado": "falta",
809 "nombre": "ghc",
810 "parientes": []
811 },
812 {
813 "estado": "falta",
814 "nombre": "ocaml",
815 "parientes": []
816 },
817 {
818 "estado": "falta",
819 "nombre": "elixir",
820 "parientes": []
821 },
822 {
823 "estado": "falta",
824 "nombre": "erlang",
825 "parientes": []
826 }
827 ],
828 "porque": "python3, lua, go, rust y perl están. ⚠ `zig` NO es receta: vive como artefacto `seed-zig` fuera del catálogo, y es el compilador de TODO el corpus"
829 },
830 {
831 "categoria": "empaquetadores de python",
832 "faltan": [
833 "pipx",
834 "poetry"
835 ],
836 "items": [
837 {
838 "estado": "falta",
839 "nombre": "pipx",
840 "parientes": []
841 },
842 {
843 "estado": "tiene-y-viaja",
844 "nombre": "uv",
845 "parientes": []
846 },
847 {
848 "estado": "falta",
849 "nombre": "poetry",
850 "parientes": []
851 }
852 ],
853 "porque": "pip no viaja y no hay forma de instalar una herramienta python"
854 },
855 {
856 "categoria": "construcción C clásica",
857 "faltan": [
858 "autoconf",
859 "automake",
860 "ninja"
861 ],
862 "items": [
863 {
864 "estado": "falta",
865 "nombre": "autoconf",
866 "parientes": []
867 },
868 {
869 "estado": "falta",
870 "nombre": "automake",
871 "parientes": [
872 "make"
873 ],
874 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
875 },
876 {
877 "cubierto_por": "samurai",
878 "cubierto_porque": "MEDIDO: un artefacto vigente instala un binario con ese nombre exacto. Falta la receta propia, no la capacidad",
879 "estado": "falta",
880 "nombre": "ninja",
881 "parientes": []
882 }
883 ],
884 "porque": "⚠ ESTA FILA ES LA MÁS DUDOSA DEL CHECKLIST y conviene que lo diga: cmake, meson, make y samurai existen y NO viajan en ninguna imagen — probablemente a propósito, porque una imagen de producto no se construye a sí misma. La receta de `nodejs` ya tomó esa decisión por escrito para su caso («acá Node es un compilador más, no software que la distro publique»). ⇒ lo que falta acá puede no ser un hueco sino un PERFIL de desarrollo que no existe. Se deja medido y sin declarar. `ninja` además lo instala `samurai` con ese nombre exacto (1.9.0, medido). Y `gcc` está RETENIDO a propósito (sólo `gcc-libs`), `clang` es `clang18`: eso no es hueco, es decisión"
885 },
886 {
887 "categoria": "vpn y red gestionada",
888 "faltan": [
889 "openvpn",
890 "iwd",
891 "nmtui",
892 "impala",
893 "mosh",
894 "sshfs"
895 ],
896 "items": [
897 {
898 "estado": "falta",
899 "nombre": "openvpn",
900 "parientes": []
901 },
902 {
903 "estado": "falta",
904 "nombre": "iwd",
905 "parientes": []
906 },
907 {
908 "estado": "falta",
909 "nombre": "nmtui",
910 "parientes": []
911 },
912 {
913 "estado": "falta",
914 "nombre": "impala",
915 "parientes": []
916 },
917 {
918 "estado": "falta",
919 "nombre": "mosh",
920 "parientes": []
921 },
922 {
923 "estado": "falta",
924 "nombre": "sshfs",
925 "parientes": []
926 }
927 ],
928 "porque": "networkmanager, wireguard-tools y wpa_supplicant están"
929 },
930 {
931 "categoria": "bluetooth usable",
932 "faltan": [
933 "blueman",
934 "bluetuith"
935 ],
936 "items": [
937 {
938 "estado": "falta",
939 "nombre": "blueman",
940 "parientes": []
941 },
942 {
943 "estado": "falta",
944 "nombre": "bluetuith",
945 "parientes": []
946 }
947 ],
948 "porque": "`bluez` viaja; falta con qué emparejar un auricular"
949 },
950 {
951 "categoria": "contraseñas",
952 "faltan": [
953 "keepassxc",
954 "pass"
955 ],
956 "items": [
957 {
958 "estado": "falta",
959 "nombre": "keepassxc",
960 "parientes": []
961 },
962 {
963 "estado": "falta",
964 "nombre": "pass",
965 "parientes": []
966 },
967 {
968 "estado": "tiene-y-viaja",
969 "nombre": "gopass",
970 "parientes": []
971 }
972 ],
973 "porque": "nada: la gente guarda sus claves en un .txt o no usa la distro"
974 },
975 {
976 "categoria": "respaldos",
977 "faltan": [
978 "borgbackup",
979 "rsnapshot"
980 ],
981 "items": [
982 {
983 "estado": "falta",
984 "nombre": "borgbackup",
985 "parientes": []
986 },
987 {
988 "estado": "falta",
989 "nombre": "rsnapshot",
990 "parientes": []
991 }
992 ],
993 "porque": "restic y rclone están"
994 },
995 {
996 "categoria": "descargas y torrent",
997 "faltan": [
998 "aria2",
999 "transmission",
1000 "qbittorrent"
1001 ],
1002 "items": [
1003 {
1004 "estado": "falta",
1005 "nombre": "aria2",
1006 "parientes": []
1007 },
1008 {
1009 "estado": "falta",
1010 "nombre": "transmission",
1011 "parientes": []
1012 },
1013 {
1014 "estado": "falta",
1015 "nombre": "qbittorrent",
1016 "parientes": []
1017 }
1018 ],
1019 "porque": "curl y wget están"
1020 },
1021 {
1022 "categoria": "navegadores",
1023 "faltan": [
1024 "chromium",
1025 "qutebrowser",
1026 "librewolf",
1027 "brave"
1028 ],
1029 "items": [
1030 {
1031 "estado": "falta",
1032 "nombre": "chromium",
1033 "parientes": []
1034 },
1035 {
1036 "estado": "falta",
1037 "nombre": "qutebrowser",
1038 "parientes": []
1039 },
1040 {
1041 "estado": "falta",
1042 "nombre": "librewolf",
1043 "parientes": []
1044 },
1045 {
1046 "estado": "falta",
1047 "nombre": "brave",
1048 "parientes": []
1049 }
1050 ],
1051 "porque": "firefox y atuq están; el motor Blink no tiene ningún camino"
1052 },
1053 {
1054 "categoria": "mensajería",
1055 "faltan": [
1056 "dino",
1057 "gajim",
1058 "element-desktop",
1059 "telegram-desktop",
1060 "signal-desktop"
1061 ],
1062 "items": [
1063 {
1064 "estado": "falta",
1065 "nombre": "dino",
1066 "parientes": []
1067 },
1068 {
1069 "estado": "falta",
1070 "nombre": "gajim",
1071 "parientes": []
1072 },
1073 {
1074 "estado": "falta",
1075 "nombre": "element-desktop",
1076 "parientes": []
1077 },
1078 {
1079 "estado": "falta",
1080 "nombre": "telegram-desktop",
1081 "parientes": []
1082 },
1083 {
1084 "estado": "falta",
1085 "nombre": "signal-desktop",
1086 "parientes": []
1087 }
1088 ],
1089 "porque": "ningún cliente de chat: ni XMPP, ni Matrix, ni los propietarios"
1090 },
1091 {
1092 "categoria": "música",
1093 "faltan": [
1094 "mpd",
1095 "ncmpcpp",
1096 "rhythmbox",
1097 "audacious"
1098 ],
1099 "items": [
1100 {
1101 "estado": "falta",
1102 "nombre": "mpd",
1103 "parientes": []
1104 },
1105 {
1106 "estado": "falta",
1107 "nombre": "ncmpcpp",
1108 "parientes": []
1109 },
1110 {
1111 "estado": "falta",
1112 "nombre": "rhythmbox",
1113 "parientes": []
1114 },
1115 {
1116 "estado": "falta",
1117 "nombre": "audacious",
1118 "parientes": []
1119 }
1120 ],
1121 "porque": "mpv y cmus están para reproducir un fichero; falta biblioteca y daemon"
1122 },
1123 {
1124 "categoria": "video",
1125 "faltan": [
1126 "vlc",
1127 "celluloid",
1128 "totem"
1129 ],
1130 "items": [
1131 {
1132 "estado": "falta",
1133 "nombre": "vlc",
1134 "parientes": []
1135 },
1136 {
1137 "estado": "falta",
1138 "nombre": "celluloid",
1139 "parientes": []
1140 },
1141 {
1142 "estado": "falta",
1143 "nombre": "totem",
1144 "parientes": []
1145 }
1146 ],
1147 "porque": "mpv está"
1148 },
1149 {
1150 "categoria": "imagen y diseño",
1151 "faltan": [
1152 "gimp",
1153 "inkscape",
1154 "krita",
1155 "darktable"
1156 ],
1157 "items": [
1158 {
1159 "estado": "falta",
1160 "nombre": "gimp",
1161 "parientes": []
1162 },
1163 {
1164 "estado": "falta",
1165 "nombre": "inkscape",
1166 "parientes": []
1167 },
1168 {
1169 "estado": "falta",
1170 "nombre": "krita",
1171 "parientes": []
1172 },
1173 {
1174 "estado": "falta",
1175 "nombre": "darktable",
1176 "parientes": []
1177 }
1178 ],
1179 "porque": "⚠ la suite ArtCraft propia cubre esto con 12 apps (photocraft, vectorcraft, …): estos renglones son los nombres AJENOS que alguien busca, no un hueco de capacidad"
1180 },
1181 {
1182 "categoria": "gestores de archivos",
1183 "faltan": [
1184 "thunar",
1185 "ranger"
1186 ],
1187 "items": [
1188 {
1189 "estado": "falta",
1190 "nombre": "thunar",
1191 "parientes": []
1192 },
1193 {
1194 "estado": "falta",
1195 "nombre": "ranger",
1196 "parientes": []
1197 }
1198 ],
1199 "porque": "yazi, nnn, lf, broot y dolphin/nautilus están"
1200 },
1201 {
1202 "categoria": "lectores de PDF",
1203 "faltan": [
1204 "mupdf",
1205 "sioyek",
1206 "evince"
1207 ],
1208 "items": [
1209 {
1210 "estado": "falta",
1211 "nombre": "mupdf",
1212 "parientes": []
1213 },
1214 {
1215 "estado": "falta",
1216 "nombre": "sioyek",
1217 "parientes": []
1218 },
1219 {
1220 "estado": "falta",
1221 "nombre": "evince",
1222 "parientes": []
1223 }
1224 ],
1225 "porque": "zathura y okular están"
1226 },
1227 {
1228 "categoria": "notas",
1229 "faltan": [
1230 "obsidian",
1231 "logseq",
1232 "joplin",
1233 "zettlr"
1234 ],
1235 "items": [
1236 {
1237 "estado": "falta",
1238 "nombre": "obsidian",
1239 "parientes": []
1240 },
1241 {
1242 "estado": "falta",
1243 "nombre": "logseq",
1244 "parientes": []
1245 },
1246 {
1247 "estado": "falta",
1248 "nombre": "joplin",
1249 "parientes": []
1250 },
1251 {
1252 "estado": "falta",
1253 "nombre": "zettlr",
1254 "parientes": []
1255 }
1256 ],
1257 "porque": "ninguno"
1258 },
1259 {
1260 "categoria": "otros compositores Wayland",
1261 "faltan": [
1262 "hyprland",
1263 "river",
1264 "niri",
1265 "labwc",
1266 "wayfire"
1267 ],
1268 "items": [
1269 {
1270 "estado": "falta",
1271 "nombre": "hyprland",
1272 "parientes": []
1273 },
1274 {
1275 "estado": "falta",
1276 "nombre": "river",
1277 "parientes": []
1278 },
1279 {
1280 "estado": "falta",
1281 "nombre": "niri",
1282 "parientes": []
1283 },
1284 {
1285 "estado": "falta",
1286 "nombre": "labwc",
1287 "parientes": [
1288 "lab"
1289 ],
1290 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
1291 },
1292 {
1293 "estado": "falta",
1294 "nombre": "wayfire",
1295 "parientes": []
1296 }
1297 ],
1298 "porque": "hay cinco escritorios (mirada, sway, cosmic, gnome, kde); éstos son los que la gente nombra y no están. Decisión de alcance, no olvido"
1299 },
1300 {
1301 "categoria": "juegos",
1302 "faltan": [
1303 "wine",
1304 "steam",
1305 "gamescope",
1306 "lutris",
1307 "mangohud"
1308 ],
1309 "items": [
1310 {
1311 "estado": "falta",
1312 "nombre": "wine",
1313 "parientes": []
1314 },
1315 {
1316 "estado": "falta",
1317 "nombre": "steam",
1318 "parientes": [
1319 "steam-runtime-sniper",
1320 "steampipe"
1321 ],
1322 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
1323 },
1324 {
1325 "estado": "falta",
1326 "nombre": "gamescope",
1327 "parientes": []
1328 },
1329 {
1330 "estado": "falta",
1331 "nombre": "lutris",
1332 "parientes": []
1333 },
1334 {
1335 "estado": "falta",
1336 "nombre": "mangohud",
1337 "parientes": []
1338 }
1339 ],
1340 "porque": "decisión abierta: arrastra Vulkan, que la distro hoy no publica"
1341 },
1342 {
1343 "categoria": "infra ajena",
1344 "faltan": [
1345 "terraform",
1346 "ansible"
1347 ],
1348 "items": [
1349 {
1350 "estado": "tiene-y-viaja",
1351 "nombre": "kubectl",
1352 "parientes": []
1353 },
1354 {
1355 "estado": "tiene-y-viaja",
1356 "nombre": "helm",
1357 "parientes": []
1358 },
1359 {
1360 "estado": "falta",
1361 "nombre": "terraform",
1362 "parientes": [
1363 "terraform-docs",
1364 "terraform-ls"
1365 ],
1366 "pista": "nombre parecido en el catálogo (verificar, NO es equivalencia)"
1367 },
1368 {
1369 "estado": "falta",
1370 "nombre": "ansible",
1371 "parientes": []
1372 }
1373 ],
1374 "porque": "decisión abierta: son herramientas de operar OTRA cosa"
1375 }
1376 ],
1377 "en_alguna_imagen": 604,
1378 "recetas_alcanzables": 1379,
1379 "resumen": {
1380 "falta": 148,
1381 "tiene-sin-viajar": 4,
1382 "tiene-y-viaja": 18
1383 },
1384 "schema": "takana-censo-distro/1"
1385}