mirror of
https://github.com/oqyude/nixos.git
synced 2026-10-09 21:47:12 +03:00
- install.sh: .agent/src/ (PROTOCOLS, COMMANDS, TEMPLATES, install.sh/ps1, GUIDE)
- .temp/ добавлен в .gitignore
- .agent/checkpoints.json: phases.init=completed, project_type=existing
- .agent/rules/project-rules.md: R1-R5 (инварианты, ловушки, куда лезть, проверки)
- .agent/context/analysis-report.md: стек, архитектура, конвенции, кандидаты CI
- .agent/context/project-state.md: сжатый слепок (хосты, сервисы, ADR)
- .agent/roadmap/sources.md: открытые вопросы слоёв 0-11 (бывший invariants.md)
- .agent/tasks/manifest.{json,md}: 16 задач A1-F + 23 в backlog
- .agent/decisions/0001-sops-secrets-paths.md: ADR для инварианта S1
- AGENTS.md: metaagent-шапка + сжатая выжимка nixos (yaml frontmatter сохранён)
- удалены docs/arch/{map,invariants,todo}.md
8.3 KiB
8.3 KiB
Analysis Report
Session
- Session ID:
metaagent-init-2026-10-09 - Target repo:
S:/Git/nixos - Date: 2026-10-09
- Project type:
existing(NixOS-конфиг, 120.nix, ~8.5k строк)
1. Общая информация
- README: одна строка без смысла (
"I'm a super newbie who just posted my stuff here. Now maybe about intermediate"); функциональную роль README играетAGENTS.md(корень). - Лицензия: не указана.
- CI/CD: отсутствует.
nix flake check— единственная автоматическая защита, прогоняется вручную.deploy/default.nix:27-29—checks = builtins.mapAttrs (... deployChecks), но они покрывают только deploy-сценарий. - Точка входа:
flake.nix→nixosConfigurations.<attr>(хосты) +nixOnDroidConfigurations.<attr>(Android). Реестр хостов:configurations/default.nix:13-39. - Система сборки: Nix + NixOS flakes. Home-manager, sops-nix, disko, deploy-rs, grub2-themes, justray.
2. Стек технологий (existing)
| Компонент | Значение |
|---|---|
| Язык | Nix (.nix) |
| Фреймворк | NixOS modules + home-manager |
| База данных | PostgreSQL (в modules/server/postgresql.nix), sqlite (3x-ui) |
| Тестовый раннер | отсутствует (см. §5) |
| Пакетный менеджер | Nix (nix flake, nix-env, nix profile) |
| Линтер/форматтер | отсутствует (комментарий-density 38/120 файлов без комментариев — открытый вопрос 0.2) |
3. Архитектура (existing)
flake.nix
├── configurations/ ← реестр хостов (1 запись = 1 машина)
│ ├── default.nix ← hosts + xlib + mkSystem
│ ├── <host>.nix ← модульное тело хоста
│ └── hardware/<host>.nix
├── home/ ← home-manager (per device-type)
├── modules/
│ ├── options.nix ← кросс-модульные опции
│ ├── default.nix ← defaultModule + strictModule (для nix-on-droid)
│ ├── essentials/ ← packages, services, settings, ssh, shell, systemd-routines
│ └── <type>/ ← per-type: desktop/, server/, vds/, wsl/, containers/, termux/, other/
├── lib/
│ ├── mkSystem.nix ← nixosSystem + specialArgs(xlib, inputs)
│ └── xlib/ ← чистые данные: devices, dirs, helpers
├── overlays/, pkgs/, deploy/, secrets/ (sops)
└── .sops.yaml ← один age-ключ на secrets/<name>.(yaml|json|env|ini)
Паттерн: модульный монолит с xlib-инъекцией (аналог dependency injection через specialArgs).
Ключевые модули:
| Модуль | Описание |
|---|---|
configurations/default.nix:13-39 |
Реестр хостов (7 entries); mkXlib в строке 50 |
configurations/<host>.nix |
Per-host: имя, тип, импорт модулей; 7 файлов |
lib/xlib/default.nix:38-77 |
mkXlib — единственная точка сборки xlib |
lib/xlib/device.nix:12-41 |
Закрытое множество device.types: { minimal, primary, secondary, server, vds, wsl, termux } |
lib/xlib/helpers.nix |
mkBindMount, mkSystemdBind, mkServiceStorage, mkNtfsMount, mkExfatMount, mkTmpDirs, mkSymlinks |
modules/options.nix |
Кросс-модульные опции: host.builder.*, host."3x-ui".* |
modules/default.nix:9-39 |
nixosModules.default — импортируется на каждый NixOS-хост; nixosModules.strict:40-53 — для nix-on-droid |
modules/essentials/ |
packages, services, settings, ssh, shell, systemd-routines |
modules/users.nix |
Пользователь oqyude (uid 1000, sapphira=1001), sops-секреты, hostKey bootstrap |
modules/server/ |
20+ системных сервисов sapphira (см. server/default.nix:imports) |
modules/server/systemd.nix |
rsync oneshots с requiresMountsFor guard (единственный пример guard'а) |
modules/server/{nginx,coredns}.nix |
Reverse proxy + DNS для зон zeroq.su и home.arpa |
modules/containers/ |
podman-контейнеры: 3x-ui (заморожен), tape-rotation, remnanode, kokoro-tts, openhands, remnawave-examples |
home/<type>.nix |
Home-manager per device-type; для root — без профиля |
home/modules/opencode.nix |
OpenCode CLI + systemd user services (см. R2 — Service vs serviceConfig) |
deploy/default.nix |
deploy-rs ноды: sapphira, otreca, rydiwo (НЕ atoridu/wsl/epral) |
4. Конвенции (existing)
- Стиль: Nix-форматирование, разные отступы в разных файлах (нет единого стандарта).
- Импорты:
imports = [ ./foo.nix ./bar.nix ];или list-spread.lib.optionalдля условных импортов. - Типизация: types из
lib.types(например,lib.types.str,lib.types.bool,lib.types.attrsOf). - Обработка ошибок:
throw+ literal-сообщения (например,lib/xlib/device.nix:12-41— throw со списком валидных типов). - Логирование: не формализовано; rsync oneshots в
modules/server/systemd.nix— единственный пример с-v+ structured output.
5. Тесты (existing)
- Команда запуска: отсутствует. Единственная полуавтоматическая проверка —
nix flake check. - Всего тестов: 0
- Пройдено: N/A
- Упало: N/A
- Пропущено: N/A
- Упавшие тесты: N/A
Кандидаты на CI-проверки (открытый вопрос 11.2):
- ни одного
:latestв образах (grep поimage =) nix flake checkзелёный — уже ловит A1- домены в
coredns.nix↔ vhost'ы вnginx.nixсовпадают в обе стороны - для каждого потребителя
mkServiceStorageкаталог существует наExternal - последнее правило самописной nftables-цепочки явное
listen.addr— адрес интерфейса, а не сеть- все файлы в
secrets/матчатpath_regexиз.sops.yaml
6. Базовая проверка (existing)
- Сборка: не проверена в этой сессии (нет
nixв PATH, AGENTS.md ссылается наnix flake check). - Запуск: N/A (NixOS-конфиг, не приложение).
- Git status: рабочее дерево было чистым после коммита
7c9aa24(yaml frontmatter в AGENTS.md). 1 modified файл (AGENTS.md) — fixed.
7. Требования (N/A для existing)
8. Примечания
- Проход по репозиторию 2026-10-05: 120
.nix, ~8.5k строк. Подтверждённые инварианты (1–6) зафиксированы в.agent/rules/project-rules.md(R1). - Слои 9–11 (home-manager, deploy, формат) перенесены в
.agent/roadmap/sources.mdкак открытые вопросы; см. §9.2, §10.1-10.4, §11.1-11.2 исходногоinvariants.md. - Шаблон инварианта (4 оси: Утверждение, Где, Почему, Действие) — для новых
записей. Обратное: до правки
authelia.nix:51,108,109шёл через хелперsopsPath = name: "/run/secrets/${name}";open-webui.nix:95,tape-rotation.nix:61,remnawave.nix:61, 129, 136— литеральный хардкод. См. ADR-0001. - Bootstrap-цикл ключа (R3) — должен быть задокументирован, иначе при переустановке хоста агент не выведет. Открытый вопрос 4.2.