Skip to content

Proposal/RFC: support runtime extension of format file search path (permit adding directories other than <store-path>/share/nixos-generator) #147

Open
@tomeon

Description

@tomeon

nixos-generators-search-path-proposal

Proposal

Support runtime extension of the format file search path via environment variables and CLI options.

Motivation

Provide a mechanism for end users and third parties to host libraries of nixos-generate formats.

Hypothetical usage

$ NIXOS_GENERATORS_FORMAT_SEARCH_PATH=/some/location:/another/location \
    nixos-generate \
        --format-search-path /yet/another/location \
        --format-search-path /yes/there/is/another/location \
        --format my-custom-format \
        --flake '.#my-host'

This would make nixos-generate search for the format file my-custom-format.nix in the following directories, ordered from highest to lowest precedence:

  1. /yes/there/is/another/location
  2. /yet/another/location
  3. /some/location
  4. /another/location
  5. /nix/store/...-nixos-generators/share/nixos-generator/format

In other words:

  1. CLI arguments are highest-precedence, with later arguments (those toward the end of argv) being of higher precedence than earlier arguments,
  2. The search path specified in NIXOS_GENERATORS_FORMAT_SEARCH_PATH is next-highest-precedence, and
  3. The builtin format directory is lowest-precedence.

Example use cases

  • Setting the NIXOS_GENERATORS_FORMAT_SEARCH_PATH environment varible in a devshell configuration so that entering nix develop makes the project's custom nixos-generate formats available via the --format flag rather than only via typing out their paths.
  • Using makeWrapper/wrapProgram to ship a custom nixos-generate with additional format definitions, without having to rebuild nixos-generators itself (and modify its builder, etc.).
  • Easily incorporating libraries of custom formats supplied by third parties.

WDYT?

I would be happy to submit a PR introducing the described changes if they sound sane and desirable. Thanks in advance for your feedback.

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