From 3ba8b83f9505f609febf13d99fdce13fbb2d239b Mon Sep 17 00:00:00 2001 From: Cole Helbling Date: Mon, 8 Sep 2025 08:08:51 +0200 Subject: [PATCH 1/2] Test that using --inputs-from with a flakeref that has a dir works Will not pass until the next commit. (cherry picked from commit ed6ef7cdf4ffc82f20b9cca37015f8c8f64dff61) --- tests/functional/flakes/flakes.sh | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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 < Date: Mon, 8 Sep 2025 08:24:26 +0200 Subject: [PATCH 2/2] Pass `dir` in extraAttrs when overriding the registry This is handled similarly in the handler for `--override-flake` in `MixEvalArgs`. (cherry picked from commit 38663fb4345d8029b18a4eda10945aac02eb2795) --- src/libcmd/installables.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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); } } }},