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?
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?
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).
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
#!/usr/bin/env -S nix-shell shell.nix --run echo "Hello, World!"
should work
or alternatively
#!/usr/bin/env nix-shell #!nix-shell -i bash shell.nix echo "Hello, World!"
haven’t tested either