Open Quoteme opened 2 years ago
The default.nix
at the root of a project is not supposed to be called with with callPackage
. This is a little bit confusing (at least it was for me), but let me try to explain:
There are two types of default.nix
files that are commonly used. The ones (typically at the root of a project) that get fed into nix-build
, and the ones (typically in nixpkgs
) that get fed into callPackage
.
nix-build
expects a file with just a derivation in it. callPackage
expects a function from things in nixpkgs
to a derivation.
In other words, you should be able to just remove pkgs.callPackage
, since your default.nix
is just a derivation, it's not a function that needs to be applied to anything.
@Radvendii Hi. I'm glad I've found your comment. I had the same issues as OP. However when I apply your suggestion I get another error:
> nix develop
error: builder for '/nix/store/r8rbia8zx7v66vwfsykd0s0k6iraa9jz-nix-shell-env.drv' failed with exit code 2;
last 1 log lines:
> /nix/store/1fl42m4278x5d0wywih5dcd1zbfs8aib-default.nix: line 4: syntax error near unexpected token `('
For full logs, run 'nix log /nix/store/r8rbia8zx7v66vwfsykd0s0k6iraa9jz-nix-shell-env.drv'.
I had to remove {}
as well. Is there anything else that is obvious that I'm missing? (I'm still a Nix noob)
After playing with repl I'm even more confused: https://discourse.nixos.org/t/different-result-on-import-path-default-nix-in-flake-nix-vs-repl/19997 - I'm able to get the derivation in nix repl
(with (import ./path/default.nix).default
but not in my flake.nix
.
I think it is breaking because builtins.currentsystem
Edit: I was right! Here is the workaround that worked for me: https://github.com/rustshop/rustshop/commit/26824e3eb119b8cb5cdfcedddf291853344673a1
In case it helps someone else, I ran into both of the error messages in this thread trying to figure out how to use the default flake output in a normal ci.nix
that I need to nix-build
. I might still be holding it wrong, but I ended up getting it working by just using:
lilgit = (builtins.getFlake (toString ./.)).packages.${builtins.currentSystem}.default;
Thanks so much for helping with this
(import /path/.../default.nix).default
worked perfectly!
I'm new to nix so I don't know what's obvious to others, but adding that .default
took me hours to figure out.
I had gotten it to work via nix-build default.nix
easily and then tried to add it to my systemPackages
in configuration.nix
but got a series of very cryptic errors.
Do you think it'd be worth adding this secondary usage syntax to the readme more prominently
I put
in my default.nix and also
in my flake.nix. But when I try putting this in my configuration.nix
and doing
sudo nixos-rebuild switch
I get the following error:nix-build
works fine. But callPackage does not work. How can I fix this?