1
0
Fork 0
mirror of https://github.com/NixOS/nix.dev.git synced 2024-10-18 14:32:43 -04:00

Merge pull request #755 from fricklerhandwerk/move-direnv-recipe

move direnv instructions to recipes, update and rework text
This commit is contained in:
Alexander Groleau 2023-10-09 13:42:34 -05:00 committed by GitHub
commit 2307167d6b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 65 additions and 1 deletions

63
source/recipes/direnv.md Normal file
View file

@ -0,0 +1,63 @@
(direnv)=
# Automatic environment activation with `direnv`
Instead of manually activating the environment for each project, you can reload a [declarative shell](declarative-reproducible-envs) every time you enter the project's directory or change the `shell.nix` inside it.
1. [Make nix-direnv available](https://github.com/nix-community/nix-direnv)
2. [Hook it into your shell](https://direnv.net/docs/hook.html)
For example, write a `shell.nix` with the following contents:
```nix
let
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-22.11";
pkgs = import nixpkgs { config = {}; overlays = []; };
in
pkgs.mkShell {
packages = with pkgs; [
hello
];
}
```
From the top-level directory of your project run:
```shell-session
$ echo "use nix" > .envrc && direnv allow
```
The next time you launch your terminal and enter the top-level directory of your project, `direnv` will automatically launch the shell defined in `shell.nix`
```shell-session
$ cd myproject
$ which hello
/nix/store/1gxz5nfzfnhyxjdyzi04r86sh61y4i00-hello-2.12.1/bin/hello
```
`direnv` will also check for changes to the `shell.nix` file.
Make the following addition:
```diff
let
nixpkgs = fetchTarball "https://github.com/NixOS/nixpkgs/tarball/nixos-22.11";
pkgs = import nixpkgs { config = {}; overlays = []; };
in
pkgs.mkShell {
packages = with pkgs; [
hello
];
+
+ shellHook = ''
+ hello
+ '';
}
```
The running environment should reload itself after the first interaction (run any command or press `Enter`).
```shell-session
Hello, world!
```

View file

@ -11,4 +11,5 @@ These sections contains guides to getting things done.
./faq.md
../templates/*
./troubleshooting.md
./direnv.md
```

View file

@ -205,4 +205,4 @@ You will likely see different store paths and versions depending on when you exe
## Next steps
- [Nixpkgs Manual - `mkShell`](https://nixos.org/manual/nixpkgs/stable/#sec-pkgs-mkShell)
- [Nix Pills - callPackage Design Pattern][nix_pills_callpackage]
- [Creating shell environments](https://nix.dev/tutorials/learning-journey/shell-dot-nix.html)
- [Creating shell environments](https://nix.dev/tutorials/first-steps/declarative-shell.html)