Niri
Niri (он же Нири, Нирочка, Рулон Обоев, Бесконечный скролл, Убийца Хайперленда, Растовое поделие, Тайлинг для тачпадов, Секта свидетелей горизонтали, Уничтожитель воркспейсов) — написанный на богоугодном Расте, скроллируемый тайлинговый композитор для Вяленого, который ВНЕЗАПНО предлагает красноглазикам отказаться от привычной мозаики из окон в пользу бесконечной горизонтальной ленты. По сути, представляет собой цифровой аналог рулона туалетной бумаги, на котором юзер раскладывает свои терминалы с Неовимом и порнографией. Является главным возмутителем спокойствия в 2024—2026 годах, заставляя школьников с r/unixporn судорожно переписывать свои конфиги, а бородатых завсегдатаев OpenNet — извергать тонны ненависти и желчи. Разработан 1 расовым русским аспирантом ВМК МГУ Иваном Молодецких, что как бы намекает на суровую математическую базу и обилие скрытых костылей.
Суть[править]
Сотни лет, начиная с 1988 года (или около того), линуксоиды делились на 2 лагеря: те, кто возил окна мышкой по экрану (GNOME, KDE, XFCE и прочий масс-маркет), и те, кто познал дзен и пересел на тайлинг. Тайлинг (от английского tile — плитка) — это когда окна сами занимают всё доступное пространство экрана, выстраиваясь в сеточку. Открыл 1 окно — оно на весь экран. Открыл 2 — экран поделился пополам. Открыл 10 — окна превратились в амбразуры размером с почтовую марку, и ты сидишь с лупой, пытаясь разглядеть, в каком из них у тебя запущен htop, а в каком — компилируется ядро.
Исторически проблемы решались через воркспейсы (виртуальные рабочие столы). Засрал 1 стол — перешел на 2-й. Засрал 2-й — перешел на 3-й. В итоге у среднего пользователя DWM или i3 к вечеру открыто 15 воркспейсов, и он уже сам не помнит, где у него браузер, а где чат с мамой.
Потом пришел Hyprland со своими свистелками, блюром и анимациями, но парадигма осталась той же: окна сплющиваются, пока не превратятся в сингулярность.
И тут на сцену врывается Niri. Вместо того чтобы плющить окна, Niri просто… сдвигает их вправо. Открываешь 1-й терминал — он занимает половину экрана. Открываешь 2-й — он занимает вторую. Открываешь 3-й… и вместо того, чтобы поделить экран на 3 части, Niri просто уносит 1-й терминал за левый край монитора, оставляя 2-й и 3-й перед твоими изумленными глазами. Ты получаешь бесконечную, мать её, горизонтальную ленту окон. Прямо как лента в ВК или ТикТоке, только для работы (или имитации оной).
Концепция не нова и была нагло (но с любовью) попячена у расширения для GNOME под названием PaperWM. Однако PaperWM был костылем поверх и без того костыльного Гнома, который привязывал окна к глобальным координатам и безбожно глючил при попытке подключить 2-й монитор. Иван же, имея опыт коммитов в Mutter (гномский композитор), психанул и решил написать свой лунопарк с блэкджеком и шлюхами. Полностью с нуля. На Расте.
Раст головного мозга[править]
Если вы еще не слышали про язык программирования Rust, значит, вы последние 10 лет жили в пещере. Секта свидетелей Раста утверждает, что этот язык спасет человечество от рака яичек, сегфолтов (Segmentation fault) и переполнения буфера. Вся фишка в так называемом борроу-чекере (borrow checker), который на этапе компиляции ебет мозги программисту так сильно, что к моменту успешной сборки программы кодер либо достигает просветления, либо выходит в окно.
Поскольку Niri написан на Расте (с использованием библиотеки Smithay, которая является растовым аналогом wlroots), он работает феноменально стабильно. В отличие от того же Hyprland, который написан на плюсах и может упасть просто потому, что автор (Vaxry) забыл освободить память в 100500-й раз, Niri стоит как монолит. Композитор тестируется через так называемый property-based testing (крейт proptest), где система автоматически генерирует миллионы случайных действий (открыть окно, закрыть, ресайз, фокус, подключить 3 монитора, отключить 1, плюнуть в экран) и проверяет инварианты. Если система ловит баг, она минимизирует его до простейшего шага. В итоге у юзеров аптайм Niri исчисляется месяцами, а падения случаются реже, чем секс у типичного пользователя Линукса.
Вяленый против Иксов[править]
Niri — это Wayland-композитор. И тут мы вступаем на минное поле самой кровавой холиварной войны 21 века.
Дело в том, что X11 — это древний мамонт из 1980-х годов, в котором есть встроенный принт-сервер, функции для рисования эллипсов и архитектура, позволяющая любому кейлоггеру читать ввод паролей из соседнего окна. Wayland — это современный (разрабатываемый уже больше 15 лет) протокол, где безопасность возведена в абсолют, а каждый композитор вынужден заново изобретать велосипед, чтобы просто сделать скриншот или сменить раскладку клавиатуры.
В Niri разработчик пошел по пути минимализма. Он не стал вкорячивать поддержку нативного XWayland в ядро композитора.
А нахуя? Иксы мертвы. Если кому-то очень надо запустить древний кусок говна или Electron-приложение без флагов озона, пусть использует костыли.
И костыль был найден. Имя ему — xwayland-satellite. Эта штука запускается отдельно, притворяется иксовым оконным менеджером и транслирует окна в Wayland-поверхности. Пользователи узнав об этом, устроили массовое сожжение стульев:
The Linux Cast: Это сделка-брейкер! Мои любимые приложухи вроде ToDoist не открываются, потому что разраб Niri решил выебнуться и быть не как все! Я потратил 3 часа, чтобы заставить этот сраный сателлит работать, нихуя не вышло, и я вернулся на Hyprland. Почему нельзя просто сделать как у людей?!
Тем не менее, начиная с версии 25.08, Niri научился сам управлять сокетом xwayland-satellite, и теперь игры в Steam, Proton и всякий мусор от JetBrains работают из коробки, не требуя от пользователя танцев с бубном в 3 часа ночи.
Анатомия конфига[править]
Если в Sway вы писали конфиг на баше-подобном диалекте, а в Hyprland — на выдуманном шизофреническом синтаксисе, который ломается каждые 2 месяца после обновлений, то в Niri используется KDL (КДЛ). Это такой формат, который похож на смесь JSON, XML и больной фантазии.
Типичный конфиг лежит в ~/.config/niri/config.kdl и выглядит примерно так:
spawn-at-startup "waybar"
spawn-at-startup "swaybg" "-i" "/home/anon/wallpapers/anime_girl_100500.png"
input {
keyboard {
xkb {
layout "us,ru"
options "grp:win_space_toggle,compose:ralt"
}
repeat-delay 200
repeat-rate 35
}
touchpad {
tap
natural-scroll
}
}
layout {
gaps 16
center-focused-column "on-overflow"
preset-column-widths {
proportion 0.33333
proportion 0.5
proportion 0.66667
}
default-column-width { proportion 0.5; }
focus-ring {
width 2
active-color "#7fc8ff"
inactive-color "#505050"
}
border {
off
}
}
Всего 400 строк текста, и у тебя готово окружение. Никаких хардкодов. Самое приятное — Niri перезагружает конфиг НА ЛЕТУ при любом сохранении файла. Ошибся в синтаксисе? Композитор не упадет, не крашнет сессию (как это любил делать старый Sway), а просто выведет красную рамку с ошибкой и оставит работать старый, валидный конфиг. Защита от криворуких дебилов реализована на 10 баллов из 10.
С версии 25.11 завезли директиву include, так что теперь мамкины райсеры могут дробить свой конфиг на 100500 мелких файликов (отдельно бинды, отдельно правила окон, отдельно автостарт) и чувствовать себя настоящими программистами.
Свистелки и перделки[править]
Если вы приходите в Niri из Hyprland, вас ждет 1 жесткое разочарование. Здесь нет БЛЮРА. Вообще. То есть совсем. Для 90 % посетителей r/unixporn, у которых смысл жизни заключается в том, чтобы сделать свой терминал прозрачным и заблюрить сквозь него обои с аниме-тян, это натуральный удар ниже пояса.
Niri — это круто, но где мой кастомный блюр в 10 проходов с алгоритмом Кавасэ и регулировкой контраста?! Как я буду хвастаться на Реддите без блюра?!
Вместо кастомных кривых Безье (Bezier curves), которыми славится Hyprland, Niri использует физическую модель пружины (Spring animations). Ты задаешь жесткость (stiffness), затухание (damping) и массу окна, и композитор сам высчитывает, как оно должно выехать на экран. Выглядит это охуенно плавно, особенно на экранах с частотой 144 Гц или 165 Гц, но настроить анимацию так, чтобы окно делало тройное сальто перед открытием, у вас не выйдет. Иван Молодецких сказал: Анимации должны давать визуальный фидбек, а не вызывать эпилептический припадок. И точка.
Зато в Niri есть встроенная утилита для создания скриншотов (потому что в Wayland это боль, и лучше сделать самому, чем полагаться на сторонние grim и slurp) и потрясающий Overview (обзорный режим). Нажав Super + O (или смахнув 4 пальцами по тачпаду вверх), камера отъезжает назад, и ты видишь все свои бесконечные ленты на всех виртуальных рабочих столах. Выглядит это настолько круто, что пользователи GNOME и macOS нервно курят в стороне, понимая, что их хваленые Mission Control — это тормозящее говно мамонта по сравнению с 60 FPS плавностью Niri.
Отношение к мониторам[править]
Мультимониторность в X11 — это когда ты двигаешь мышку вправо, и она застревает между экранами, потому что у 1 монитора разрешение 1920x1080, а у 2-го 3840x2160, и Xorg не понимает, как с этим жить.
В Niri каждый монитор — это независимое государство со своими вертикальными воркспейсами и своей бесконечной горизонтальной лентой окон. Окно никогда не переливается между мониторами (это вообще запрещено физикой Niri). Если ты отключаешь внешний монитор, Niri бережно берет все рабочие столы с него и складывает на оставшийся экран. Подключаешь обратно — он возвращает их на место. Никакой потерянной работы, никаких съехавших окон. Это магия, за которую разработчика стоит расцеловать.
Драма на OpenNet[править]
Как только новость о выходе Niri попадает на главную страницу OpenNet, в комментариях моментально начинается перепись пациентов клиники Кащенко.
- Аноним 1: Если открыто 100 окон, незаебешься прокручивать?
- Вася: Для повседневной работы 100 окон не используется, этот WM вас просто дисциплинирует в работе с данными.
- Аноним 16: Почему нет? У меня открыто 170 вкладок в браузере, это примерно 17 задач. Вполне можно было бы сделать их окнами.
- Аноним 88: А сколько из них вы реально используете? Одну? Две? Три? Добавлять в закладки не обучен? Видел я таких.
Реакция старого линуксоида — это отрицание:
Аноним 118: Выглядит красиво, подойдет для загрузки скриншота в r/unixporn, но абсолютно неюзабельно. Десктоп — это не мобильник с 6 дюймовым экраном, в который нужно тыкать пальцем! Зачем элементы управления делать таких крокодиловых размеров?!
Хотя элементы управления в Niri вообще отсутствуют (нет рамок заголовков, только тонкий фокус-ринг шириной в 2 пикселя), хейтеры найдут до чего доебаться.
Затем обязательно приходят свидетели Иксов:
- Аноним 5: Еще одно доказательство архитектурного превосходства Вейланда. Каждый васян может написать композитный сервер, потому что все продумано. А вот попробовал бы кто-то написать свою реализацию Иксов — повеситься можно!
- Аноним 9: Вяляный уже стандарт де факто! Иксы увы, подкачали… Среди всех экспертов не нашлось ни единого мэйнтейнера Иксов! Увы и ах!
Но главная боль — это отсутствие HDR и VRR в первых версиях. Красноглазики с мониторами за 1000 долларов требовали 10 бит на цвет, чтобы смотреть кинцо и аниме в идеальном качестве. Niri постепенно внедрил поддержку VRR, но для HDR пришлось ждать апдейтов протокола wlroots (от которого Niri частично зависит через Smithay).
Niri в играх[править]
Гейминг на Линуксе в 2026 году — это уже не миф, а реальность благодаря Valve и их Proton. Но гейминг на тайлинговом оконном менеджере — это всегда лотерея. В Niri, если ты открываешь полноэкранную игру, она работает напрямую через технологию direct scanout. Это значит, что композитор не тратит ресурсы видеокарты на отрисовку буферов, а отдает кадры из игры прямо на экран. Задержка (input lag) минимальна. Однако, как жаловался ютубер MixaP52:
На Нири почему-то у меня 80 FPS в Arc Riders, а на Плазме (KDE) — 160 FPS. Вероятно, я криворукий и скил-ишью, кто знает.
Ответ прост: игры на X11 через xwayland-satellite могли иногда терять фокус или неадекватно захватывать мышь. К версии 25.11 эти проблемы пофиксили, и теперь курсор надежно залочен внутри игрового окна, не пытаясь сбежать на 2-й монитор в самый разгар катки в CS2 или Доте.
Гайд по настройке для чайников[править]
Если вы всё же решили променять свой уютный Mint или Ubuntu на это великолепие, вам понадобится Arch Linux (потому что Niri там ставится 1 командой из AUR).
1. Ставим базу и всё, что нужно для жизни:
yay -S niri alacritty fuzzel waybar swaybg swaylock mako
# Тут у нас:
# alacritty — терминал, в котором мы будем чувствовать себя хакерами.
# fuzzel — лаунчер приложений (штука, которая выпрыгивает по Super+D, чтобы запустить браузер).
# waybar — панелька с часиками и индикатором раскладки, чтобы не сойти с ума.
# swaybg — ставит обои на рабочий стол (без него вы будете пялиться в серую пустоту).
# swaylock — локер экрана.
# mako — демон уведомлений (чтобы видеть, как вам пишут в дискорде, что вы лох).
2. Заходим в систему, выбираем сессию Niri в вашем SDDM/GDM.
3. Перед вами пустой экран. Нажимаем Super + T (откроется терминал). Пишем:
nano ~/.config/niri/config.kdl
И начинаем править конфиг.
4. Бинды (Клавиатурные сокращения). Это самая мякотка. В Niri вы управляете окнами не мышкой, а клавиатурой, как пианист-виртуоз.
- Super + стрелочки — перемещение фокуса между окнами.
- Super + Shift + стрелочки — перемещение самого окна.
- Super + R — переключение ширины окна (сделать его на 1/2 экрана, 1/3 или на весь экран).
- Super + F — развернуть окно на весь экран (максимизировать колонку).
- Super + Q — закрыть окно к чертовой матери.
- Super + запятая / точка — добавить окно в колонку (сделать окна друг под другом) или выгнать его оттуда.
5. Если вы открыли 10 терминалов, они уехали вправо. Чтобы проскроллить к ним, вы просто зажимаете Super и крутите колесико мыши. Или используете тачпад: свайп 3 пальцами влево-вправо листает ленту окон, свайп 3 пальцами вверх-вниз переключает виртуальные рабочие столы. Работает это настолько охуенно интуитивно, что через 2 дня использования вы будете плеваться от любого классического тайлинга типа i3.
Секретные техники и костыли[править]
Поскольку Niri — это только композитор, а не полноценное Desktop Environment (DE), вам придется собирать свой рабочий стол из говна и палок. Это называется райсинг (ricing).
- Проблема 1: Нет системного лотка (tray) и панели.
Решение: Ставим Waybar или Noctalia-shell. В конфиге Niri прописываем `spawn-at-startup waybar`. Теперь у нас есть статусбар.
Решение: Настроить переменные окружения, чтобы заставить их использовать Wayland. Добавляем в `~/.config/environment.d/envvars.conf`:
QT_QPA_PLATFORM=wayland
MOZ_ENABLE_WAYLAND=1
- Проблема 3: Нет нормального альт-таба (Alt+Tab).
Решение: В свежих версиях (от 25.11) Niri запилил шикарный встроенный Alt-Tab с превьюшками окон. Жмешь Alt+Tab — листаешь окна. Жмешь Alt+Тильда — листаешь окна текущего приложения. Все просто и со вкусом.
- Проблема 4: Мне нужно окно поверх остальных (плавающее).
Решение: Долгое время Niri был пуристом тайлинга. Окна не могли плавать. Если ты открывал диалоговое окно Сохранить файл, оно занимало блядскую половину экрана и скроллило твои основные окна вправо. Это был пиздец. Но с версии 25.01 ввели плавающие окна (floating windows). Выделяешь окно, жмешь Super + V — и оно отрывается от сетки, позволяя таскать себя мышкой, как в винде. Шах и мат, хейтеры.
Философия использования[править]
Почему скроллинг лучше обычного тайлинга? Давайте представим типичный рабочий процесс линуксоида.
Вы пишете код. У вас открыт редактор (Neovim/VSCode) на 60 % ширины экрана. Справа открыт браузер со StackOverflow на 40 % экрана. Вдруг вам нужно запустить тесты или посмотреть логи в терминале.
В Hyprland/i3 вы открываете терминал, и он… сплющивает браузер. Браузер перестраивает верстку мобильного вида, текст уезжает, читать невозможно. Вы ругаетесь матом, кидаете терминал на 2-й воркспейс, переключаетесь туда, запускаете тесты, переключаетесь обратно в редактор.
В Niri вы открываете терминал, и он просто открывается СПРАВА от браузера, за границей экрана. Ваши редактор и браузер даже не шелохнулись, их размер остался идеальным. Вы нажимаете Super + стрелка вправо, экран плавно скроллится на терминал. Смотрите логи. Нажимаете Super + стрелка влево, экран скроллится обратно к коду. Все окна сохранили свои идеальные пропорции. Вы восхитительны, продуктивность растет, девушки текут от вашей эргономики.
Особый шик — это табы (вкладки). Вы можете сложить 5 окон в 1 колонку, нажать хитрый бинд, и они превратятся во вкладки (как в браузере), переключаясь по Super + стрелка вверх/вниз.