about summary refs log tree commit diff
path: root/lib/lists.nix
AgeCommit message (Collapse)AuthorFilesLines
2018-02-09lib: implement `compare`, `splitByAndCompare`, and `compareLists`Jan Malakhovski1-0/+24
2018-02-09nixos/tests: add predictable-interface-names.nix (#34305)symphorien1-2/+6
2017-12-23Revert "nixos: doc: implement related packages in the manual"Graham Christensen1-24/+0
2017-12-07lib: implement `compare`, `splitByAndCompare`, and `compareLists`Jan Malakhovski1-0/+24
2017-09-16Convert libs to a fixed-pointGraham Christensen1-2/+2
This does break the API of being able to import any lib file and get its libs, however I'm not sure people did this. I made this while exploring being able to swap out docFn with a stub in #2305, to avoid functor performance problems. I don't know if that is going to move forward (or if it is a problem or not,) but after doing all this work figured I'd put it up anyway :) Two notable advantages to this approach: 1. when a lib inherits another lib's functions, it doesn't automatically get put in to the scope of lib 2. when a lib implements a new obscure functions, it doesn't automatically get put in to the scope of lib Using the test script (later in this commit) I got the following diff on the API: + diff master fixed-lib 11764a11765,11766 > .types.defaultFunctor > .types.defaultTypeMerge 11774a11777,11778 > .types.isOptionType > .types.isType 11781a11786 > .types.mkOptionType 11788a11794 > .types.setType 11795a11802 > .types.types This means that this commit _adds_ to the API, however I can't find a way to fix these last remaining discrepancies. At least none are _removed_. Test script (run with nix-repl in the PATH): #!/bin/sh set -eux repl() { suff=${1:-} echo "(import ./lib)$suff" \ | nix-repl 2>&1 } attrs_to_check() { repl "${1:-}" \ | tr ';' $'\n' \ | grep "\.\.\." \ | cut -d' ' -f2 \ | sed -e "s/^/${1:-}./" \ | sort } summ() { repl "${1:-}" \ | tr ' ' $'\n' \ | sort \ | uniq } deep_summ() { suff="${1:-}" depth="${2:-4}" depth=$((depth - 1)) summ "$suff" for attr in $(attrs_to_check "$suff" | grep -v "types.types"); do if [ $depth -eq 0 ]; then summ "$attr" | sed -e "s/^/$attr./" else deep_summ "$attr" "$depth" | sed -e "s/^/$attr./" fi done } ( cd nixpkgs #git add . #git commit -m "Auto-commit, sorry" || true git checkout fixed-lib deep_summ > ../fixed-lib git checkout master deep_summ > ../master ) if diff master fixed-lib; then echo "SHALLOW MATCH!" fi ( cd nixpkgs git checkout fixed-lib repl .types )
2017-07-07lib.lists.mutuallyExclusive: add functionVladimír Čunát1-0/+8
2017-07-04lib: introduce imap0, imap1 (#25543)zimbatm1-4/+10
* lib: introduce imap0, imap1 For historical reasons, imap starts counting at 1 and it's not consistent with the rest of the lib. So for now we split imap into imap0 that starts counting at zero and imap1 that starts counting at 1. And imap is marked as deprecated. See https://github.com/NixOS/nixpkgs/commit/c71e2d42359f9900ea2c290d141c0d606471da16#commitcomment-21873221 * replace uses of lib.imap * lib: move imap to deprecated.nix
2017-04-19lib: trivial spelling fixesTom Saeger1-1/+1
2017-03-19lib/lists: rename fold to foldr & improve fold docsProfpatsch1-12/+29
In order to better distinguish foldr from foldl the default name is changed to foldr, but fold is still a synonym. Additionally the docs are improved and examples added.
2016-08-29Use builtins.partition if availableEelco Dolstra1-2/+2
2016-08-23lib: introduce listDfs and toposort, add example to hasPrefixJan Malakhovski1-0/+80
2016-08-10flatten: drastically improve performance, see #17626Domen Kožar1-1/+1
2016-07-11Really remove library functionsEelco Dolstra1-4/+0
Throwing a message like "removed 2016-02-29 because unused and broken" is unhelpful because it doesn't show what function was removed.
2016-06-17Remove unecessary branching on old nix versionszimbatm1-66/+12
All these builtins are available since 1.10 or earlier (1.10 being the lib/minver.nix)
2016-05-26lib.lists: fix fold exampleDomen Kožar1-1/+1
2016-03-10lib/lists: document all functionszimbatm1-55/+217
2016-03-09Remove lib.deepSeqList and lib.deepSeqAttrszimbatm1-3/+3
Both functions are broken and unused in the repo.
2015-07-28Use builtins.sortEelco Dolstra1-2/+3
2015-07-28Use builtins.genListEelco Dolstra1-49/+90
This fixes the quadratic complexity of functions like imap.
2015-07-28Remove zipTwoListsEelco Dolstra1-14/+0
This function is redundant (we also have zipLists).
2015-07-24Use builtin all and any functionsEelco Dolstra1-2/+2
2015-07-23Use foldl' instead of fold in some placesEelco Dolstra1-2/+6
2015-03-21Revert "Reverts a bunch of commits as a try to fix GC errors."Jaka Hudoklin1-3/+3
This reverts commit 1e4ba025c260fa6852765e9f5c59e985f10c6a43. Conflicts: pkgs/development/web/nodejs/build-node-package.nix
2015-03-17Reverts a bunch of commits as a try to fix GC errors.Domen Kožar1-3/+3
Commits - 694f01db2d2e1cde06ee243a5909d196e84f0a18 - 829479d1dda5dbb579885e16dc655716127457ed - bd81885f706dae5cdeb8c03845fa43d8b74fa57c - b2fdcf801ce08bf0c44e63bafe8ae2c720704da7
2015-03-04intersect -> intersectLists, subtract -> subtractListsEelco Dolstra1-2/+2
2015-03-04substract -> subtractEelco Dolstra1-2/+2
2015-02-28lib/lists: add intersect and substract functionsJaka Hudoklin1-0/+5
2014-11-12Add `unique` list functionRicardo M. Correia1-0/+10
It removes duplicate elements from a list.
2014-10-05lib: Use arithmetic operators rather than builtins.add etc.Eelco Dolstra1-28/+20
2014-09-16init list helperEdward Tjörnhammar1-0/+4
2014-04-14gnome3: use package names for environment.gnome3.excludePackagesLuca Bruno1-2/+0
2014-04-09Add environment.gnome3.excludePackagesLuca Bruno1-0/+3
Give the user a full desktop, and the possibility to exclude non-base packages from the default list of packages.
2013-12-12Simplify crossListsShea Levy1-6/+1
Signed-off-by: Shea Levy <shea@shealevy.com>
2013-12-12Add function to call a function with a cross-product of lists of argumentsShea Levy1-0/+6
Signed-off-by: Shea Levy <shea@shealevy.com>
2013-11-12Remove backward-compatible implementations of some primopsEelco Dolstra1-19/+1
Nixpkgs requires at least Nix 1.2 anyway, so these are now useless.
2013-11-12Add some primops to libEelco Dolstra1-16/+21
2013-10-28Keep position information for option declarations and definitionsEelco Dolstra1-0/+5
Also, when an option definition fails to type-check, print the file name of the module in which the offending definition occurs, e.g. error: user-thrown exception: The option value `boot.loader.grub.version' in `/etc/nixos/configuration.nix' is not a integer.
2013-10-28Big cleanup of the NixOS module systemEelco Dolstra1-2/+3
The major changes are: * The evaluation is now driven by the declared options. In particular, this fixes the long-standing problem with lack of laziness of disabled option definitions. Thus, a configuration like config = mkIf false { environment.systemPackages = throw "bla"; }; will now evaluate without throwing an error. This also improves performance since we're not evaluating unused option definitions. * The implementation of properties is greatly simplified. * There is a new type constructor "submodule" that replaces "optionSet". Unlike "optionSet", "submodule" gets its option declarations as an argument, making it more like "listOf" and other type constructors. A typical use is: foo = mkOption { type = type.attrsOf (type.submodule ( { config, ... }: { bar = mkOption { ... }; xyzzy = mkOption { ... }; })); }; Existing uses of "optionSet" are automatically mapped to "submodule". * Modules are now checked for unsupported attributes: you get an error if a module contains an attribute other than "config", "options" or "imports". * The new implementation is faster and uses much less memory.
2013-10-24Manual: When building from the channel, link to the exact Git revisionEelco Dolstra1-2/+2
2013-10-10Move pkgs/lib/ to lib/Eelco Dolstra1-0/+235