summaryrefslogtreecommitdiff
path: root/3 Resources/Nix/Flake.md
blob: 754556f5c4ee8e898232f1e7e3ded7be236d9e4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#nix #flake

---
Nix flakes are source trees containing a file `flake.nix` at their root. The file `flake.nix` provides a standardized way to provide [[Zettelkast/Index/Nix]] artifacts. It's like a package manager for [[Zettelkast/Index/Nix]]. A flake can be dependent on other Flakes and it's possible to pin dependencies to exact revisions by using a `flake.lock` file.

Nix flake evaluation is hermetic, meaning that it produces the same result wherever it's built.k

The feature can be enabled in `~/.config/nix/nix.conf`:

```
experimental-features = nix-command flakes
```

To initialize in a repo: `nix flake init`.

In flakes dependencies have to be specified explicitly and MUST be locked to specific versions therefore it's no longer allowed to use the nixpkgs found in `NIX_PATH` by referencing it like `<nixpkgs>`.

Output of a Flake is an arbitrary [[Zettelkast/Index/Nix]] value such as a package, [[NixOS]] module or library function.
Commands `nix build` and `nix shell` will build the output `packages.<system>.default` unless we specify another output, for example: `nix shell .#checks.aarch64-linux.build`.

---
[Flakes Wiki](https://nixos.wiki/wiki/Flakes)