:PROPERTIES: :ID: 36fe6a01-ea1f-4785-8516-f6dcfecf05bb :END: #+title: azos/architecture #+filetags: :project: :knowledge: :architecture: * 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; passes =suiteModules= as =specialArgs= 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: #+begin_src nix config.flake.modules.homeManager. = { lib, config, pkgs, ... }: { options.azos..enable = lib.mkOption { ... }; config = lib.mkIf config.azos..enable { ... }; }; #+end_src Modules are then imported in =home-manager/home.nix= via: #+begin_src nix imports = [ suiteModules.homeManager. ... ]; #+end_src ** Option namespace =azos..= Dependencies between features use =lib.mkDefault true= to auto-enable: #+begin_src nix azos.claude-memory.enable = lib.mkDefault true; azos.claude-skills.enable = lib.mkDefault true; #+end_src ** File deployment - Static files: =home.file."path".source = ./file;= - Generated text: =home.file."path".text = "...";= - Runtime scripts (e.g. merging JSON): =home.activation. = lib.hm.dag.entryAfter ["writeBoundary"] ''...'';= ** Claude Code integration Three azos-core features wire up Claude Code: - =claude-memory= — registers org-roam-mcp as a global MCP server in =~/.claude.json= - =claude-skills= — deploys skills to =~/.claude/commands/= and content to =~/.claude/CLAUDE.md= - =claude= (=azos/features=) — installs claude-code, auto-enables the above two