60 lines
2.0 KiB
Org Mode
60 lines
2.0 KiB
Org Mode
: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.<name> = { lib, config, pkgs, ... }: {
|
|
options.azos.<name>.enable = lib.mkOption { ... };
|
|
config = lib.mkIf config.azos.<name>.enable { ... };
|
|
};
|
|
#+end_src
|
|
|
|
Modules are then imported in =home-manager/home.nix= via:
|
|
|
|
#+begin_src nix
|
|
imports = [ suiteModules.homeManager.<name> ... ];
|
|
#+end_src
|
|
|
|
** Option namespace
|
|
|
|
=azos.<feature-name>.<option-name>=
|
|
|
|
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.<name> = 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
|