Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot nixpkgs.callPackage the default.nix #32

Open
Quoteme opened this issue Feb 13, 2022 · 6 comments
Open

Cannot nixpkgs.callPackage the default.nix #32

Quoteme opened this issue Feb 13, 2022 · 6 comments

Comments

@Quoteme
Copy link

Quoteme commented Feb 13, 2022

I put

(import
  (
    let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
    fetchTarball {
      url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
      sha256 = lock.nodes.flake-compat.locked.narHash;
    }
  )
  { src = ./.; }
).defaultNix

in my default.nix and also

inputs.flake-compat = {
  url = github:edolstra/flake-compat;
  flake = false;
};

in my flake.nix. But when I try putting this in my configuration.nix

neovim-luca = (pkgs.callPackage (pkgs.fetchFromGitHub {
    owner = "quoteme";
    repo = "neovim-luca";
    rev = "d85f02952e35d0fd2afa783adb3e93d08fdd03d9";
    sha256 = "sha256-sPX1RaR3H4Hs2YEetdjI7b4UxBC4UxIkvOl1LIYSZuM=";
  }) {});

and doing sudo nixos-rebuild switch I get the following error:

building Nix...
building the system configuration...
error: attempt to call something which is not a function but a set

       at /nix/store/34br6qh4x4hjj15jjnbiivwgdhz4ci5a-nixos/nixos/lib/customisation.nix:69:16:

           68|     let
           69|       result = f origArgs;
             |                ^
           70|
(use '--show-trace' to show detailed location information)

nix-build works fine. But callPackage does not work. How can I fix this?

@Radvendii
Copy link

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.

@dpc
Copy link

dpc commented Jun 28, 2022

@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'.

https://github.com/rustshop/rustshop/blob/6a31b6fba00d94da117af893b49524ab42c74f29/infra/flake.nix#L18

I had to remove {} as well. Is there anything else that is obvious that I'm missing? (I'm still a Nix noob)

@dpc
Copy link

dpc commented Jun 28, 2022

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.

@dpc
Copy link

dpc commented Jun 28, 2022

I think it is breaking because builtins.currentsystem

Edit: I was right! Here is the workaround that worked for me: rustshop/rustshop@26824e3

dpc added a commit to rustshop/rustshop that referenced this issue Jun 28, 2022
@abathur
Copy link

abathur commented Nov 10, 2022

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;

@JZL
Copy link

JZL commented May 19, 2024

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants