Конфигурации NixOS/Home-Manager на дендритном паттерне: flake-parts + import-tree + flake-file, аспекты, профили, sops-nix.
  • Nix 93.1%
  • Python 3.4%
  • JavaScript 1.8%
  • Nushell 1.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-27 23:04:56 +05:00
modules refactor(agent-harness): connect research from external flake 2026-10-27 23:04:56 +05:00
.envrc feat(direnv): add direnv home-manager aspect 2026-08-24 22:20:44 +05:00
.gitignore chore: update gitignore 2026-10-20 23:11:34 +05:00
AGENTS.md docs(checks): clarify host builds in flake checks 2026-10-19 15:39:49 +05:00
flake.lock refactor(agent-harness): connect research from external flake 2026-10-27 23:04:56 +05:00
flake.nix refactor(agent-harness): connect research from external flake 2026-10-27 23:04:56 +05:00
LICENSE Initial commit 2026-08-22 00:27:29 +05:00
README.md feat(mafia-agents): add homelab deployment 2026-10-20 23:04:49 +05:00

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).

Почитать:

Команды

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.

Добавление нового хоста

  1. Создать 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/).
  2. Выбрать профили: lib.profiles.nixos.{desktop,server,homelab} и lib.profiles.home.{desktop,minimal} (modules/lib/profiles.nix).
  3. Добавить необходимые аспекты.
  4. Добавить в git новые файлы: git add modules/hosts/<host>.
  5. Собрать: 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.