Niti: shell рабочего стола

Не просто панель, а полноценная оболочка: всё, что окружает окна в niri. Написана на нативной Vala и GTK4, создана для ALT Atomic.

Что такое Niti

niri раскладывает окна, но ничего больше не рисует. Всё остальное делает Niti: по роли это то же, что GNOME Shell для GNOME. Панель, лаунчер, поиск, быстрое меню, уведомления, календарь, док и виджеты собраны в один согласованный shell. Он выглядит как остальные приложения GTK и подстраивает цвета под ваши обои.

Название по-русски означает «нити»: ниточки, за которые дёргают нужное в системе. Так пользователь через оболочку управляет системой.

Niti создан сугубо для ALT Atomic и тесно связан с её экосистемой: Atomic Booster, Tuner, ReadySet, Seni. Поддержка других дистрибутивов не планируется.

Как Niti появился

Niti родился как панель на Go в противовес ashell. Но очень быстро перерос панель и стал полноценным решением, а затем полноценным shell: с лаунчером, поиском, быстрым меню, уведомлениями, календарём, доком и макетами окон.

Сегодня Niti полностью реализован на Vala. Go-версия больше не развивается, а продолжает проект репозиторий NitiVala.

Что он умеет

Панель с виджетами

Три зоны: слева, по центру, справа. Состав и порядок виджетов меняются в мастере и в Tuner без правки файлов.

Лаунчер и глобальный поиск

Super+D: приложения, страницы настроек Tuner, пункты Atomic Booster, калькулятор, справка и системные действия в одном поле.

Меню приложений

Super+G: сетка всех установленных приложений со своим порядком значков, папками и живым поиском.

Док

Избранные приложения у края экрана. Край, размер значков, отступы, выравнивание и прозрачность настраиваются.

Быстрое меню

Громкость, микрофон и яркость, Wi-Fi, Bluetooth, «Не беспокоить», ночной свет, тёмный режим, заряд периферии, медиаплеер и список уведомлений.

Уведомления

Встроенный демон уведомлений с группировкой по приложениям, историей и режимом «Не беспокоить».

Календарь

Попап по клику на часы. Дружит с Evolution Data Server: события видны в календаре и точками у часов.

Индикаторы

Всплывающие индикаторы громкости и яркости, меню выключения, скруглённые углы экрана.

Макеты окон

Сохраните расположение окон по столам и применяйте при входе в систему: нужные приложения сами откроются на своих местах.

Тема из обоев

Цвета Material You подбираются из текущих обоев и переключаются вместе со светлым и тёмным режимом системы.

Виджеты панели

Каждый виджет это независимый плагин: его можно включить, отключить, переставить или заменить своим. Здесь все виджеты образа.

Слева

Рабочие столы workspaces

Индикатор столов niri: точки, а активный стол растягивается в «таблетку».

Таскбар tasks

Закреплённые и открытые приложения.

По центру

Часы clock

Время и дата по-русски («Пт 6 Ноя 16:22»). Настраиваются 24-часовой формат, секунды и дата. Точки событий календаря. Клик открывает календарь.

Медиа media

Бегущая строка с текущим треком из любого плеера с поддержкой MPRIS. Длина строки настраивается.

Справа

Горячие клавиши hotkeys

Оверлей со списком сочетаний из конфигурации niri. Тот же файл читает и сам niri, поэтому список всегда точный.

Обновления systeminfo

Версия образа и базы Sisyphus, сколько уязвимостей закрыто, сколько обновлений Flatpak, версии панели и Booster, возраст системы. Из окна открывается Atomic Booster.

Диски disks

Подключённые диски, занятое место и отслеживаемые папки. Данные идут от UDisks2.

Системный монитор vitals

Процессор, видеокарта, память, NVMe, питание, температуры и вентиляторы. Из окна запускаются btop и LACT. Показывает и расход памяти самой панели, а при аномальном росте предупреждает.

Питание power

Переключатель профиля питания (power-profiles-daemon): экономия, баланс, производительность.

Caffeine caffeine

Не гасить экран и не уходить в сон, пока включено. Работает через systemd-inhibit.

Раскладка keyboard

Индикатор текущей раскладки клавиатуры (RU, EN).

Трей tray

Системный трей по стандарту StatusNotifierItem: значки приложений с их меню.

Быстрое меню quickbutton

Группа значков состояния (Wi-Fi, Bluetooth, звук) и кнопка питания. Клик открывает быстрое меню.

Дополнительные

Батарея battery

Заряд отдельным виджетом. Клик открывает подробности. Нужен на ноутбуках.

Запись экрана recording

Запись экрана через wf-recorder. Выключен по умолчанию, включается в настройках панели.

Макеты layouts

Сохранение и применение раскладок окон niri. Макет можно применять автоматически при старте системы.

Заряд периферии peripheria

Заряд клавиатуры, мыши и геймпада. Выключен по умолчанию, также показывается в быстром меню.

Есть и служебный виджет планировщика LAVD (sched_ext), он отключён по умолчанию.

Окна и оверлеи

МодульЧто делает
LauncherЗапуск приложений и глобальный поиск, закреплённые и недавние приложения
Меню приложенийСетка всех приложений со своим порядком, папками и поиском
ДокИзбранные приложения у края экрана (низ, верх, лево, право)
QuickCenterБыстрое меню: заряд периферии, ползунки громкости и яркости, Wi-Fi, Bluetooth, «Не беспокоить», ночной свет, тёмный режим, плеер, уведомления
NotificationsДемон уведомлений (org.freedesktop.Notifications), «Не беспокоить»
OSDИндикаторы громкости и яркости на экране
CalendarКалендарь-попап с интеграцией Evolution Data Server
CornersСкруглённые углы экрана
HotkeysОверлей со списком горячих клавиш niri

Тема и внешний вид

Цветовая схема Material You создаётся из текущих обоев (утилитой matugen) и переключается вместе с системным светлым и тёмным режимом. Те же цвета подхватывает экран входа Seni.

Стили написаны на SCSS и компилируются на лету: поменяли файл в ~/.config/niti-vala/styles/, и оформление обновилось без пересборки.

Как настроить

  • В мастере первой настройки: какие виджеты показать, порядок по зонам, тип и цвет панели, док и сетка приложений.
  • В Tuner: страницы «Настройки панели», «Быстрое меню», «Меню питания», «Уведомления», «Поиск», «Макеты».
  • В файлах: настройки лежат в ~/.config/niti-vala/ в формате JSON. Панель, виджеты и окна читают их сами.
  • Профиль набора модулей (minimal, balanced или full) влияет на то, какие модули загружаются. Это не профили питания системы.

Подробности и примеры файлов в документации.

Для разработчиков

Виджеты это плагины libpeas с простым контрактом: наследуйте Niti.Widget и верните корневой виджет GTK. Свой виджет можно написать на Vala, подключить к панели без пересборки и даже опубликовать через каталог расширений.