mrgnl_nixos — источник правды для моего рабочего ThinkPad. В репозитории описаны не только пакеты, но и то, что обычно расползается по ручным настройкам: загрузка системы, сеть, графическая сессия, приложения, терминал, горячие клавиши и поведение ноутбука.

Сейчас это один активный хост — [[devices/thinkpad-t14-gen-4|ThinkPad T14 Gen 4]]. Вместо абстрактной коллекции профилей я держу в репозитории ровно ту машину, которой пользуюсь каждый день. Так проще видеть границу между переносимым решением и особенностью конкретного железа.

Три слоя вместо одного большого файла

host/t14 описывает сам ноутбук: hardware-configuration, имя хоста и набор подключаемых профилей. Там не должно появляться правило, полезное всем будущим машинам, только потому, что ему пока не нашлось места.

modules/ отвечает за системный слой NixOS: загрузку, Nix, сеть, безопасность, питание, Intel-графику, fingerprint, съёмные носители и пакеты. Например, конфигурация включает zram, регулярный trim SSD и очистку временных файлов, а для VPN хранит в Git лишь wiring сервиса — сам файл с учётными данными остаётся root-only вне репозитория.

home/ принадлежит Home Manager: здесь живут пользовательские программы, dotfiles, Gruvbox-палитра и поведение сессии. Такое разделение не декоративно: оно помогает понять, нужно ли изменение всем пользователям системы, только этой машине или лишь моему рабочему окружению.

Рабочий стол после Niri

Niri был хорош тем, что дал прокручиваемую раскладку и понятные правила окон, но текущий desktop собран вокруг Umbriel и Noctalia 5. Umbriel оставил важное для меня свойство — scrolling layout, — и взял на себя компоновку, обзор, анимации, output rules и Wayland-сессию. Noctalia запускается внутри этой сессии и даёт launcher, bar, уведомления, clipboard, lock screen и меню завершения работы.

Это не попытка собрать «рисовый» desktop из десятка отдельных демонов. Один Gruvbox-набор цветов проходит через greeter, shell, Kitty, Yazi, btop и LazyVim; горячие клавиши привязаны к физическим клавишам и продублированы для русской раскладки. Небольшие, но важные детали тоже описаны рядом с кодом: fingerprint работает в greeter, lock screen и sudo с парольным fallback, а подключённые накопители появляются в Nautilus без запуска файлового менеджера от root.

Конфигурация должна проверяться до перезагрузки

Команда scripts/check.sh quick t14 не ограничивается проверкой синтаксиса. Она разбирает все Nix-файлы, проверяет Markdown и форматирование, валидирует flake outputs, делает dry-build хоста и проверяет сгенерированные конфиги Umbriel и Noctalia их собственными валидаторами. Полный режим собирает весь system closure.

Это особенно полезно там, где ошибка проявляется только после входа в сессию: неверное имя настройки, сломанный конфиг compositor’а или конфликт версий лучше поймать до nixos-rebuild switch. После активации я отдельно проверяю systemd и пользовательские сервисы; для desktop-изменений смотрю живые окна, слои и ошибки текущей сессии. Если обновление неудачно, у NixOS остаётся понятный rollback к предыдущему поколению.

Обновления без лотереи

Большинство программ приходит из nixpkgs, поэтому для обычного обновления достаточно обновить один input, посмотреть flake.lock, выполнить полную проверку и только затем применить конфигурацию. Полный nix flake update обновляет одновременно NixOS, Home Manager, Noctalia, Umbriel и portal — это полезно, но я отношусь к нему как к отдельному изменению с большим радиусом эффекта, а не как к ежедневной кнопке «обновить всё».

Мой маршрут остаётся простым: edit → check → commit → push; активация — отдельный, осознанный шаг. Конфигурация не должна меняться только потому, что где-то появился новый пакет.

Что в этом для меня главное

Воспроизводимость здесь не означает, что одна команда превращает любой компьютер в мой. Она означает, что состояние активной машины можно объяснить, проверить и восстановить без охоты за забытыми настройками. Даже workaround для зависания Umbriel при выключении зафиксирован в конструкторе хоста: compositor получает пять секунд на чистое завершение вместо долгого ожидания systemd.

Репозиторий связывает Fish, Kitty, Neovim, Yazi и остальной набор инструментов с конкретной машиной, но не прячет саму логику за магией dotfiles. А прежний Niri остался важной ступенью: именно от него в нынешнем окружении сохранилось требование к спокойной, прокручиваемой организации окон.