Skip to content

atom-nix: main outputs #49

@nrdxp

Description

@nrdxp

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

  1. Single main - keep atoms super small

    • One primary output for external interaction
    • Handles builds, scripts, CI, containers
    • Supports variant generation through configuration
  2. 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

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions