NIX: “error: cannot auto-call a function that has an argument without a default value” when calling a script from different folder than its root

Issue

This Content is from Stack Overflow. Question asked by stefanos

I’m very new to NIX so maybe this is something simple but I haven’t managed to find a fix yet.

I have this python script (resource.py) that I have nixified. When I run the script from within it’s own directory (./resource.py), everything runs fine. Nix gets all the packages needed and runs the script without any errors. But when I try to call the script from a different folder, then I get this error:

error: cannot auto-call a function that has an argument without a
default value (‘pkgs’)

What I am aiming for is being able to call the script directly from any folder, ie call “/home/…/resource.py” from anywhere.

Here is my default.nix file:

{ pkgs }:
pkgs.poetry2nix.mkPoetryApplication {
  projectDir = ./.;
}

my shell.nix:

 { 
  pkgs ? (import (builtins.fetchTarball {
            # Release '22.05' is a tag which points to ce6aa13369b667ac2542593170993504932eb836
            url = "https://github.com/nixos/nixpkgs/tarball/22.05";
            # This hash is git-agnostic so nix can detect if the git-tag changes
            sha256 = "0d643wp3l77hv2pmg2fi7vyxn4rwy0iyr8djcw1h5x72315ck9ik";
          }) {}),

  allthepoetrystuff ? import ./default.nix { inherit pkgs; } 
}:

pkgs.mkShell {
  buildInputs = [
    pkgs.python3
    pkgs.poetry
    allthepoetrystuff   # This assumes lockfile is present
  ];
}

and the main script (resource.py):

#! /usr/bin/env nix-shell
#! nix-shell --pure -i "python3"

import resourcehandler

if __name__ == "__main__":
    resourcehandler.ResourceHandler()

Any help/tips/suggestions are highly appreciated!



Solution

This question is not yet answered, be the first one who answer using the comment. Later the confirmed answer will be published as the solution.

This Question and Answer are collected from stackoverflow and tested by JTuto community, is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.

people found this article helpful. What about you?