"Error: value is a function while a set was expected" when importing package set

I have tried following this post, explaining how to pin nixpkgs versions: Nix Haskell Development (2020)

For generating the json file of the version to be pinned, I used the command:

nix-prefetch-git https://github.com/nixos/nixpkgs-channels.git refs/heads/nixos-19.09 > nix/nixos-19-09.json

Then I have made this default.nix file

  hostNix = import <nixpkgs> {};
  nixpkgsPin = hostNix.pkgs.lib.importJSON ./nix-pins/nixos-19-09.json;

  pinnedPkgs = hostNix.pkgs.fetchFromGitHub {
    owner = "NixOS";
    repo  = "nixpkgs-channels";
    inherit (nixpkgsPin) rev sha256;
with import pinnedPkgs;  
stdenv.mkDerivation rec {
  name = "env";
  env = buildEnv { name = name; paths = buildInputs; };
  buildInputs = [

However, when I launch nix-shell I get the error: “error: value is a function while a set was expected”
Any idea what’s wrong ? What/where should I start looking for ?

1 Like

Seems like you’re missing the {} in import pinnedPkgs {}

Also: if you’re doing mostly python development it’s probably best to use

with import pinnedPkgs;
python36.pkgs.buildPythonPackage rec {
  propagatedBuildInputs = with python36.pkgs; [

This one will automatically start the python setup.py develop mode when your project is setuptools based.

There’s some more examples in the nixpkgs manual NixOS - Nixpkgs 21.05 manual

1 Like

Not the first time I made this same mistake… But this error message is not extraordinarily helpful :wink:

I know this seems like a simple mistake that might not be helpful to others, but I strongly suspect that another person has run into this exact error and wished someone had posted online how to fix it. If you wouldn’t mind could we keep this here so others might find it when they look for that error message?

@Skyfold Maybe in this case I should rename the title of the topic ? Because the mistake I made, currently is not related to pinning to a nixpkgs version.

Maybe you could go with:

“error: value is a function while a set was expected” when importing package set

That way it has the error in the title and mentions importing a package set, which is usually when you would run into this issue.

1 Like