nix-playgraound/notes/018-follows-and-inputs.md

1.4 KiB

Follows and Inputs

This note covers 15-follows-and-inputs/, which defines multiple inputs and uses follows so one transitive input is reused instead of resolved separately.


1. What follows Does

follows points one input at another input by name:

flake-utils = {
  url = "github:numtide/flake-utils";
  inputs.systems.follows = "systems";
};

That means flake-utils does not resolve its own separate systems input. It reuses the top-level systems input from this flake.


2. Why This Matters

Without follows, transitive dependencies can drift apart. Two flakes may each resolve their own copy of an input, even though you wanted them to share one.

This example keeps the case small:

  • one top-level systems input,
  • one dependent flake, flake-utils, and
  • one follows edge that ties them together.

That makes it easy to inspect with nix flake metadata.


3. Why the Example Still Builds Something

The flake uses flake-utils.lib.eachDefaultSystem so the dependency is not just declared, but actually used. The package itself stays trivial because the point of the example is the input graph, not the package.

If you want to compare output-generation styles, see 03-multi-system/. This example is about input wiring.


4. Commands to Try

cd 15-follows-and-inputs

nix flake metadata
nix flake show

nix build
./result/bin/show-follows

nix run
nix flake check