nixpkgs/lib
Alyssa Ross 62f7a6dcc1 lib.systems.elaborate: fix passing rust
Usually, attributes passed explicitly to elaborate take precedence
over the elaborated ones, but since we also elaborate the nested
"rust" attrset, we need to push that one level down, so the rest of
"rust" is still filled in if you just pass
{ rust = { config = ... } }.

I've had to drop the assertion that checked that at most one of "rust"
and "rustc" was part of the un-elaborated system, because doing this
broke passing an elaborated system in, which should be idempotent.

For the same reason, I've also had to make it possible for
rust.rustcTargetSpec to be passed in.  Otherwise, on the second call,
since platform was filled in by the first, the custom target file
would be constructed.  The only other way to avoid this would be to
compare the platform attrs to all built in Rust targets to check it
wasn't one of those, and that isn't feasible.

Fixes: e3e57b8f18 ("lib.systems: elaborate Rust metadata")
2023-11-24 12:21:30 +01:00
..
fileset Merge pull request #266362 from tweag/fileset.fileFilter-ext 2023-11-24 00:15:43 +01:00
path lib: Take advantage of section descriptions 2023-11-20 03:02:11 +01:00
systems lib.systems.elaborate: fix passing rust 2023-11-24 12:21:30 +01:00
tests Merge pull request #266443 from amjoseph-nixpkgs/pr/lib-tests-no-aws-sdk 2023-11-19 06:17:18 +01:00
ascii-table.nix
asserts.nix lib: add asserts.assertEachOneOf 2023-11-09 17:27:20 +01:00
attrsets.nix lib: Take advantage of section descriptions 2023-11-20 03:02:11 +01:00
cli.nix
customisation.nix lib.makeOverridable: simplify function arguments preservation 2023-11-07 01:58:48 +00:00
debug.nix
default.nix Merge pull request #239722 from Stunkymonkey/lib-allUnique 2023-11-15 04:37:39 +01:00
deprecated.nix
derivations.nix
fetchers.nix
filesystem.nix lib: Take advantage of section descriptions 2023-11-20 03:02:11 +01:00
fixed-points.nix lib/fixed-points.nix: correct typo 2023-10-31 11:45:51 -07:00
flake.nix
generators.nix
gvariant.nix lib: Take advantage of section descriptions 2023-11-20 03:02:11 +01:00
kernel.nix
licenses.nix treewide: fix redirected and broken URLs 2023-11-11 10:49:01 +01:00
lists.nix lib: Take advantage of section descriptions 2023-11-20 03:02:11 +01:00
meta.nix
minver.nix
modules.nix
options.nix lib: Take advantage of section descriptions 2023-11-20 03:02:11 +01:00
README.md doc: separate commit header conventions for each area, info on docs changes. 2023-11-13 20:41:08 -08:00
source-types.nix
sources.nix lib: Take advantage of section descriptions 2023-11-20 03:02:11 +01:00
strings-with-deps.nix
strings.nix lib.strings: add replicate 2023-10-31 20:25:41 +01:00
trivial.nix 24.05 is Uakari 2023-11-21 14:34:30 -05:00
types.nix
versions.nix
zip-int-bits.nix

Nixpkgs lib

This directory contains the implementation, documentation and tests for the Nixpkgs lib library.

Overview

The evaluation entry point for lib is default.nix. This file evaluates to an attribute set containing two separate kinds of attributes:

  • Sub-libraries: Attribute sets grouping together similar functionality. Each sub-library is defined in a separate file usually matching its attribute name.

    Example: lib.lists is a sub-library containing list-related functionality such as lib.lists.take and lib.lists.imap0. These are defined in the file lists.nix.

  • Aliases: Attributes that point to an attribute of the same name in some sub-library.

    Example: lib.take is an alias for lib.lists.take.

Most files in this directory are definitions of sub-libraries, but there are a few others:

  • minver.nix: A string of the minimum version of Nix that is required to evaluate Nixpkgs.
  • tests: Tests, see Running tests
    • release.nix: A derivation aggregating all tests
    • misc.nix: Evaluation unit tests for most sub-libraries
    • *.sh: Bash scripts that run tests for specific sub-libraries
    • All other files in this directory exist to support the tests
  • systems: The lib.systems sub-library, structured into a directory instead of a file due to its complexity
  • path: The lib.path sub-library, which includes tests as well as a document describing the design goals of lib.path
  • All other files in this directory are sub-libraries

Module system

The module system spans multiple sub-libraries:

  • modules.nix: lib.modules for the core functions and anything not relating to option definitions
  • options.nix: lib.options for anything relating to option definitions
  • types.nix: lib.types for module system types

Reference documentation

Reference documentation for library functions is written above each function as a multi-line comment. These comments are processed using nixdoc and rendered in the Nixpkgs manual. The nixdoc README describes the comment format.

See the chapter on contributing to the Nixpkgs manual for how to build the manual.

Running tests

All library tests can be run by building the derivation in tests/release.nix:

nix-build tests/release.nix

Some commands for quicker iteration over parts of the test suite are also available:

# Run all evaluation unit tests in tests/misc.nix
# if the resulting list is empty, all tests passed
nix-instantiate --eval --strict tests/misc.nix

# Run the module system tests
tests/modules.sh

# Run the lib.sources tests
tests/sources.sh

# Run the lib.filesystem tests
tests/filesystem.sh

# Run the lib.path property tests
path/tests/prop.sh

# Run the lib.fileset tests
fileset/tests.sh

Commit conventions

  • Make sure you read about the commit conventions common to Nixpkgs as a whole.

  • Format the commit messages in the following way:

    lib.(section): (init | add additional argument | refactor | etc)
    
    (Motivation for change. Additional information.)
    

    Examples:

    • lib.getExe': check arguments

    • lib.fileset: Add an additional argument in the design docs

      Closes #264537