Compare commits

...

7 Commits

11 changed files with 121 additions and 369 deletions

0
.codex
View File

View File

@@ -3,37 +3,99 @@
## Project Structure & Module Organization
This repository is a Den-based NixOS flake. `flake.nix` evaluates `./modules` through `import-tree`, so normal `.nix` files under `modules/` are auto-imported.
- `modules/hosts/` contains host-specific composition and hardware data for `polaris` and `orion`.
- `modules/features/` contains aspects such as desktop, shell, services, and Neovim.
- `modules/profiles/` holds higher-level bundles such as `workstation.nix`.
- `modules/users/` defines user metadata and per-user behavior.
- `modules/den.nix` imports the Den flake module and the `lux` namespace.
- `modules/defaults.nix` sets repo-wide Den defaults, enables `den._.mutual-provider`, and configures `den.ctx.hm-host`.
- `modules/schema.nix` defines the custom Den host and user schema used by this repo.
- `modules/infra.nix` defines `den.hosts.x86_64-linux.<name>`, each host entity's `users` attrset, and the host/user data attached to those entities.
- `modules/bundles.nix` defines bundle aspects that group other aspects. A bundle aspect may exist only to compose `includes`; `local-session` is an example.
- `modules/hosts/` contains host-specific composition and hardware data for `orion`, `polaris`, and `zenith`.
- `modules/features/` contains reusable aspects. In this repo, "feature" is only a directory label, not a Den primitive.
- `modules/users/` defines per-user aspects.
- `modules/secrets/` wires `sops-nix` and stores the encrypted `secrets.yaml`.
- `.agents/den/` is a local checkout of Den with source, docs, and examples.
Keep host files thin. Shared behavior belongs in `modules/features/` or `modules/profiles/`.
When Den behavior is unclear, read `.agents/den/docs/`, `.agents/den/modules/`, and `.agents/den/templates/ci/` before guessing.
Keep host files thin. Shared behavior belongs in `modules/features/` or `modules/bundles.nix`.
When Den behavior is unclear, read `.agents/den/modules/` and `.agents/den/nix/lib/` first. Use `.agents/den/templates/ci/` as example code. Use `.agents/den/docs/` only for design rationale, terminology, and usage guidance.
Do not infer Den behavior from surface symptoms or from where an aspect is included; reason from the actual context pipeline.
## Build, Test, and Development Commands
## Den Mental Model
Den is aspect-first and context-driven.
- Host, user, and home are entity kinds in Den. This repo defines host and user entities; it does not define standalone home entities under `modules/`.
- An aspect is the unit of behavior. A single aspect may define `nixos`, `homeManager`, `darwin`, `user`, or other class fragments for one concern.
- A context stage applies a resolved aspect to a context; Den then follows `into.*` and `provides.*`.
- `homeManager` is a forwarding class.
In practice:
- Including an aspect does not by itself create a forwarding path.
- Parametric matching does not by itself create a forwarding path.
- A class fragment reaches its final option path only if a context stage or forwarding class actually puts it there.
- If you cannot name the context stage and forwarding path, treat the claim as unverified.
## Den Context Stages And Forwarding Mechanisms
These are the mechanisms most relevant to the context pipeline in this repo.
- `den.ctx.host`: host context stage; applies `fixedTo { host; } host.aspect`
- `den.ctx.user`: user context stage from `den.ctx.host.into.user`; applies `fixedTo { host; user; } user.aspect`
- `den._.mutual-provider`: battery included on `den.ctx.user` in this repo; routes host-to-user and user-to-host through `provides.<name>`, host-to-all-users through `provides.to-users`, user-to-hosts through `provides.to-hosts`, and user-to-other-users on the same host through the same user context pipeline. In Den generally it also has standalone-home behavior, but this repo does not use standalone `den.homes`
- `den.ctx.hm-host` / `den.ctx.hm-user`: derived home-env context stages
- `den._.define-user`: battery included by `den.default` in this repo; defines base OS user fields and base `homeManager.home.username` / `home.homeDirectory` fields
- `homeManager`: forwarding class into `home-manager.users.<name>`
- `den._.os-user`: framework battery forwarding the `user` class into `users.users.<name>`; useful in Den generally, but not used in this repo today
- `den._.forward`: battery for custom class/path forwarding
## Den Helper Functions
These are the Den helpers that matter most in this repo.
- `den.lib.perHost`: exact `{ host }` wrapper
- `den.lib.perUser`: exact `{ host, user }` wrapper
- `den.lib.perHome`: exact `{ home }` wrapper; not used by this flake today
- `den.lib.parametric`: explicit parametric wrapper; default matching is `atLeast`
- `den.lib.parametric.exactly`: explicit exact-match wrapper
## Den Forwarding Proof Obligation
When making or reviewing any Den forwarding change, do not infer behavior from where code is declared or included.
You must identify all four of these explicitly:
1. Source: which aspect actually owns the class fragment?
2. Context stage: which `den.ctx.*` stage applies it?
3. Destination: which final evaluated option path should contain the result?
4. Mechanism: which `into.*` transition reaches the context stage, and which class application, `provides.*`, forwarding class, or `den._.forward` step places it at the destination?
If any of those answers are missing, unclear, or based on analogy, treat the claim as unverified.
Before presenting a forwarding claim as a recommendation or review finding, verify it at the evaluated destination with `nix eval`.
Minimum checks:
- host-selected `homeManager` behavior: inspect `nixosConfigurations.<host>.config.home-manager.users.<user>`
- OS user forwarding via `user` class: inspect `nixosConfigurations.<host>.config.users.users.<user>`
- mutual host/user forwarding through `provides.<name>`, `provides.to-users`, or `provides.to-hosts`: inspect the final destination option, not the declaration site
- custom forwarding through `den._.forward`: inspect the exact target path created by the forwarder
## Validation And Development Commands
Run commands from the repository root.
- `nix build .#nixosConfigurations.polaris.config.system.build.toplevel --show-trace`: evaluate and build the Polaris system.
- `nix build .#nixosConfigurations.orion.config.system.build.toplevel --show-trace`: evaluate and build the Orion system.
- `nixos-rebuild build --flake .#<host>`: use the standard rebuild path without activating it.
- `nix fmt`: format Nix files using the flake-provided formatter.
- `nix build --no-link --show-trace .#nixosConfigurations.<host>.config.system.build.toplevel`: baseline validation for one host without activation and without creating a `result` symlink.
- `nix build --no-link --show-trace .#nixosConfigurations.orion.config.system.build.toplevel .#nixosConfigurations.polaris.config.system.build.toplevel .#nixosConfigurations.zenith.config.system.build.toplevel`: validate all currently defined hosts in one invocation.
- `nixos-rebuild build --flake .#<host>`: use the standard rebuild path without activation when you specifically want `nixos-rebuild` semantics.
- `nix fmt`: format Nix files using the flake-provided `nixfmt` formatter.
- `nix eval .#nixosConfigurations.<host>.config.<option>`: inspect a single option while iterating.
`nix flake check` is useful for evaluation, but this repo does not define an automated test suite.
This repo does not define a `checks` output or a first-party test suite. Treat evaluation and build-only checks as the baseline. `nix flake check` is therefore not the baseline validation command here. `nixos-rebuild dry-activate` is not a baseline validation command either: it is activation-oriented, applies to the target system being rebuilt, and its own help text says the reported change set is not guaranteed to be complete.
For Den context-stage or forwarding changes, use the destination checks above.
## Coding Style & Naming Conventions
Use two-space indentation and standard Nix attrset formatting. Prefer small `let` bindings, lowerCamelCase local names, and lowercase file names such as `sops-password.nix`. Match the surrounding module style instead of reformatting unrelated code.
Prefer Den composition through `includes`; avoid host-specific duplication when a reusable aspect is clearer.
## Testing Guidelines
There are no first-party unit tests. Treat evaluation and build-only checks as the baseline. For scoped changes, run the matching `nix build` target first, or `nixos-rebuild build --flake .#<host>` when you want the standard rebuild path without activation. Activation and switching are manual steps and should not be performed by contributors or agents.
Prefer Den composition through `includes`; avoid host-specific duplication when a reusable aspect or bundle aspect is clearer.
Keep the configuration aspect-first. When a class fragment must cross context boundaries, express that through an explicit forwarding mechanism instead of relying on implicit host/user propagation.
## Commit
Follow the history style: short imperative subjects, optionally with a conventional prefix, for example `refactor: restructure openssh config`. Keep each commit focused on one concern.
## Security & Configuration Tips
Never commit plaintext secrets. Add or update secrets through `modules/secrets/secrets.yaml` and reference them via `config.sops.secrets.<name>.path`. Be explicit about firewall, SSH, disk, or boot changes; those are the highest-risk edits here.
Never commit plaintext secrets. Add or update secrets through `modules/secrets/secrets.yaml` and reference them via `config.sops.secrets.<name>.path`. Be explicit about firewall, SSH, disk, boot, or firmware changes; those are the highest-risk edits here.

View File

@@ -1,152 +0,0 @@
# Session Log
## Current Repo State
- The git worktree is dirty. Many files were already modified before or during this session. Do not revert unrelated changes.
- New main host/user additions are already in place:
- hosts: `polaris`, `zenith`, `orion`
- users: `kiri`, `ergon`
- `zenith` is the Lenovo Yoga Slim 7 ProX 14ARH7 laptop.
- `ergon` is the work user and is present on `polaris` and `zenith`, not `orion`.
## Naming Decisions
- Host names chosen:
- `polaris` = main machine
- `zenith` = laptop
- `orion` = VPS
- Work user chosen:
- `ergon`
## Den / Architecture Decisions
- `kiri` stays on `den._.primary-user`.
- `ergon` is explicit and should not use `den._.primary-user`.
- Do not introduce a local `admin-user` battery yet. Keep repeated patterns explicit until they stabilize.
- Prefer host files thin and move reusable behavior into `modules/features/` or `modules/profiles/`.
## Den Helper Mental Model
- `perHost` / `perUser` are stage gates, not just readability helpers.
- `perUser` is not the same as `parametric.exactly`.
- Actual behavior:
- `perUser` gates entry at exact `{ host, user }`, then evaluates the wrapped aspect under fixed `{ host, user }` with normal `atLeast` matching inside.
- `parametric.exactly` is an inner include matcher based on exact context shape.
- Practical rule used in this repo:
- use `perHost` for host-owned NixOS config that must apply once per host
- use `perUser` for host-user-pair HM or NixOS config
- avoid `take.*` unless doing low-level Den plumbing
## Niri / Display Model
- `lux.niri` was intentionally collapsed back into one conceptual aspect in `modules/features/niri.nix`.
- It now uses:
- `den.lib.perHost` for NixOS-side Niri setup
- `den.lib.perUser` for HM-side Niri settings
- Host monitor layout is a host fact, not a user fact.
- `den.schema.host.displays` exists and is the source of truth for monitor facts.
- Current `polaris` display layout lives in `modules/infra.nix`.
- `programs.niri.settings.outputs` is derived from `host.displays`, so both `kiri` and `ergon` on `polaris` get the same output configuration.
- `displays` intentionally has no `enabled` flag; omission means absent.
## SOPS / SSH / GPG Decisions
- Repo-managed GPG was removed from `modules/features/ssh.nix`.
- If commit signing is added later, prefer SSH signing rather than restoring repo-managed GPG.
- Secret recipient policy currently is:
- one admin age recipient
- `orion` SSH host key recipient
- `.sops.yaml` and `modules/secrets/secrets.yaml` were rekeyed to that policy.
## Current SOPS Model
- SOPS is now host-owned conceptually.
- Current host schema fields:
- `sopsHostSshKeyPath`
- `sopsAdminKeyPath`
- `sopsAdminKeyUsers`
- Current policy:
- `orion` uses `sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]` for host-level NixOS decryption.
- local hosts (`polaris`, `zenith`) use `/var/lib/sops-nix/admin-key.txt` for host-level NixOS decryption.
- HM SOPS also uses the host-provisioned `/var/lib/sops-nix/admin-key.txt`, but only for users listed in `host.sopsAdminKeyUsers`.
- Shared reader group:
- `sops-users`
- Current host metadata in `modules/infra.nix`:
- `polaris.sopsAdminKeyPath = "/var/lib/sops-nix/admin-key.txt"`
- `polaris.sopsAdminKeyUsers = [ "kiri" "ergon" ]`
- `zenith.sopsAdminKeyPath = "/var/lib/sops-nix/admin-key.txt"`
- `zenith.sopsAdminKeyUsers = [ "kiri" "ergon" ]`
- `orion.sopsAdminKeyPath = "/var/lib/sops-nix/admin-key.txt"`
- `orion.sopsAdminKeyUsers = [ "kiri" ]`
- `orion.sopsHostSshKeyPath = "/etc/ssh/ssh_host_ed25519_key"`
- Important operational caveat:
- the admin key file is expected to be provisioned out-of-band on hosts
- config creates `/var/lib/sops-nix` via tmpfiles and adds listed users to `sops-users`, but does not create the private key itself
## SSH Recovery Policy
- `orion` is treated as the remote recovery-critical host.
- `modules/features/services/openssh.nix` now owns both:
- OpenSSH base config
- user `authorizedKeys`
- Recovery assertions now enforce for `requiresSshRecovery = true`:
- OpenSSH enabled
- password auth disabled
- root login disabled
- `sshRecoveryUsers` non-empty
- every recovery user exists
- every recovery user has plain `authorizedSshKeys`
- `sopsHostSshKeyPath` non-null
- SSH exposed through firewall
- `AllowUsers = lib.attrNames host.users` is still the intended model.
## Recent Validation Results
- Successfully built after the Niri / SOPS / SSH refactors:
- `nix build .#nixosConfigurations.polaris.config.system.build.toplevel --show-trace`
- `nix build .#nixosConfigurations.orion.config.system.build.toplevel --show-trace`
- `nix build .#nixosConfigurations.zenith.config.system.build.toplevel --show-trace`
- Verified by evaluation:
- `polaris` Niri outputs for `kiri` and `ergon` match
- local hosts resolve `config.sops.age.keyFile = "/var/lib/sops-nix/admin-key.txt"`
- `orion` resolves `config.sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]`
- HM SOPS for allowed users resolves `"/var/lib/sops-nix/admin-key.txt"`
- `ergon@polaris` has `["sops-users", "wheel", "networkmanager"]`
- tmpfiles includes `d /var/lib/sops-nix 0750 root sops-users -`
## Remaining Warnings / Caveats
- Builds still emit pre-existing Home Manager default-change warnings:
- `gtk.gtk4.theme`
- `xdg.userDirs.setSessionVariables`
- `programs.git.signing.format`
- These warnings were not addressed in this session.
- There is no deployment wrapper or automated bootstrap tooling yet.
- `nixos-anywhere --copy-host-keys` remains the intended `orion` install approach when preserving the SSH host key for first-boot SOPS decryption.
## Architecture Contract
- Added `ARCHITECTURE.md` as the single durable reference for the repo's intended 1.0 structure.
- The contract is grounded in the current codebase:
- `schema` and `infra` own facts
- `users` own cross-host user baselines
- `features` own reusable behavior
- `profiles` and `environments` own bundling
- `hosts` stay thin and compose the final machine shape
- Kept the existing Den helper convention explicit:
- `perHost` and `perUser` are stage gates
- `parametric.exactly` is only for exact inner matching
- avoid new local batteries until the pattern is stable
- No repo redesign was done; this was documentation only.
- Validation:
- doc-only change
- no `nix build` run in this session
- Small open question for later:
- whether `ARCHITECTURE.md` should stay standalone or also be linked from `AGENTS.md` / future README if a contributor-facing index is added
## Architecture Simplification
- Collapsed `environments` into `profiles`.
- Current rule is now simpler:
- `features` are the smallest reusable behavior units
- `profiles` are all named bundles larger than a single feature
- `hosts` still own final composition and explicit host-specific exceptions
- `modules/environments.nix` was removed.
- `graphical` and `development` now live under `lux.profiles._`.
- Kept the repeated `provides.kiri` / `provides.ergon` host wiring explicit for now. The duplication is intentional until a shared host-composition pattern is clearly stable enough to justify extraction.
- Validation:
- `nix build .#nixosConfigurations.polaris.config.system.build.toplevel --show-trace`
- `nix build .#nixosConfigurations.orion.config.system.build.toplevel --show-trace`
- `nix build .#nixosConfigurations.zenith.config.system.build.toplevel --show-trace`
## MANUAL INTERVENTION NOTE BY HUMAN USER, NOT AI AGENT
Removed `ARCHITECTURE.md`. Pinning down the architecture this explicitly feels too rigid and unnecessary.
Perhaps a more generally applicable Design Philsophy would be more helpful and allow for more flexibility.

188
TASKS.md
View File

@@ -1,188 +0,0 @@
# Tasks
This file is an execution queue for independent Codex sessions.
Rules for every task:
- Work in `/home/kiri/.config/nixos`.
- Read `SESSION_LOG.md` first.
- Preserve current architecture unless the task explicitly asks to refine it.
- Keep unrelated changes out of scope.
- Validate your work with the relevant `nix build` commands whenever possible.
- Do not revert unrelated dirty-worktree changes.
- Append a short entry to `SESSION_LOG.md` at the end of the task. The entry should record:
- important decisions made
- short reasoning behind those decisions
- important structural code changes
- validation results
Keep it concise and useful for the next independent session.
## Task 1
```text
Work in /home/kiri/.config/nixos.
Read AGENTS.md and SESSION_LOG.md first.
Task: remove the remaining Home Manager default-change warnings without changing intended behavior.
Known warnings from the previous session:
- gtk.gtk4.theme
- xdg.userDirs.setSessionVariables
- programs.git.signing.format
Likely files:
- modules/features/theme.nix
- modules/features/xdg.nix
- modules/features/dev.nix
Requirements:
- Keep changes minimal and explicit.
- Match surrounding Nix style.
- Do not restructure unrelated parts of the repo.
- Validate by building all three hosts:
- nix build .#nixosConfigurations.polaris.config.system.build.toplevel --show-trace
- nix build .#nixosConfigurations.orion.config.system.build.toplevel --show-trace
- nix build .#nixosConfigurations.zenith.config.system.build.toplevel --show-trace
Done when:
- the known warning set above no longer appears
- all three builds succeed
Expected output:
- the code changes
- the validation results
- a short explanation of the final choices
- a short appended entry in SESSION_LOG.md for the next session
```
## Task 2
```text
Work in /home/kiri/.config/nixos.
Read AGENTS.md and SESSION_LOG.md first, then inspect the current module structure.
Task: define a short architecture contract for the repo's intended 1.0 state.
The goal is not to redesign the repo. The goal is to document the structure and philosophy that should remain stable after the current cleanup phase.
The document should cover:
- the layering model of the repo
- where things should go
- how to think about hosts vs users vs features vs profiles vs environments
- the practical mental model for Den helper usage
- the abstraction bar for introducing new batteries
- how to add or remove a host, user, or feature cleanly
Requirements:
- Keep it concise and operational.
- Ground it in the current codebase, not wishful architecture.
- Use the existing decisions in SESSION_LOG.md, especially the Den helper mental model.
- Prefer one clear reference document over scattered notes.
Done when:
- there is one short durable architecture reference in the repo
- it reflects the actual current repo structure
- it is specific enough to guide future changes
Expected output:
- the new or updated doc
- a short summary of the principles it establishes
- any small open questions that should be decided later
- a short appended entry in SESSION_LOG.md for the next session
```
## Task 3
```text
Work in /home/kiri/.config/nixos.
Read AGENTS.md and SESSION_LOG.md first.
Task: audit the service composition and recovery behavior for the orion host, and make the ownership model clearer where needed.
Important context:
- orion is the remote recovery-critical host
- modules/features/services/openssh.nix currently owns the base SSH and recovery assertions
- modules/features/services/gitea.nix also writes services.openssh.settings.AllowUsers
- the previous session intentionally tightened SSH recovery requirements
Focus on:
- modules/hosts/orion/default.nix
- modules/features/services/openssh.nix
- modules/features/services/caddy.nix
- modules/features/services/gitea.nix
- modules/features/services/vaultwarden.nix
- modules/features/services/actual.nix
- modules/features/services/radicale.nix
- any other file directly involved in orion service composition
Requirements:
- Do not do broad architectural refactors outside this scope.
- Prefer making ownership explicit over adding clever abstraction.
- If a cross-module write is acceptable, document why.
- If it is not acceptable, simplify it.
- Validate with:
- nix build .#nixosConfigurations.orion.config.system.build.toplevel --show-trace
Done when:
- SSH policy ownership is clear
- cross-module writes that affect recovery or exposure are removed, consolidated, or explicitly justified
- orion still builds successfully
- the final state is easier to explain than the starting state
Expected output:
- the code changes
- what was ambiguous before
- how the final ownership model works
- validation results
- a short appended entry in SESSION_LOG.md for the next session
```
## Task 4
```text
Work in /home/kiri/.config/nixos.
Read AGENTS.md and SESSION_LOG.md first. Treat the "Den Helper Mental Model" section as the current convention baseline.
Task: do a final structural audit and cleanup pass aimed at preparing the repo for an initial 1.0 state.
This task has four parts:
1. Validate every aspect/helper usage against the current Den helper conventions.
2. Fix helper mismatches or explicitly justify them.
3. Remove dead, stale, empty, or misleading scaffolding where safe.
4. Scan the repo for patterns that might deserve extraction into reusable batteries, and produce a small decision list: introduce / defer / reject.
The helper validation must review usage of:
- den.lib.perHost
- den.lib.perUser
- den.lib.parametric.exactly
- den.lib.parametric.atLeast
- avoid take.* unless truly needed
Important constraints:
- The goal is repo clarity, not abstraction for its own sake.
- A battery should only be introduced if it makes the repo simpler and reflects one stable underlying idea.
- One explicit candidate to evaluate is a possible lux.admin-user battery, but do not assume it should exist.
- Keep the repo grounded in the conventions already established by the previous session.
Suggested approach:
- inventory aspect/helper usage first
- review mismatches and repeated patterns
- decide what should remain explicit
- make only the cleanup/refactor changes that are justified by that review
Done when:
- every aspect/helper use has been reviewed against the stated conventions
- any mismatches are fixed or explicitly justified
- the repo is simpler or clearer afterward
- there is a short decision list for abstraction candidates, including lux.admin-user
Expected output:
- any code cleanup or helper-fix changes
- a short audit summary
- a decision list for abstraction candidates, including lux.admin-user
- any residual risks or open questions
- a short appended entry in SESSION_LOG.md for the next session
```

View File

@@ -1,21 +1,24 @@
{ lux, ... }:
{ den, lib, lux, ... }:
let
lingerForUsers = {
user.linger = true;
};
lingerForUsers = den.lib.perHost (
{ host, ... }:
{
nixos.users.users = lib.mapAttrs (_: _: {
linger = true;
}) host.users;
}
);
in
{
den.aspects.orion = {
provides.to-users = lingerForUsers;
includes = with lux.services._; [
includes = (with lux.services._; [
caddy
openssh
vaultwarden
radicale
actual
gitea
];
]) ++ [ lingerForUsers ];
nixos =
{ pkgs, ... }:

View File

@@ -15,6 +15,12 @@
];
};
provides.ergon = {
includes = with lux; [
sops-password
];
};
nixos =
{
config,

View File

@@ -14,6 +14,12 @@
];
};
provides.ergon = {
includes = with lux; [
sops-password
];
};
nixos =
{ pkgs, ... }:
{

View File

@@ -75,6 +75,19 @@ in
"kiri"
"ergon"
];
displays = {
"California Institute of Technology 0x1410 Unknown" = {
primary = true;
position.x = 0;
position.y = 0;
scale = 1.5;
mode = {
width = 3072;
height = 1920;
refresh = 120.002;
};
};
};
users = {
kiri = kiriAccount;
ergon = ergonAccount;

View File

@@ -6,6 +6,7 @@ hashed-password-kiri: ENC[AES256_GCM,data:xubN5stH4RPlHYl+Jzcu2BCepz3Hra3TxjiSsp
gemini-api-key-neovim: ENC[AES256_GCM,data:B8FeFt45FsU3aagyLDKXiwmx0mRrsw4C8RQ3EWXwZ+YfWLMvwJad,iv:1HqBD6vc07Ke/PMYXfHqFrWDGw/UMjiiBjLRN33/xHI=,tag:czcrYGbJFi41rYtIPM4qTQ==,type:str]
booklore-db-pass: ENC[AES256_GCM,data:dlPGXQ24itEaBRJSJ9WOogWCdF3atFQ2ZtlLGyGq8Tin5OmSZI6lZUzSE+femBW5SBTIlKQvzHEPCs9MT5tyMIqetzGLm+mMN3FDW7si684Cuv9z9Uq5gjAZWh14KQMWYPI=,iv:oLnqu2EDFBVcBpswVRXXeF617YolPxOUx9CscHRRn/8=,tag:Si6gF1EXhcHalk11D3Exlw==,type:str]
deluge-auth-file: ENC[AES256_GCM,data:uJME7CAC5OOJZLPdu9MNkg8ZDZZ64Wsytg==,iv:5l4eTSbdSKtOwjXGr7D1Teud5TON1+lcjWeI8W4bCuQ=,tag:ND8+cOUef1fwAGjmvWXEUQ==,type:str]
hashed-password-ergon: ENC[AES256_GCM,data:ZmqrOb9dGNzZe5rJRHTImgPkNDFzNlyMLRrnz1KgUsIyh3/VsiIB/pPa98vli83FBrRFWdB/KPjEt1/V71qalTcA7seMccPiCQ==,iv:Fzkjfz+T3F18b5nqjZ986kx28HrqQaJqq8Ng419TnRA=,tag:xIenh0oOlrFog9Hon+nsDQ==,type:str]
sops:
age:
- recipient: age122w85pqj508ukv0rd388mahecgfckmpgnsgz0zcyec37ljae2epsdnvxpl
@@ -26,7 +27,7 @@ sops:
aW8vM0IwQ243TnNPdnlkeHE4bTFLR00KaJhbOxdbIUJSzn4lOt2OO1HOTNaOoiSE
+pKjsYZZQBdcYFPREjffEL+oiyxHwoLi95noHad9AGmygLqwboUkWg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2026-03-09T12:12:17Z"
mac: ENC[AES256_GCM,data:pEbPRbwpYbOibyFgysUVcGvZGTqEuvuLJizMzxvIgpn0B/jAsysRsi9aZd8HN6jOypRq0AaVVDmT6gDM6PBWXMPEx3Mlh83sW5omyc6+i2eN2HfB1xXr46PG23WJ+k3LTbuPjTW00U8S3uvhr4ouaZ7c9ZlJBPevgoQECYflYZE=,iv:ppdSkpBLmCEGIEioc5HeuiVAmvgkC2g4WIkWWSh9fL0=,tag:f2xn3GeZulFnG4Dqqh3gYA==,type:str]
lastmodified: "2026-04-17T00:35:34Z"
mac: ENC[AES256_GCM,data:pjtjsc9uATZo7GnauAguMwVCDnSnoZhkxAShuUrDT6/enURYp4UB9tIwPH54PAc2UpU23vgv5XJNJ2ah4nAgOse2iyfm84b0S+bOfXKCd5gQTf8beOFCOT+xrQmURMN9q/RAA47RBT7qZFu4J/b+EkNeY9lJM1rmYjcOygxXd58=,iv:2IYY0GmCQOZnwsnPHsAmC4CBjyS6e/DNTCQa3AkSTxc=,tag:ZtBvvMDqb851Tzg26p7NhQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.12.1
version: 3.12.2

View File

@@ -73,6 +73,8 @@ in
age.keyFile = host.sopsAdminKeyPath;
};
home.sessionVariables.SOPS_AGE_KEY_FILE = host.sopsAdminKeyPath;
home.packages = [ pkgs.sops ];
};
}

1
result
View File

@@ -1 +0,0 @@
/nix/store/f04b5bwj62pi05mzg8lrrmq6wfr9i3hd-nixos-system-polaris-26.05.20260415.566acc0