Конфигурации NixOS/Home-Manager на дендритном паттерне: flake-parts + import-tree + flake-file, аспекты, профили, sops-nix.
- Nix 93.1%
- Python 3.4%
- JavaScript 1.8%
- Nushell 1.7%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| modules | ||
| .envrc | ||
| .gitignore | ||
| AGENTS.md | ||
| flake.lock | ||
| flake.nix | ||
| LICENSE | ||
| README.md | ||
Nix Dots
Конфигурация NixOS/Home-Manager на паттерне Dendritic (flake-parts + import-tree + flake-file).
Dendritic pattern
Суть: нет конфига с цепочками импортов, каждая фича (аспект) - самодостаточный flake-parts модуль. Аспект хранится в modules/, экспортирует flake.modules.<level>.<name>. import-tree собирает все .nix автоматически, композиция - через профили (modules/meta/profiles.nix).
Почитать:
- github.com/mightyiam/dendritic - оригинальное описание паттерна.
- import-tree - сборка модулей (файлы/папки с
_игнорируются). - flake-file - декларативный
flake.nix.
Команды
nix fmt # форматирование файлов через treefmt
nix run .#write-flake # регенерировать flake.nix после правок flake-file.inputs
sudo nix run .#facter # сгенерировать отчёт о текущем железе (facter.json)
flake-file
flake.nixгенерируется автоматически через команду и помеченDO-NOT-EDIT.- Инпуты меняются декларативно через
flake-file.inputsв аспектах (modules/aspects/*.nix).
facter
Отчет facter нужно сохранять в аспект конкретного хоста, чтобы его можно было удобно импортировать через кастомную функцию.
sudo nix run .#facter > modules/hosts/<host>/facter.json`
flake.nixosConfigurations.<host> = inputs.nixpkgs.lib.nixosSystem {
modules = [ (facter ./facter.json) ];
}
Сборка конфигурации
sudo nixos-rebuild switch --flake .
- Убедитесь, что репозиторий для хранения sops-секретов указан верно и вы имеете к нему доступ (используйте свой репозиторий или не используйте sops впринице).
- При изменении ссылки на репозиторий не забудьте перегенерировать
flake.lock:nix flake update secrets - Проверка без применения:
nix build .#nixosConfigurations.<требуемый хост>.config.system.build.toplevel --show-trace.
Добавление нового хоста
- Создать
modules/hosts/<host>/:_settings.nix- аттрибутная сетка с данными хоста; образец.default.nix- конфигурация через обёрткуmkNixosSystem(пробрасываетhostиinputs):{ inputs, facter, mkNixosSystem, ... }: { flake.nixosConfigurations.<host> = mkNixosSystem { system = "x86_64-linux"; # Или любая другая система host = import ./_settings.nix; modules = [ (facter ./facter.json) inputs.self.modules.nixos.<user> inputs.home-manager.nixosModules.home-manager # ... специфичные для хоста модули ] ++ inputs.self.lib.profiles.nixos.desktop; # или .server }; }facter.json(опционально; вместо него можно описать железо вручную в_hardware.nix— см.modules/hosts/fisher/).
- Выбрать профили:
lib.profiles.nixos.{desktop,server,homelab}иlib.profiles.home.{desktop,minimal}(modules/lib/profiles.nix). - Добавить необходимые аспекты.
- Добавить в git новые файлы:
git add modules/hosts/<host>. - Собрать:
sudo nixos-rebuild switch --flake .#<host>.
Окружение разработки
- direnv: при входе в каталог активирует devShell флейка - пакеты и хуки из
modules/meta/tools/. Если у вас естьdirenvвыполните командуdirenv allow. - pre-commit: git-хук, генерируется при загрузке окружения (через
nix develop, либоdirenv). Проверяет форматирование, базовые ошибки, не позволяет создать коммит при нарушениях. - treefmt: Содержит централизованные настройки для линтеров и форматеров. Запускается через
nix fmt. Настройки вmodules/meta/tools/pre-commit.nix.
Структура и содержимое modules/: modules/README.md.
Развёртывание Mafia Agents и перенос БД на fisher:
modules/aspects/mafia-agents/README.md.