I have a personal source project I created a shell.nix file for. However, in the project I have also scripts I want to execute periodically non-interactively. Could I use the nix-shell shebang pointing to shell.nix file in order to have the same programs when I use nix-shell interactively and when I launch the scripts?

  • chayleaf@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    1 year ago
    #!/usr/bin/env nix-shell
    #!nix-shell -i bash /path/to/shell.nix
    echo "Hello, World!"
    

    haven’t tested, but it should work

  • ck_@discuss.tchncs.de
    link
    fedilink
    arrow-up
    2
    ·
    1 year ago

    So what I understood here is:

    • you have a shell.nix file that puts packages on your path for working on your package
    • you have a script with a nix-shell shebang that puts the same packages as your shell.nix on the script path because you call it when not being “in the shell”
    • you want your script to “source” the packages from the shell.nix instead of having to specific them twice in the shebang

    Is that correct so far?

    • zako@lemmy.worldOP
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

      Yes, you explain better :-) The idea is that shell.nix is my development environment so I would like to use that shell.nix to interactive shells (nix-shell) and to run scripts (non-interactive use). I understand I could use a nix-shell shebang in every script, but that requires maintenance (when I modify the shell.nix file, modify the shellbang of all my scripts) and it is prune to errors (for example, modify the shell.nix and forget to modify the shebang of my scripts).

      • ck_@discuss.tchncs.de
        link
        fedilink
        arrow-up
        2
        ·
        1 year ago

        I cannot really verify this, but I think insteas of passing a list of packages you can just point the shebang to the shell.nix file, eg.

        #!nix-shell -i bash ../../shell.nix