Sobre o projeto
hana (花) é um gerenciador de janelas X11 em desenvolvimento inicial escrito em Zig, construído em torno de modularidade, flexibilidade e configuração confortável. Ele suporta tanto paradigmas de tiling dinâmico quanto de janelas flutuantes, e inclui sua própria barra opcional integrada ao WM. Nenhum recurso além do núcleo é estritamente necessário: subsistemas e seus módulos podem ser deletados do código-fonte e o projeto recompilado em um binário diferente.
A modularidade é a prioridade máxima declarada. A lógica opcional vive em seus próprios arquivos, e o núcleo se adapta à presença ou ausência de subsistemas por meio de contratos abertos (Surfaces, WindowModule, Segment, Layout) e registros gerados na compilação, de modo que o núcleo nunca importa um módulo opcional pelo nome. Deletar um módulo encurta um array em vez de deixar stubs. Modelos prontos sob dev/plugin-template/ cobrem novos layouts de tiling, subsistemas de janela e segmentos de barra, e são compilados contra os contratos por zig build check.
Os recursos de gerenciamento de janelas incluem layouts de tiling (master-stack, monocle, grid, fibonacci, scroll, leaf, alguns com variantes), alternâncias de tiling/flutuante por janela e regras de flutuação, tela cheia e minimização, workspaces com marcação e fixação, regras de janela por programa e por workspace, e posicionamento por arrastar e soltar com snapping. A barra oferece widgets como workspaces, título, indicadores de layout, relógio, status do sistema e controles deslizantes de volume/brilho, além de um carrossel de títulos e um prompt de comando inline com movimentos vim-modais.
A configuração usa TOML com hot-reload, incluindo hot-reload binário que preserva a sessão X existente. A configuração pode ser dividida em vários arquivos que são unidos automaticamente; uma configuração funcional e temas intercambiáveis sob config/themes/ são a divisão padrão. Os bindings suportam expansão de glob, teclas com faixas, arrays de múltiplas ações, bindings de mouse e substituição de placeholders. O escalonamento é consciente de DPI.
A integração de sessão cobre cooperação EWMH/ICCCM, persistência de janelas entre reinicializações, um re-exec limpo, dumps de backtrace de crash em SIGUSR2 e detecção de taxa de atualização do monitor via RandR. O controle de brilho escreve através de sysfs quando regras udev e associação ao grupo de vídeo são configuradas, caso contrário, recorre a um subprocesso throttled de brightnessctl.
Os requisitos de compilação são Zig 0.16.0, um servidor X, libxcb com extensões randr/XKB, xcb-util-cursor, xcb-util-keysyms, xkbcommon e xkbcommon-x11, além de cairo e pango/pangocairo. Eles são vinculados incondicionalmente, então cabeçalhos de desenvolvimento são necessários mesmo se a barra for removida. A instalação é essencialmente zig build; comandos de pacotes de distribuição são fornecidos para Ubuntu/Debian, Arch e Fedora.
As ferramentas de desenvolvimento incluem verificações de camadas, uma matriz de modularidade que compila cada módulo isoladamente, benchmarks de latência opcionais, cenários X de ponta a ponta com snapshots dourados sob dev/harness/ e testes unitários sob src/test/. O README observa que o projeto está em uma fase inicial, com um branch main estável planejado e trabalho de ponta em dev. Um roadmap lista suporte a barra externa, uma grafia de proporção invertida, propriedades de janela mais refinadas por regras e polimento de escalonamento por monitor como ainda não enviados.
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.