= Recipes This chapter provides examples of how to use Nix in a variety of scenarios. Multiple types of recipes are provided are provided for some scenarios; comparing the different recipes will help you better understand Nix. - An _"ad hoc" shell_ is useful when you want to quickly create an environment for a one-off task. - A _traditional nix shell_ is useful when you want to define an environment that you will use more than once. - _Nix flakes_ are the recommended approach for development projects. - You can use `nix-shell` to run scripts in arbitrary languages, providing the necessary dependencies. This is particularly convenient for standalone scripts because you don't need to create a repo and write a separate `flake.nix`. The script should start with two _"shebang"_ (`#!`) commands. The first should invoke `nix-shell`. The second should declares the script interpreter and any dependencies. include::run/main-generated.adoc[leveloffset=+1] include::ad-hoc/main-generated.adoc[leveloffset=+1] include::shebang/main-generated.adoc[leveloffset=+1] include::devshell/main-generated.adoc[leveloffset=+1] include::nixpkgs-pkg/main.adoc[leveloffset=+1] include::remote-git/main.adoc[leveloffset=+1] include::remote-git-flake/main.adoc[leveloffset=+1] include::haskell-nixpkg/main.adoc[leveloffset=+1] include::haskell-local/main.adoc[leveloffset=+1] include::haskell-local-deps/main.adoc[leveloffset=+1] include::python-nixpkg/main.adoc[leveloffset=+1] include::env-var/main.adoc[leveloffset=+1]