forked from Fediversity/meta
Compare commits
3 commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
59baadce26 | ||
![]() |
a2a75f678e | ||
![]() |
aaa436dedb |
1 changed files with 44 additions and 0 deletions
44
architecture-docs/on-flakes.md
Normal file
44
architecture-docs/on-flakes.md
Normal file
|
@ -0,0 +1,44 @@
|
|||
# Use more principled dependency management than flakes
|
||||
|
||||
As per [nix.dev](https://nix.dev/concepts/flakes#should-i-use-flakes-in-my-project):
|
||||
|
||||
> Flakes emphasize reproducible artifacts and convenience for their consumers, while classic Nix tools center around composable building blocks and customisation options for developers.
|
||||
|
||||
We have currently used nix flakes to:
|
||||
|
||||
- manage project dependencies
|
||||
- specify:
|
||||
|
||||
Parts of our project that touch upon flakes:
|
||||
|
||||
- our dependency management
|
||||
- how we interface with dependencies
|
||||
- how we (might) expose packages at upstream repositories, to facilitate e.g. `nix run`
|
||||
- the interface we expose (to users + nixops4)
|
||||
- architectures
|
||||
- formatter
|
||||
- checks
|
||||
- pre-commit hooks
|
||||
- development shell
|
||||
- configuration for nixos / nixops
|
||||
|
||||
Flakes aim to address various topics at once - as per their [introduction](https://www.tweag.io/blog/2020-05-25-flakes/#what-problems-do-flakes-solve) including composability, reproducibility, offering a consistent UI, and discoverability. [Technical issues](https://discourse.nixos.org/t/nix-flakes-is-an-experiment-that-did-too-much-at-once/32707/3) aside, they have drawn criticism including:
|
||||
|
||||
- [trying too many things at once](https://samuel.dionne-riel.com/blog/2023/09/06/flakes-is-an-experiment-that-did-too-much-at-once.html) (Unix philosophy)
|
||||
- [dependency explosion, no support to pass arguments, eagerly copying flake directories to the store, bad UX](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/2)
|
||||
- [locking dependencies of subprojects](https://jade.fyi/blog/flakes-arent-real/)
|
||||
<!-- - [inability to patch flakes](https://github.com/NixOS/rfcs/pull/49#pullrequestreview-262606855) -->
|
||||
<!-- - [complexity](https://news.ycombinator.com/item?id=40060403) -->
|
||||
<!-- - [no parameterization, defying Unix philosophy](https://nix.dev/concepts/flakes#why-are-flakes-controversial) -->
|
||||
<!-- - [not awaiting RFC process](https://discourse.nixos.org/t/why-are-flakes-still-experimental/29317/12) -->
|
||||
<!-- - [integration into Nix core](https://discourse.nixos.org/t/introducing-flakehub/32044/52) -->
|
||||
<!-- - [making semantic versioning part of commercial project Flakehub rather than of Nix itself](https://discourse.nixos.org/t/introducing-flakehub/32044/31) -->
|
||||
<!-- - [commercial interests](https://discourse.nixos.org/t/introducing-flakehub/32044/24) -->
|
||||
<!-- - [open letter](https://save-nix-together.org/): undermining community processes by declaring flakes stable -->
|
||||
|
||||
Alternatives:
|
||||
|
||||
- dependency management: after a [bug](https://github.com/andir/npins/issues/57) fix maybe better done using `npins`, which makes this more explicit, while flakes' caching may help for say Nixpkgs
|
||||
- how we interface with dependencies: mostly can be done without flakes, which may in fact help prevent pulling in recursive dependencies we do not use
|
||||
- how we (might) expose packages at upstream repositories, to facilitate e.g. `nix run`: no good alternatives for `nix run` exist [currently](https://github.com/NixOS/nix/pull/4702#issuecomment-2233787312), aside from it seeming preferable to defer deviating from the norm here to community RFCs
|
||||
- the interface we expose: flakes ignore unstaged files, cache at the cost of eagerly copying flake directories to the store, don't support passing arguments, make it harder to evaluate just part of a project
|
Loading…
Add table
Reference in a new issue