summary refs log tree commit diff
path: root/lib
AgeCommit message (Collapse)AuthorFilesLines
2021-11-22modules: Add moduleType to module argumentsRobert Hensing4-0/+39
2021-11-22modules: Document that extendModules is also a module argumentRobert Hensing1-0/+2
2021-11-15lib.modules: add mkDerivedConfigTaeer Bar-Yam2-1/+21
mkDerivedConfig : Option a -> (a -> Definition b) -> Definition b Create config definitions with the same priority as the definition of another option. This should be used for option definitions where one option sets the value of another as a convenience. For instance a config file could be set with a `text` or `source` option, where text translates to a `source` value using `mkDerivedConfig options.text (pkgs.writeText "filename.conf")`. It takes care of setting the right priority using `mkOverride`.
2021-11-10lib/systems: add x86_64-darwin hostPlatformJonathan Ringer1-0/+6
2021-11-09lib/tests/sources: update to Nix 2.4 cli syntaxBernardo Meurer2-3/+7
2021-11-09lib/tests/modules.sh: update to Nix 2.4 syntaxBernardo Meurer1-12/+12
2021-11-02lib: fix escapeXML example in documentationRobert Helgesson1-1/+1
The previous example output was forgotten copy-paste from some other function.
2021-11-02Merge pull request #144072 from ↵Ben Siraphob1-5/+2
polykernel/lib-lists-mutuallyexclusive-optimization
2021-11-01lib/lists: mutuallyExclusive function optimizationpolykernel1-5/+2
The current implementation of `mutuallyExclusive` builds a new list with length subtracted by one on every recursive call which is expensive. When b is empty, the function still traverses a in its entirety before returning a result. The new implementation uses `any` to check if each element of list b is in list a using `elem`. This maintains short circuiting when list a or b is empty and has a worst case time complexity of O(nm).
2021-11-01modules: Update evalModules docRobert Hensing1-3/+26
2021-11-01modules: Add visible = "shallow" to hide only sub-optionsRobert Hensing1-3/+7
2021-11-01modules: Add extendModules to module argsRobert Hensing1-15/+19
2021-11-01lib.evalModules: Add extendModules and type to resultRobert Hensing4-33/+85
Allows the simultaneous construction of top-level invocations and submodule types. This helps structure configuration systems integration code.
2021-10-28Merge pull request #139284 from r-burns/powernv-kernel-configRyan Burns1-3/+5
lib/systems: update powernv kernel config
2021-10-21Merge pull request #141789 from pennae/eval-optSilvan Mosberger2-4/+3
lib: make extendDerivation lighter on eval
2021-10-15licenses: add CAPECMarkus S. Wamser1-0/+5
2021-10-15lib: make extendDerivation lighter on evalpennae2-4/+3
the fix to extendDerivation in #140051 unwittingly worsened eval performance by quite a bit. set elements alone needed over 1GB extra after the change, which seems disproportionate to how small it was. if we flip the logic used to determine which outputs to install around and keep a "this one exactly" flag in the specific outputs instead of a "all of them" in the root we can avoid most of that cost.
2021-10-13Merge pull request #140763 from hercules-ci/abort-on-warnRobert Hensing1-1/+20
lib.warn: Add NIX_ABORT_ON_WARN for call traces
2021-10-13lib.warn: Add NIX_ABORT_ON_WARN for call tracesRobert Hensing1-1/+20
2021-10-06lib.systems.supported.tier3: add aarch64-darwinzimbatm1-0/+1
aarch64-darwin is getting built by hydra
2021-10-05Merge pull request #140284 from Infinisil/types-anything-lambdasSilvan Mosberger3-4/+18
lib/types: Make types.anything merge functions
2021-10-05lib: add list of supported systems (#140428)Jonas Chevalier2-0/+25
Adds the first 3 tiers of RFC0046 that are being used in flake.nix.
2021-10-04Merge pull request #136909 from ncfavier/cleanup-defaults-examplesRobert Hensing2-7/+21
nixos/doc: clean up defaults and examples
2021-10-03Merge pull request #140136 from rnhmjoj/matrix-idsMichele Guerini Rocco1-0/+4
maintainers/maintainers-list: add Matrix IDs
2021-10-03lib/options: add literalExpression and literalDocBook, deprecate literalExampleNaïm Favier2-7/+21
2021-10-03lib: add function escapeXMLRobert Helgesson3-1/+19
Given a string, this function returns a string that can be inserted verbatim in an XML document.
2021-10-02Merge pull request #140051 from pennae/extend-derivationSilvan Mosberger1-1/+2
fix nested calls to extendDerivation
2021-10-02lib/types: Make types.anything merge functionsSilvan Mosberger3-4/+18
Previously it would give an error if there were multiple function definitions.
2021-10-01lib/tests/maintainers: add matrix optionrnhmjoj1-0/+4
2021-09-30ocamlPackages.lustre-v6: init at 6.103.3Delta1-0/+5
2021-09-30fix nested calls to extendDerivationpennae1-1/+2
if extendDerivation is called on something that already had extendDerivation called on it (eg a mkDerivation result) the second call will set outputUnspecified=true on every output by way of propagating attributes of the full derivation to the individual outputs. this in turn causes buildEnv--and thus nix-shell and environment.systemPackages--to install every output of such a derivation even when only a specific output was requested, which renders the point of multiple outputs moot. this happens in python modules (see #139756), though it seems that tcl and possibly others should also be affected.
2021-09-29Merge pull request #131205 from Ma27/showdefs-overflowLinus Heckemann4-9/+66
lib/modules: improve errors for `options`/`config`-mixups
2021-09-28lib/systems: update powernv kernel configRyan Burns1-3/+5
PowerNV was looking for a nonexisting zImage file. Remove unnecessary .file / .installTarget. Also add config options needed for default minimal NixOS config and QEMU VirtIO/VirtFS devices.
2021-09-28lib/generators: fix error messageMaximilian Bosch1-2/+2
2021-09-17lib.cleanSource: ignore socketsAlyssa Ross1-1/+3
I'm working on a project that involves running a virtual machine monitor program, which creates a control socket in the project directory (because it doesn't make sense to put it anywhere else). This obviously isn't part of the source of my program, so I think cleanSource should filter it out.
2021-09-12lib.generators.toINI: serialize derivations to stringzimbatm1-0/+2
This is the common case when passing a derivation, we want to access the store path.
2021-09-12lib.generators.toGitINI: don't traverse derivationszimbatm1-1/+1
Consider a derivation a value to be serialized. nix-repl> lib.generators.toGitINI { hello = { drv = pkgs.hello; }; } error: evaluation aborted with the following error message: 'generators.mkValueStringDefault: attrsets not supported: <derivation /nix/store/533q15q67sl6dl0272dyi7m7w5pwkkjh-hello-2.10.drv>' Fixes #137390
2021-09-09lib/systems: add minimal s390x-linux cross-compile supportSergei Trofimovich5-3/+10
Tested basic functionality as: $ nix-build --arg crossSystem '{ config = "s390x-unknown-linux-gnu"; }' -A re2c $ file ./result/bin/re2c $ ./result/bin/re2c: ELF 64-bit MSB executable, IBM S/390, version 1 (SYSV), dynamically linked, interpreter ...-gnu-2.33-50/lib/ld64.so.1, for GNU/Linux 2.6.32, not stripped $ qemu-s390x ./result/bin/re2c --version re2c 2.2
2021-08-26lib/strings: fix infinite recursion on concatStringsSep fallbackpolykernel1-1/+1
The current implementation of the concatStringsSep fallback references concatStrings whcih is just a partial application of concatStringsSep, forming a circular dependency. Although this will almost never be encountered as (assuming the user does not explicitly trigger it): 1. the or operator will short circuit both in lazy and strict evaluation 2. this can only occur in Nix versions prior to 1.10 which is not compatible with various nix operations as of 2.3.15 However it is still important if scopedImport is used or the builtins have been overwritten. lib.foldl' is used instead of builtins.foldl' as the foldl' primops was introduced in the same release as concatStringsSep.
2021-08-26Merge pull request #135794 from shlevy/composeManyFlakeCompatRobert Hensing1-5/+5
lib.compose{Many,}Extensions: Make compatible with nix flake check
2021-08-26replace dead linksPaul-Nicolas Madelaine1-2/+2
2021-08-26lib.compose{Many,}Extensions: Make compatible with nix flake checkShea Levy1-5/+5
2021-08-26lib/modules: grammar fix in error msgMaximilian Bosch1-1/+1
2021-08-26lib/generators: move limit detection into `withRecursion`Maximilian Bosch3-19/+37
As suggested in #131205. Now it's possible to pretty-print a value with `lib.generators` like this: with lib.generators; toPretty { } (withRecursion { depthLimit = 10; } /* arbitrarily complex value */) Also, this can be used for any other pretty-printer now if needed.
2021-08-25lib/modules: fix error-message when declaring an option inside `config'Maximilian Bosch1-7/+18
The message I originally implemented here was to catch a mixup of `config' and `options' in a `types.submodule'[1]. However it looks rather weird for a wrongly declared top-level option. So I decided to throw error: The option `foo' does not exist. Definition values: - In `<unknown-file>': { bar = { _type = "option"; type = { _type = "option-type"; ... It seems as you're trying to declare an option by placing it into `config' rather than `options'! for an expression like with import ./lib; evalModules { modules = [ { foo.bar = mkOption { type = types.str; }; } ]; } [1] fa30c9abed61f30218a211842204705986d486f9
2021-08-25lib/options: use `depthLimit` for `toPretty` when showing a definitionMaximilian Bosch1-1/+1
When having a bogus declaration such as { lib, ... }: { foo.bar = mkOption { type = types.str; }; } the evaluation will terminate with a not-so helpful error: stack overflow (possible infinite recursion) To make sure a useful error is still provided, I added a `depthLimit` of `10` which should be perfectly sufficient to `toPretty` when it's used in an error-case for `showDefs`.
2021-08-25lib/generators/toPretty: add evaluation-limitMaximilian Bosch2-7/+35
When having e.g. recursive attr-set, it cannot be printed which is solved by Nix itself like this: $ nix-instantiate --eval -E 'let a.b = 1; a.c = a; in builtins.trace a 1' trace: { b = 1; c = <CYCLE>; } 1 However, `generators.toPretty` tries to evaluate something until it's done which can result in a spurious `stack-overflow`-error: $ nix-instantiate --eval -E 'with import <nixpkgs/lib>; generators.toPretty { } (mkOption { type = types.str; })' error: stack overflow (possible infinite recursion) Those attr-sets are in fact rather common, one example is shown above, a `types.<type>`-declaration is such an example. By adding an optional `depthLimit`-argument, `toPretty` will stop evaluating as soon as the limit is reached: $ nix-instantiate --eval -E 'with import ./Projects/nixpkgs-update-int/lib; generators.toPretty { depthLimit = 2; } (mkOption { type = types.str; })' |xargs -0 echo -e "{ _type = \"option\"; type = { _type = \"option-type\"; check = <function>; deprecationMessage = null; description = \"string\"; emptyValue = { }; functor = { binOp = <unevaluated>; name = <unevaluated>; payload = <unevaluated>; type = <unevaluated>; wrapped = <unevaluated>; }; getSubModules = null; getSubOptions = <function>; merge = <function>; name = \"str\"; nestedTypes = { }; substSubModules = <function>; typeMerge = <function>; }; }" Optionally, it's also possible to let `toPretty` throw an error if the limit is exceeded.
2021-08-23lib: optimize setAttrByPath and cleaup importspolykernel1-6/+9
- Remove inheritance of `lists.fold` as it isn't used anywhere. - Inherit `foldl'` for consistency as only `cartesianProductOfSets` explicitly reference lib. - Inline `foldr` to generate nested attrs instead of using `listToAttrs` and `tail`.
2021-08-22lib: export strings/escapeRegexHarrison Houghton1-1/+1
I see no reason why I should be disallowed from using it.
2021-08-21Merge pull request #134763 from r-burns/fix-scalewayLuke Granger-Brown1-1/+1
lib/systems: fix scaleway-c1 platform