1.4 KiB
Lib Outputs
This note covers 42-lib-outputs/, which exposes a lib attrset with pure data and helper functions that other outputs can reuse.
1. Why lib Is Useful
Only some output names have special meaning to the nix CLI. A flake can still expose arbitrary attrs for consumers.
lib is a common convention for that. It is a good place for:
- pure helper functions,
- derived lookup tables, and
- reusable domain data.
This example keeps the lib attrset small so the distinction is clear: the flake exports logic, not just build targets.
2. What the Example Exports
The lib output contains:
rolloutPlan, a small list of pure data,ownerByService, derived from that list, andrenderStepplusrenderPlan, which turn the data into text.
The package output then prints self.lib.renderPlan, so the runnable artifact is built from the same exported helper values that outside consumers can evaluate.
3. Why the Check Uses self.lib
The check reaches back through the public output path:
apiOwner = self.lib.ownerByService.api;
workerLine = self.lib.renderStep (builtins.elemAt self.lib.rolloutPlan 1);
That matters because it proves the helper data is not only local implementation detail in a let block. It is part of the flake interface.
4. Commands to Try
cd 42-lib-outputs
nix flake show
nix eval .#lib.ownerByService.api --raw
nix build
./result/bin/show-lib-plan
nix flake check