NixOS/nix.dev

Overview of pinning techniques

fricklerhandwerk opened this issue · 0 comments

Observations
There are > 5 ways to handle dependencies in Nix expressions:

  • Lookup paths and their various syntaxes (<nixpkgs>, -I, NIX_PATH)
  • Channels
  • Paths to Git submodules
  • Built-in fetchers (fetchurl, fetchTarball, fetchGit, ...)
  • Nixpkgs fetchers (pkgs.fetchFromGitHub, ...)
  • Flakes
  • npins
  • niv
  • gridlock
  • Don't even get me started on modules

I likely forgot some...

Problem

  • These are too many
  • They have different trade-offs
  • None of them is clearly superior, but some are clearly inferior

Approaches
We can't fix it before we understand what's wrong.

Make an overview along the lines of Why are there five ways of getting software?. List features and trade-offs.

Willing to help?
Very likely there is no way around it.

Priorities

Add 👍 to issues you find important.