diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc index 0e6a204a7..96ff06ad3 100644 --- a/src/libcmd/installables.cc +++ b/src/libcmd/installables.cc @@ -178,10 +178,16 @@ MixFlakeOptions::MixFlakeOptions() for (auto & [inputName, input] : flake.lockFile.root->inputs) { auto input2 = flake.lockFile.findInput({inputName}); // resolve 'follows' nodes if (auto input3 = std::dynamic_pointer_cast(input2)) { + fetchers::Attrs extraAttrs; + + if (!input3->lockedRef.subdir.empty()) { + extraAttrs["dir"] = input3->lockedRef.subdir; + } + overrideRegistry( fetchers::Input::fromAttrs(fetchSettings, {{"type", "indirect"}, {"id", inputName}}), input3->lockedRef.input, - {}); + extraAttrs); } } }}, diff --git a/tests/functional/flakes/flakes.sh b/tests/functional/flakes/flakes.sh index 8fb7ce8e2..7b5be112e 100755 --- a/tests/functional/flakes/flakes.sh +++ b/tests/functional/flakes/flakes.sh @@ -472,12 +472,12 @@ EOF [[ "$(nix flake metadata --json "$flake3Dir" | jq -r .locks.nodes.flake1.locked.rev)" = $prevFlake1Rev ]] baseDir=$TEST_ROOT/$RANDOM -subdirFlakeDir=$baseDir/foo -mkdir -p "$subdirFlakeDir" +subdirFlakeDir1=$baseDir/foo1 +mkdir -p "$subdirFlakeDir1" writeSimpleFlake "$baseDir" -cat > "$subdirFlakeDir"/flake.nix < "$subdirFlakeDir1"/flake.nix < "$subdirFlakeDir"/flake.nix < "$subdirFlakeDir2"/flake.nix <