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 1433Shell 145Markdown 87Rust 852973 Sutichaykuna

⎇ 13769aa7b41bf597cf8d0ff840d0ecfae76fdb5c docs/state/distro-huecos.json JSON · 1383 siq'ikuna · 26.3 KB Ñawpa willay ch'uya

fix(distro): el muro de fcitx5 se derribó — dejarlo anotado ya es falso a6253e34c · Sergio ·

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