NixOS / NixOS/nix.dev

Overview of pinning techniques

Open
#907 1 comment 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

guide
Dominant language
Nix
Stars
4k
Forks
339
Avg merge
2d 11h
Merged PRs (30d)
7

Description

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.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing the listed pinning techniques and the linked article, then gather the relevant Nix documentation for each approach. Compare their features and trade-offs in an overview, making the scope and conclusions clear; the issue does not name a target file or test.

Written by the indexing model from the issue text.

Assessment

Domain
documentation
Issue type
Documentation
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.