Об этом проекте

hana (花) — это X11-окно-менеджер на ранней стадии разработки, написанный на Zig и построенный вокруг модульности, гибкости и удобной настройки. Он поддерживает как динамический тайлинг, так и плавающие окна, а также поставляется с собственным опциональным баром, интегрированным в WM. Ни одна функция, помимо ядра, не является строго обязательной: подсистемы и их модули можно удалить из исходного кода, и проект перекомпилируется в другой бинарник. Модульность заявлена как главный приоритет. Опциональная логика находится в собственных файлах, а ядро адаптируется к наличию или отсутствию подсистем через открытые контракты (Surfaces, WindowModule, Segment, Layout) и генерируемые при сборке реестры, поэтому ядро никогда не импортирует опциональный модуль по имени. Удаление модуля сокращает массив, а не оставляет заглушки. Готовые шаблоны в dev/plugin-template/ покрывают новые тайлинг-раскладки, оконные подсистемы и сегменты бара и компилируются против контрактов с помощью zig build check. Функции управления окнами включают тайлинг-раскладки (master-stack, monocle, grid, fibonacci, scroll, leaf, некоторые с вариантами), переключение тайлинг/плавающее окно для отдельных окон и правила для плавающих окон, полноэкранный режим и сворачивание, рабочие столы с тегами и закреплением, правила для окон по программам и рабочим столам, а также перетаскивание с привязкой. Бар предлагает виджеты: рабочие столы, заголовок, индикаторы раскладки, часы, статус системы, ползунки громкости и яркости, карусель заголовков и встроенную командную строку с vim-модальными движениями. Конфигурация использует TOML с горячей перезагрузкой, включая горячую перезагрузку бинарника, сохраняющую текущую X-сессию. Конфиг можно разбивать на несколько файлов, которые объединяются автоматически; функциональный конфиг и сменные темы в config/themes/ — стандартное разделение. Биндинги поддерживают glob-расширение, диапазоны клавиш, массивы действий, мышиные биндинги и подстановку плейсхолдеров. Масштабирование учитывает DPI. Интеграция с сессией охватывает сотрудничество с EWMH/ICCCM, сохранение окон между перезапусками, чистый re-exec, дампы backtrace при SIGUSR2 и определение частоты обновления монитора через RandR. Управление яркостью пишет через sysfs, если настроены udev-правила и членство в группе video, иначе использует throttled subprocess brightnessctl. Требования к сборке: Zig 0.16.0, X-сервер, libxcb с расширениями randr/XKB, xcb-util-cursor, xcb-util-keysyms, xkbcommon и xkbcommon-x11, а также cairo и pango/pangocairo. Они линкуются безусловно, поэтому заголовочные файлы нужны даже при удалении бара. Установка — по сути zig build; команды для дистрибутивов даны для Ubuntu/Debian, Arch и Fedora. Инструменты разработки включают проверки слоёв, матрицу модульности, собирающую каждый модуль изолированно, опциональные бенчмарки задержки, end-to-end X-сценарии с golden-снимками в dev/harness/ и юнит-тесты в src/test/. В README отмечается, что проект на ранней стадии, планируется стабильная ветка main и экспериментальная работа в dev. В дорожной карте перечислены ещё не реализованные: поддержка внешнего бара, исправление написания reversed ratio, более тонкие свойства окон по правилам и полировка масштабирования на монитор.