Compare commits
2 commits
fe4068c9ec
...
da2b589ad0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
da2b589ad0 | ||
![]() |
948fe426f7 |
3 changed files with 24 additions and 14 deletions
|
@ -11,7 +11,9 @@ For me the biggest advantage flakes bring is not additional functionality. Inste
|
||||||
|
|
||||||
When learning flakes, you often see [flake-utils]( https://github.com/numtide/flake-utils) being used. With it, you can shorten your flakes by not having to specify everything per system.
|
When learning flakes, you often see [flake-utils]( https://github.com/numtide/flake-utils) being used. With it, you can shorten your flakes by not having to specify everything per system.
|
||||||
|
|
||||||
### Without anything
|
_Edit_: The patterns described here as well as `flake-parts` are also compared in [Practical Nix flake anatomy](https://vtimofeenko.com/posts/practical-nix-flake-anatomy-a-guided-tour-of-flake.nix/#flake-utils-flakeparts-etc).
|
||||||
|
|
||||||
|
## Without anything
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
|
@ -33,7 +35,7 @@ When learning flakes, you often see [flake-utils]( https://github.com/numtide/fl
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### With flake-utils
|
## With flake-utils
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
{
|
{
|
||||||
|
@ -54,7 +56,7 @@ When learning flakes, you often see [flake-utils]( https://github.com/numtide/fl
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### With function in flake
|
## With function in flake
|
||||||
|
|
||||||
To make a long story short, here is what I usually do instead:
|
To make a long story short, here is what I usually do instead:
|
||||||
|
|
||||||
|
@ -94,16 +96,24 @@ For me, it wasn’t a problem to ignore boilerplate like this at first, slowly l
|
||||||
At **[1]**, the supported systems are specified. I personally use `x86_64-linux` and `aarch64-linux`, but I also usually support `x86_64-darwin` and `aarch64-darwin` in public projects.
|
At **[1]**, the supported systems are specified. I personally use `x86_64-linux` and `aarch64-linux`, but I also usually support `x86_64-darwin` and `aarch64-darwin` in public projects.
|
||||||
If you want to support any system, you can use [`nixpkgs.lib.system.flake-exposed`](https://github.com/NixOS/nixpkgs/blob/374e6bcc403e02a35e07b650463c01a52b13a7c8/lib/systems/default.nix#L58) at **[2]** instead of defining your own list.
|
If you want to support any system, you can use [`nixpkgs.lib.system.flake-exposed`](https://github.com/NixOS/nixpkgs/blob/374e6bcc403e02a35e07b650463c01a52b13a7c8/lib/systems/default.nix#L58) at **[2]** instead of defining your own list.
|
||||||
|
|
||||||
Because the definition is right inside the flake, you can tweak what gets passed to the function. For example, the [flake for RedoxOS-development](https://gitlab.redox-os.org/redox-os/redox/-/blob/cb34b9bd862f46729c0082c37a41782a3b1319c3/flake.nix#L38) I contributed[^1] this to passes the custom rust-toolchain.
|
### Example variations
|
||||||
|
|
||||||
|
Because the definition is right inside the flake, you can tweak what gets passed to the function.
|
||||||
|
By doing that, you have to explicitly add the new identifier to each part that uses it, instead of having a global `let` binding that is implicitly used.
|
||||||
|
`system` being available here is another bonus, as otherwise this would require duplicate `let`s everywhere.
|
||||||
|
|
||||||
An example for how to do it is already right there: at **[3]**, `pkgs` is provided.
|
An example for how to do it is already right there: at **[3]**, `pkgs` is provided.
|
||||||
|
Some real-world usages I wrote or encountered:
|
||||||
|
|
||||||
|
- [servicepoint-life flake](https://git.berlin.ccc.de/vinzenz/servicepoint-life/src/commit/5f5e10d39f09f4d60b4301e76f0158636afee6d1/flake.nix): passes in initialized `naersk` instance and a shorthand to refer to packages defined in the flake itself
|
||||||
|
- [RedoxOS development flake](https://gitlab.redox-os.org/redox-os/redox/-/blob/cb34b9bd862f46729c0082c37a41782a3b1319c3/flake.nix#L38): uses it to pass a custom rust-toolchain
|
||||||
|
- [my NixOS flake](https://git.berlin.ccc.de/vinzenz/nixos-configuration/src/commit/3d27f554015ece713fa22fe829d711b430d6bbda/flake.nix): uses something similar for per-host config
|
||||||
|
|
||||||
Another possible tweak: You may want to define separate supported systems for each output.
|
Another possible tweak: You may want to define separate supported systems for each output.
|
||||||
This is useful, for example, if the target environment you're developing for cannot support a development shell.
|
This is useful, for example, if the target environment you're developing for cannot support a development shell.
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
For me, the trade-offs are worth it, as they provide greater transparency and control over the flake configuration.
|
For me, the trade-offs are worth it, as they provide greater transparency and control over the flake configuration.
|
||||||
|
For you, this may be different, in which case keep using it!
|
||||||
That being said, I fully acknowledge that `flake-utils` can still be a great choice for many people.
|
|
||||||
It simplifies things and reduces the need to write boilerplate code, which can be a plus depending on your needs and workflow.
|
|
||||||
Ultimately, it's also matter of personal preference.
|
Ultimately, it's also matter of personal preference.
|
||||||
|
|
||||||
[^1]: If you check the history, you will see I am not mentioned. I am still a bit salty about that, as it was my first contribution to a bigger OSS project.
|
|
||||||
|
|
8
flake.lock
generated
8
flake.lock
generated
|
@ -2,16 +2,16 @@
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748037224,
|
"lastModified": 1748437600,
|
||||||
"narHash": "sha256-92vihpZr6dwEMV6g98M5kHZIttrWahb9iRPBm1atcPk=",
|
"narHash": "sha256-hYKMs3ilp09anGO7xzfGs3JqEgUqFMnZ8GMAqI6/k04=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f09dede81861f3a83f7f06641ead34f02f37597f",
|
"rev": "7282cb574e0607e65224d33be8241eae7cfe0979",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-24.11",
|
"ref": "nixos-25.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
description = "Flake for the contents of https://zerforschen.plus";
|
description = "Flake for the contents of https://zerforschen.plus";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-24.11";
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05";
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue