docs: correct spec+plan for self-vs-inputs in imports
The fix subagent found that inputs.hermes-agent.nixosModules.default
inside `imports` causes infinite recursion in this repo's wiring
(inputs comes from _module.args, which merges after imports resolve;
self comes from specialArgs, which is available at import-time).
Tested both ways. Update docs to show self.inputs, matching commit
31e1910.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Vbvwg3Qt2u9nbkEA3wL17S
This commit is contained in:
@@ -58,7 +58,7 @@ No other files change.
|
|||||||
|
|
||||||
**Interfaces:**
|
**Interfaces:**
|
||||||
- Produces: NixOS option `my.profiles.hermes-agent.enable` (bool). When true, configures `services.hermes-agent` with `environmentFiles = [ config.sops.secrets."hermes-env".path ]` and grants `finn` the `hermes` group. Declares `sops.secrets.hermes-env` (owner/group `hermes`, path resolves to `/run/secrets/hermes-env` at runtime — but note the *service* re-copies it to `/var/lib/hermes/.hermes/.env`, per the spec's persistence note).
|
- Produces: NixOS option `my.profiles.hermes-agent.enable` (bool). When true, configures `services.hermes-agent` with `environmentFiles = [ config.sops.secrets."hermes-env".path ]` and grants `finn` the `hermes` group. Declares `sops.secrets.hermes-env` (owner/group `hermes`, path resolves to `/run/secrets/hermes-env` at runtime — but note the *service* re-copies it to `/var/lib/hermes/.hermes/.env`, per the spec's persistence note).
|
||||||
- Consumes: `hermes-agent.nixosModules.default` from the new flake input, imported directly inside the profile module via the `inputs` module arg (see Step 3) — not through `machines/configuration.nix`; existing `sops.secrets.<name>` mechanism from `machines/core/sops.nix` (already applied to every machine, unaffected by this task).
|
- Consumes: `hermes-agent.nixosModules.default` from the new flake input, imported directly inside the profile module via `self.inputs` (the `self` module arg, from `specialArgs` — see Step 3 and Step 5's note on why not the `inputs` module arg) — not through `machines/configuration.nix`; existing `sops.secrets.<name>` mechanism from `machines/core/sops.nix` (already applied to every machine, unaffected by this task).
|
||||||
|
|
||||||
- [ ] **Step 1: Add the flake input**
|
- [ ] **Step 1: Add the flake input**
|
||||||
|
|
||||||
@@ -109,14 +109,14 @@ Create `modules/environments/hermes-agent/default.nix`:
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
inputs,
|
self,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.my.profiles.hermes-agent;
|
cfg = config.my.profiles.hermes-agent;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ inputs.hermes-agent.nixosModules.default ];
|
imports = [ self.inputs.hermes-agent.nixosModules.default ];
|
||||||
|
|
||||||
options.my.profiles.hermes-agent.enable =
|
options.my.profiles.hermes-agent.enable =
|
||||||
lib.mkEnableOption "Hermes Agent (Telegram + Email gateway)";
|
lib.mkEnableOption "Hermes Agent (Telegram + Email gateway)";
|
||||||
@@ -139,9 +139,15 @@ in
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `inputs` argument is available automatically — every module in this
|
**Use `self`, not `inputs`, in the `imports` line.** `inputs` is supplied
|
||||||
repo gets it via `_module.args.inputs = self.inputs;` in
|
via `_module.args.inputs = self.inputs;`, set inside a config block — but
|
||||||
`machines/configuration.nix`, no extra wiring needed.
|
NixOS resolves a module's `imports` before `_module.args` assignments
|
||||||
|
merge, so anything referenced inside `imports` must come from
|
||||||
|
`specialArgs` (fixed up front) instead. `self` is threaded via
|
||||||
|
`specialArgs = { inherit self; };` in `machines/configuration.nix` and is
|
||||||
|
available at import-time; `inputs` is not. Using `inputs` here reproduces
|
||||||
|
`infinite recursion encountered` — confirmed by testing it directly, not
|
||||||
|
theoretical. `self.inputs.hermes-agent` is the same flake input either way.
|
||||||
|
|
||||||
- [ ] **Step 6: Register the module in the environments import list**
|
- [ ] **Step 6: Register the module in the environments import list**
|
||||||
|
|
||||||
|
|||||||
@@ -48,10 +48,16 @@ hermes-agent = {
|
|||||||
```
|
```
|
||||||
|
|
||||||
Import the upstream module **from inside the profile module itself**, via
|
Import the upstream module **from inside the profile module itself**, via
|
||||||
`imports = [ inputs.hermes-agent.nixosModules.default ];` — using the
|
`imports = [ self.inputs.hermes-agent.nixosModules.default ];` — using
|
||||||
`inputs` module arg already provided repo-wide by
|
`self` (available via `specialArgs = { inherit self; };` in
|
||||||
`_module.args.inputs = self.inputs;` in `machines/configuration.nix`.
|
`machines/configuration.nix`), not the `inputs` module arg. **Correction
|
||||||
**Correction (found during implementation, 2026-09-08):** this is
|
(found during implementation, 2026-09-08):** `inputs` is supplied via
|
||||||
|
`_module.args.inputs = self.inputs;`, set inside a config block — but
|
||||||
|
NixOS resolves a module's `imports` list before `_module.args` assignments
|
||||||
|
merge, so anything referenced inside `imports` must come from
|
||||||
|
`specialArgs` (fixed up front) instead. Using `inputs` here reproduces
|
||||||
|
`infinite recursion encountered`; `self.inputs.hermes-agent` is the same
|
||||||
|
flake input, reached the way that actually works. Separately, this is
|
||||||
deliberately *not* wired through `machines/configuration.nix`'s per-machine
|
deliberately *not* wired through `machines/configuration.nix`'s per-machine
|
||||||
module lists. NixOS's module system errors on a definition for an
|
module lists. NixOS's module system errors on a definition for an
|
||||||
undeclared option regardless of `lib.mkIf`'s condition — so declaring
|
undeclared option regardless of `lib.mkIf`'s condition — so declaring
|
||||||
@@ -72,14 +78,14 @@ repo's standard profile pattern:
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
inputs,
|
self,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
cfg = config.my.profiles.hermes-agent;
|
cfg = config.my.profiles.hermes-agent;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
imports = [ inputs.hermes-agent.nixosModules.default ];
|
imports = [ self.inputs.hermes-agent.nixosModules.default ];
|
||||||
|
|
||||||
options.my.profiles.hermes-agent.enable =
|
options.my.profiles.hermes-agent.enable =
|
||||||
lib.mkEnableOption "Hermes Agent (Telegram + Email gateway)";
|
lib.mkEnableOption "Hermes Agent (Telegram + Email gateway)";
|
||||||
|
|||||||
Reference in New Issue
Block a user