5 ms·
By itself, "nix develop" is somewhat less nice than "nix-shell" was.. except, I kinda think the intended UX is to use direnv. direnv + nix devshells is super ne
by rgoulter 4y ago
By itself, "nix develop" is somewhat less nice than "nix-shell" was.. except, I kinda think the intended UX is to use direnv. direnv + nix devshells is super neat.
The DX of being able to just have the development dependencies of a project available (but without being stuck inside a container/VM) is neat.
Since the devshells are provided in nix flakes, they're also much easier to refer to compared to shell.nix files.
As a fish shell user, I also like that `nix shell` respects `$SHELL`. It's a nicer UX than "nix-shell -p <whatever> --command 'fish'".
The only thing I miss from nix-shell was the `#!nix-shell`, which would let nix-shell 'interpret' a file.. so you could describe what packages a script file needed to run in the script file itself.
- faho 4y ago>As a fish shell user, I also like that `nix shell` respects `$SHELL`. It's a nicer UX than "nix-shell -p <whatever> --command 'fish'". And this would, of course, also help the zsh using author. In general it's a great idea to uncouple $SHELL as "the user's preferred interactive shell" from "a shell to run some of our scripts with", and you'd be surprised at how many things get this wrong. Many vim plugins, for instance, do!
- n8henrie 4y agoIMO the absence of a `--pure` flag (the `-i` flag seems not to work in the same way) makes `nix develop` an unsuitable replacement for `nix-shell`. A few SO threads and nixpkgs issues seem to agree, but if I'm misunderstanding I'd love to learn more.
- JamesSwift 4y agoIt looks like `--store` might be a way to get this, but I'm not sure if thats cross-platform.
- n8henrie 4y ago`nix develop --store`? I'm not seeing anything about it (on mobile at least): - https://nixos.org/manual/nix/unstable/command-ref/new-cli/nix3-develop.html https://nixos.org/manual/nix/unstable/command-ref/new-cli/ni... - https://nixos.wiki/wiki/Nix_command/develop https://nixos.wiki/wiki/Nix_command/develop
- JamesSwift 4y agoIts actually part of the nix config, which is also able to be overridden in the CLI: https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-store https://nixos.org/manual/nix/stable/command-ref/conf-file.ht... Note this will bust your local cache as well as the hydra cache since I'm pretty sure they depend on the store prefix.
- n8henrie 4y agoGotcha, thanks. Not sure how this would help replace `--pure` though.
- JamesSwift 4y agoYeah now that I think about it youre right :D It would only "purify" your nix dependencies, but wouldnt purify your environmental ones necessarily.
- rgoulter 4y ago> IMO the absence of a `--pure` flag (the `-i` flag seems not to work in the same way) makes `nix develop` an unsuitable replacement for `nix-shell` Ah, right, this is a useful use-case that nix develop doesn't cover.
- tadfisher 4y agoTo be clear, nix-shell --pure serves this use case by accident; it basically drops you into the shell with generic-builder.sh sourced and the build environment for a Nix derivation. This is useful for debugging Nix derivations, and if you are using mkShell you can minimize the pollution, but it's not exactly a development environment tailored for the typical software-engineering workflow. The tool that (ab)uses nix-shell/nix shell to get this right is devshell [1], which creates an activation script (similar to NixOS itself) that provides a real reproducible development env which works with shells other than bash. [1] https://github.com/numtide/devshell https://github.com/numtide/devshell
- JamesSwift 4y ago> The only thing I miss from nix-shell was the `#!nix-shell`, which would let nix-shell 'interpret' a file The ergonomics arent as nice, but I've done with with a wrapper script. e.g. foo_wrapper.sh: #!/usr/bin/env bash nix shell nixpkgs#bash nixpkgs#{foo-pkg} nixpkgs#{bar-pkg} -c bash foo.sh $@