Repository navigation
feat: add the topology, kubenix and nixidy integrations - #101
Merged
Merged
Conversation
This was referenced Oct 17, 2026
Merged
clhodapp
force-pushed
the
feat/topology-kubenix-nixidy
branch
from
October 18, 2026 05:39
24e6ade to
ed942dc
Compare
clhodapp
force-pushed
the
feat/topology-kubenix-nixidy
branch
2 times, most recently
from
October 18, 2026 07:54
764b9db to
92a4357
Compare
clhodapp
force-pushed
the
feat/topology-kubenix-nixidy
branch
from
October 18, 2026 08:25
92a4357 to
1caaf64
Compare
clhodapp
force-pushed
the
feat/topology-kubenix-nixidy
branch
from
October 18, 2026 08:27
1caaf64 to
07c80d1
Compare
clhodapp
force-pushed
the
feat/topology-kubenix-nixidy
branch
from
October 18, 2026 17:35
07c80d1 to
407657e
Compare
Every evaluation declared `caisson.modules.<class>.export.enabled` and `caisson.modules.<class>.exported` as options for every registered class. `caisson.modules` is now one option, an attribute set by class of the two settings, so a class no module sets costs nothing to evaluate. The definitions are written as before; a class with no registered module, or a setting other than the two, is refused when the exports are read. `exported` is now a value, so two definitions of it for one class conflict instead of merging. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A topology configuration is the diagram of the NixOS configurations declared inside it. caisson evaluates nix-topology's `topology` modules on the composed library and the selected package set extended with nix-topology's packages, with `nixosConfigurations` set to the machines declared inside it at its system; those machines get nix-topology's NixOS module by default. The configuration named `default` is published as `topology.<system>`, where nix-topology's flake module publishes it. A kubenix configuration is Kubernetes resources written as kubenix modules, evaluated as kubenix's `evalModules` evaluates them, on the composed library extended with kubenix's `upstreamables.nix`. Its `result` is published as `packages.<system>.<name>`. A nixidy configuration is an Argo CD environment, evaluated with nixidy's own `mkEnv` over the composed library, with the namespaces of the composed library added to nixidy's through `libOverlay`. It is published as `nixidyEnvs.<system>.<name>`, which the nixidy CLI reads. The pinned-world suite checks each against its upstream evaluator: the same topology nodes and diagram, the same kubenix result and the same nixidy environment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A configuration with `perSystem` has an evaluation for each system in force; the comments called it "evaluated at a system", which names one of those evaluations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A configuration is published as `kubenixConfigurations.<system>.<name>`, the evaluation kubenix's `evalModules` returns, whose `config.kubernetes.result` is the JSON `kubectl apply -f` reads. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The comments of the integrations said a configuration is evaluated at every system in force, and one in the integrations library said a configuration is evaluated at a system. They say it is evaluated per system, once for each system in force. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
clhodapp
force-pushed
the
feat/topology-kubenix-nixidy
branch
from
October 18, 2026 18:04
407657e to
67e6c70
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the last three survey integrations,
caisson.topology(over nix-topology),caisson.kubenixandcaisson.nixidy. It also has the cost fix that makes room for them. This PR is based on #100. Merge #94 through #100 first, then change the base of this PR tomain.The cost fix
perf(core)declares the export settings of every class,caisson.modules.<class>.export.enabledand.exported, in a single option,caisson.modules. It is an attribute set by class of plain values (lazyAttrsOf (lazyAttrsOf raw)). Before, there were two options for every registered class in every evaluation. Now a class no module sets costs nothing to evaluate.exportedstill take effect.exportedfor one class now conflict instead of merging. No module in caisson or in the workspace defines it twice.exportandexported, is refused when the exports are read.The fix took caisson's overhead in the eval-weight check from 4.07 MB to 3.66 MB. With the three integrations added it is 3.83 MB. The ceiling is still 4.28 MB.
Each integration still costs about 60 KB through caisson-core's composition. caisson-core merges every overlay's result into the library with
acc.prev // result, so each overlay copies the accumulated library once in every composed library. Removing that cost would mean changing caisson-core, and this PR doesn't.The integrations
topologymodules on the composed library, on the selected package set extended with nix-topology's packages, withnixosConfigurationsset to the machines at its system.defaultis published astopology.<system>, where nix-topology's flake module publishes it.evalModulesmakes, on the composed library extended withupstreamables.nix, with the samekubenixargument.kubenixConfigurations.<system>.<name>, its evaluation. Itsconfig.kubernetes.resultis the JSON thatkubectl apply -freads.evalModulesgives the same module.mkEnvwith the composed library aslib, and adds the composed library's namespaces throughmkEnv'slibOverlay.nixidyEnvs.<system>.<name>, which the nixidy CLI reads.mkEnvreturns no options, so, as with terranix, a nixidy configuration holds no configurations beneath it.environmentPackagederivation is the onemkEnvrenders from the same module.Checks
nix flake checkpasses.nix flake check --no-buildwith this branch in place of both caisson pins. Consumers that setcaisson.modules.<class>.exported, such as ch-ai-workbench and ch-emacs-config, are among them.🤖 Generated with Claude Code