Maximilian Bosch
559fd7ffe7
* nix flake check: improve error message if overlay is not a lambda Suppose you have an overlay like this { inputs = { /* ... */ }; outputs = { flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: { overlays.default = final: prev: { }; }); } then `nix flake check` (correctly) fails because `overlays` are supposed to have the structure `overlays.<name> = final: prev: exp`. However, the error-message is a little bit counter-intuitive: error: overlay does not take an argument named 'final' While one might guess where the error actually comes from because the trace above says `… while checking the overlay 'overlays.x86_64-linux'` this is still pretty confusing because it complains about an argument not being named `final` even though that's evidently the case. With this change, the error-message actually makes it clear what's wrong: [ma27@carsten:~/Projects/nix/tmp]$ nix flake check --extra-experimental-features 'nix-command flakes' path:$(pwd) error: … while checking flake output 'overlays' at /nix/store/clgblnxx003hyrq8qkz5ab6kgqkck6qc-source/flake.nix:4:5: 3| outputs = { ... }: { 4| overlays.x86_64-linux.snens = final: prev: { | ^ 5| kek = throw "snens"; … while checking the overlay 'overlays.x86_64-linux' at /nix/store/clgblnxx003hyrq8qkz5ab6kgqkck6qc-source/flake.nix:4:5: 3| outputs = { ... }: { 4| overlays.x86_64-linux.snens = final: prev: { | ^ 5| kek = throw "snens"; error: overlay is not a lambda, but a set instead
92 lines
1.6 KiB
Bash
92 lines
1.6 KiB
Bash
source common.sh
|
|
|
|
flakeDir=$TEST_ROOT/flake3
|
|
mkdir -p $flakeDir
|
|
|
|
cat > $flakeDir/flake.nix <<EOF
|
|
{
|
|
outputs = { self }: {
|
|
overlay = final: prev: {
|
|
};
|
|
};
|
|
}
|
|
EOF
|
|
|
|
nix flake check $flakeDir
|
|
|
|
cat > $flakeDir/flake.nix <<EOF
|
|
{
|
|
outputs = { self }: {
|
|
overlay = finalll: prev: {
|
|
};
|
|
};
|
|
}
|
|
EOF
|
|
|
|
(! nix flake check $flakeDir)
|
|
|
|
cat > $flakeDir/flake.nix <<EOF
|
|
{
|
|
outputs = { self, ... }: {
|
|
overlays.x86_64-linux.foo = final: prev: {
|
|
};
|
|
};
|
|
}
|
|
EOF
|
|
|
|
checkRes=$(nix flake check $flakeDir 2>&1 && fail "nix flake check --all-systems should have failed" || true)
|
|
echo "$checkRes" | grepQuiet "error: overlay is not a function, but a set instead"
|
|
|
|
cat > $flakeDir/flake.nix <<EOF
|
|
{
|
|
outputs = { self }: {
|
|
nixosModules.foo = {
|
|
a.b.c = 123;
|
|
foo = true;
|
|
};
|
|
};
|
|
}
|
|
EOF
|
|
|
|
nix flake check $flakeDir
|
|
|
|
cat > $flakeDir/flake.nix <<EOF
|
|
{
|
|
outputs = { self }: {
|
|
nixosModules.foo = assert false; {
|
|
a.b.c = 123;
|
|
foo = true;
|
|
};
|
|
};
|
|
}
|
|
EOF
|
|
|
|
(! nix flake check $flakeDir)
|
|
|
|
cat > $flakeDir/flake.nix <<EOF
|
|
{
|
|
outputs = { self }: {
|
|
nixosModule = { config, pkgs, ... }: {
|
|
a.b.c = 123;
|
|
};
|
|
};
|
|
}
|
|
EOF
|
|
|
|
nix flake check $flakeDir
|
|
|
|
cat > $flakeDir/flake.nix <<EOF
|
|
{
|
|
outputs = { self }: {
|
|
packages.system-1.default = "foo";
|
|
packages.system-2.default = "bar";
|
|
};
|
|
}
|
|
EOF
|
|
|
|
nix flake check $flakeDir
|
|
|
|
checkRes=$(nix flake check --all-systems --keep-going $flakeDir 2>&1 && fail "nix flake check --all-systems should have failed" || true)
|
|
echo "$checkRes" | grepQuiet "packages.system-1.default"
|
|
echo "$checkRes" | grepQuiet "packages.system-2.default"
|