-
Notifications
You must be signed in to change notification settings - Fork 3
Open
Description
Design and implement an output API that distinguishes between pure Nix interfaces and impure build outputs, similar to library/binary separation in compiled languages.
Design
Output Types
- Pure interface: Exposed when atom is used as Nix code, i.e. the existing public API of an atom-nix element.
- Impure interface:
main
output representing actual builds/artifacts, i.e. derivations
Matrix Support
- Single
main
can represent multiple build variants - Build matrices defined via configuration API (atom-nix:
cfg
as json api #48) - Supports programmatic variant generation outside Nix context
- Enables efficient cross-compilation and CI integration
Implementation Options - Currently Undecided
-
Single
main
- keep atoms super small- One primary output for external interaction
- Handles builds, scripts, CI, containers
- Supports variant generation through configuration
-
Multiple Named Outputs - encourages small atoms but where tightly coupled outputs might co-exist
main
as default output- Additional named outputs for multiple impure interfaces
- Module paths within atom, each with
main
function
Technical Benefits
Architecture
- Clean separation between pure and impure interfaces
- Decoupled evaluation and build processes
- Network-transparent build pipeline support (Proposal: Efficient Collection API for Build Pipelines with Matrices #20)
- Flexible variant generation without Nix evaluation
Pipeline Integration
- Pipeline entries can be single derivations or variant matrices
- Supports efficient forwarding across network boundaries
- Enables sophisticated build scheduling
Deliverables
- Core
main
output implementation - Build matrix support via configuration API
- Pipeline integration for variant handling
Metadata
Metadata
Assignees
Labels
No labels