Sobre el proyecto

hana (花) es un gestor de ventanas X11 en desarrollo temprano escrito en Zig, construido en torno a la modularidad, la flexibilidad y una configuración cómoda. Admite tanto paradigmas de mosaico dinámico como de ventanas flotantes, e incluye su propia barra opcional integrada en el WM. Ninguna característica más allá del núcleo es estrictamente necesaria: los subsistemas y sus módulos pueden eliminarse del código fuente y el proyecto recompilarse en un binario diferente. La modularidad es la prioridad principal declarada. La lógica opcional vive en sus propios archivos, y el núcleo se adapta a la presencia o ausencia de subsistemas mediante contratos abiertos (Surfaces, WindowModule, Segment, Layout) y registros generados por la compilación, de modo que el núcleo nunca importa un módulo opcional por nombre. Eliminar un módulo acorta un array en lugar de dejar stubs. Las plantillas drop-in bajo dev/plugin-template/ cubren nuevos diseños de mosaico, subsistemas de ventanas y segmentos de barra, y se compilan contra los contratos mediante zig build check. Las características de gestión de ventanas incluyen diseños de mosaico (master-stack, monocle, grid, fibonacci, scroll, leaf, algunos con variantes), alternancias de mosaico/flotante por ventana y reglas de flotación, pantalla completa y minimización, espacios de trabajo con etiquetado y fijación, reglas de ventanas por programa y por espacio de trabajo, y colocación mediante arrastrar y soltar con ajuste. La barra ofrece widgets como espacios de trabajo, título, indicadores de diseño, reloj, estado del sistema y controles deslizantes de volumen/brillo, además de un carrusel de títulos y un prompt de comandos en línea con movimientos modales de vim. La configuración usa TOML con recarga en caliente, incluida la recarga en caliente del binario que preserva la sesión X existente. La configuración puede dividirse en múltiples archivos que se unen automáticamente; una configuración funcional y temas intercambiables bajo config/themes/ son la división predeterminada. Los enlaces admiten expansión de globs, teclas por rangos, arrays de múltiples acciones, enlaces de ratón y sustitución de marcadores de posición. El escalado tiene en cuenta el DPI. La integración de sesión cubre la cooperación EWMH/ICCCM, la persistencia de ventanas entre reinicios, un re-exec limpio, volcados de backtrace en caso de fallo ante SIGUSR2 y la detección de la frecuencia de refresco del monitor mediante RandR. El control de brillo escribe a través de sysfs cuando se configuran las reglas de udev y la pertenencia al grupo video; de lo contrario, recurre a un subproceso brightnessctl limitado. Los requisitos de compilación son Zig 0.16.0, un servidor X, libxcb con extensiones randr/XKB, xcb-util-cursor, xcb-util-keysyms, xkbcommon y xkbcommon-x11, además de cairo y pango/pangocairo. Estos se enlazan incondicionalmente, por lo que se necesitan los encabezados de desarrollo incluso si se elimina la barra. La instalación es esencialmente zig build; se proporcionan comandos de paquetes de distribución para Ubuntu/Debian, Arch y Fedora. Las herramientas de desarrollo incluyen comprobaciones de capas, una matriz de modularidad que compila cada módulo de forma aislada, benchmarks de latencia opcionales, escenarios X de extremo a extremo con instantáneas doradas bajo dev/harness/ y pruebas unitarias bajo src/test/. El README señala que el proyecto está en una fase temprana, con una rama main estable planificada y trabajo de vanguardia en dev. Una hoja de ruta enumera el soporte de barra externa, una ortografía de ratio invertida, propiedades de ventana más finas dirigidas por reglas y el pulido del escalado por monitor como aún no implementados.