3.9 KiB
3.9 KiB
azos
Architecture
azos is a NixOS/home-manager configuration repo with a two-tier feature system:
azos-core/— git submodule containing shared, reusable features (base, editor, claude-memory, claude-skills, dev, etc.)features/— machine-specific features (claude, encryption, hyprland, audio, etc.)home-manager/home.nix— home-manager entry point; manually lists all modules to import_machines/— per-machine NixOS configs; passessuiteModulesasspecialArgs
Feature auto-discovery is via import-tree in each flake.nix. Features from both
azos-core/features/ and azos/features/ are collected into config.flake.modules.
Module registration pattern
Each feature's default.nix registers itself:
config.flake.modules.homeManager.<name> = { lib, config, pkgs, ... }: {
options.azos.<name>.enable = lib.mkOption { ... };
config = lib.mkIf config.azos.<name>.enable { ... };
};
Modules are then imported in home-manager/home.nix via:
imports = [ suiteModules.homeManager.<name> ... ];
Option namespace
azos.<feature-name>.<option-name>
Dependencies between features use lib.mkDefault true to auto-enable:
azos.claude-memory.enable = lib.mkDefault true;
azos.claude-skills.enable = lib.mkDefault true;
File deployment
- Static files:
home.file."path".source = ./file; - Generated text:
home.file."path".text = "..."; - Runtime scripts (e.g. merging JSON):
home.activation.<name> = lib.hm.dag.entryAfter ["writeBoundary"] ''...'';
Conventions
- azos-core features belong to the submodule; machine-specific features live in the outer repo
- Extensible options follow the pattern established by
azos.claude.globalSkillsandazos.claude.globalMdSections: attrsets any module can contribute to, deployed by the owning feature - Emacs config is literate org:
azos-core/features/editor/emacs/config.org - Emacs base config:
azos-core/features/base/emacs/config.org - agent-shell defaults to Claude Code on lauretta via
(setq agent-shell-preferred-agent-config 'claude-code)infeatures/lauretta/emacs/config.org; this symbol skips agent selection entirely (no prompt)
Gotchas
azos-coreis a git submodule —git addmust be run inside it separately from the outer repo- Nix flakes only evaluate git-tracked files; new files must be staged (
git add) beforenix buildwill see them import-treeauto-discovers features but only sees tracked files — same constraint- The machine name is
lauretta; machine config is at_machines/lauretta.nix
Key Files
| File | Purpose |
|---|---|
azos-core/features/claude-memory/default.nix |
org-roam MCP server integration |
azos-core/features/claude-skills/default.nix |
global skills + CLAUDE.md deployment |
azos-core/features/claude-skills/skills/todo.md |
per-project TODO management skill |
azos-core/features/claude-skills/skills/project-brain.md |
org-roam second brain skill |
azos/features/claude/default.nix |
installs claude-code, enables claude-memory + claude-skills |
azos/home-manager/home.nix |
home-manager entry point, imports all modules |
azos-core/features/editor/emacs/config.org |
literate Emacs config (org-roam at line ~452) |
azos/azos-core |
git submodule pointing to shared feature library |
features/lauretta/emacs/config.org |
lauretta-specific Emacs overrides (agent-shell, LLM, beacon, caldav) |
~/.claude/settings.json |
Claude Code global permissions; read-only org-roam MCP tools are always-allowed here |
org-roam Setup
- Directory:
~/roam/ - Database:
~/.emacs.d/org-roam.db(sqlite-builtin connector) - MCP server:
org-roam-mcpregistered in~/.claude.jsonvia home-manager activation - org-agenda now includes
~/roam/so TODOs in roam files appear in agenda