#!/usr/bin/env bash source common.sh # Tests that: # - flake.nix may reside inside of a git submodule # - the flake can access content outside of the submodule # # rootRepo # ├── root.nix # └── submodule # ├── flake.nix # └── sub.nix requireGit clearStore # Submodules can't be fetched locally by default. # See fetchGitSubmodules.sh export XDG_CONFIG_HOME=$TEST_HOME/.config git config --global protocol.file.allow always rootRepo=$TEST_ROOT/rootRepo subRepo=$TEST_ROOT/submodule createGitRepo "$subRepo" cat > "$subRepo"/flake.nix < "$subRepo"/sub.nix git -C "$subRepo" add flake.nix sub.nix git -C "$subRepo" commit -m Initial createGitRepo "$rootRepo" git -C "$rootRepo" submodule init git -C "$rootRepo" submodule add "$subRepo" submodule echo '"expression in root repo"' > "$rootRepo"/root.nix git -C "$rootRepo" add root.nix git -C "$rootRepo" commit -m "Add root.nix" flakeref=git+file://$rootRepo\?submodules=1\&dir=submodule # Flake can live inside a submodule and can be accessed via ?dir=submodule [[ $(nix eval --json "$flakeref#sub" ) = '"expression in submodule"' ]] # The flake can access content outside of the submodule [[ $(nix eval --json "$flakeref#root" ) = '"expression in root repo"' ]] # Check that dirtying a submodule makes the entire thing dirty. [[ $(nix flake metadata --json "$flakeref" | jq -r .locked.rev) != null ]] echo '"foo"' > "$rootRepo"/submodule/sub.nix [[ $(nix eval --json "$flakeref#sub" ) = '"foo"' ]] [[ $(nix flake metadata --json "$flakeref" | jq -r .locked.rev) = null ]]