about summary refs log tree commit diff
path: root/lib/types.nix
AgeCommit message (Collapse)AuthorFilesLines
2020-10-26lib/types.nix: fix missing inheritKeshav Kini1-0/+3
I think there was a silent (i.e. semantic) merge conflict between PR #101139 and PR #100456. This commit should fix the error, which manifests as follows: error: undefined variable 'boolToString' at /home/kkini/src/nixpkgs/lib/types.nix:552:42
2020-10-26Merge pull request #101139 from roberth/lib-use-static-scope-checkingRobert Hensing1-6/+56
lib: Use Nix's static scope checking, fix error message, optimize
2020-10-22lib: Use Nix's static scope checking, fix error message, optimizeRobert Hensing1-5/+55
Nix can perform static scope checking, but whenever code is inside a `with` expression, the analysis breaks down, because it can't know statically what's in the attribute set whose attributes were brought into scope. In those cases, Nix has to assume that everything works out. Except it doesnt. Removing `with` from lib/ revealed an undefined variable in an error message. If that doesn't convince you that we're better off without `with`, I can tell you that this PR results in a 3% evaluation performance improvement because Nix can look up local variables by index. This adds up with applications like the module system. Furthermore, removing `with` makes the binding site of each variable obvious, which helps with comprehension.
2020-10-22lib/types.nix: Use // instead of mergeAttrsRobert Hensing1-1/+1
2020-10-14treewide: De-inline uses of lib.boolToStringMalte Brandy1-1/+1
This commit should not change eval results
2020-10-03lib/types: Fix type description of bool enum valuesSilvan Mosberger1-0/+1
Previously bool values would show as <bool>
2020-09-21lib/types: Remove unreachable if branchSilvan Mosberger1-10/+8
The type's check function already ensured that it can't be passed non-lists
2020-09-21Merge pull request #97119 from Infinisil/types.anythingRobert Hensing1-0/+36
Introduce `types.anything`
2020-09-15lib/types: Introduce types.anythingSilvan Mosberger1-0/+36
This new type has unsurprising merge behavior: Only attribute sets are merged together (recursively), and only if they don't conflict. This is in contrast to the existing types: - types.attrs is problematic because later definitions completely override attributes of earlier definitions, and it doesn't support mkIf and co. - types.unspecified is very similar to types.attrs, but it has smart merging behavior that often doesn't make sense, and it doesn't support all types
2020-09-07Merge pull request #97114 from Infinisil/type-deprecationSilvan Mosberger1-15/+16
Better type deprecation messages
2020-09-07Merge pull request #97042 from Infinisil/freeform-option-docsSilvan Mosberger1-1/+6
Show sub options of freeform types
2020-09-07lib/types: Set deprecationMessage for types.optionSetSilvan Mosberger1-1/+2
2020-09-07lib/types: Set deprecationMessage for types.loaOfSilvan Mosberger1-8/+6
2020-09-07lib/types: Set deprecationMessage for types.stringSilvan Mosberger1-2/+4
2020-09-07lib/types: Remove types.list, it's been deprecated long enoughSilvan Mosberger1-3/+0
Has been deprecated since fd803fce606a007403ba6d05f09ed2e6a3371830 (2013-08-22)
2020-09-07lib/types: Allow types to emit a deprecation warningSilvan Mosberger1-1/+4
Previously the only way to deprecate a type was using theType = lib.warn "deprecated" (mkOptionType ...) This caused the warning to be emitted when the type was evaluated, but the error didn't include which option actually used that type. With this commit, types can specify a deprecationMessage, which when non-null, is printed along with the option that uses the type
2020-09-03lib/types: Show sub options of freeform typesSilvan Mosberger1-1/+6
Previously if you set the freeform type to e.g. attrsOf (submodule ..), those submodule options wouldn't be shown in the manual.
2020-09-02treewide: completely remove types.loaOfrnhmjoj1-106/+11
2020-08-03lib/types: Make submodules use the freeform type descriptionSilvan Mosberger1-0/+6
Submodules that have a freeform type set behave as if that was the type of the option itself (for values that don't have an option). Since the submodules options are shown as separate entries in the manual, it makes sense to show the freeform type as the submodule type.
2020-01-15Replace short URL from #63103 with full URL.Drew Hess1-1/+1
The error message is already helpfully verbose, so there's little reason to shorten the informational URL.
2020-01-14lib/types: prioritise coercedType in coercedToarcnmx1-4/+4
This more intuitively matches `types.either` and allows paths to be coerced to submodules again, which was inhibited by #76861
2020-01-12lib/types: dont warn loaOf for home-manager namespaceworldofpeace1-12/+0
This option namespace is not a part of NixOS so we shouldn't provide this warning for it.
2020-01-12Merge pull request #77501 from jtojnar/more-loaof-fxesJan Tojnar1-5/+67
tree-wide: fix more warning related to loaOf deprecation
2020-01-12Merge pull request #76861 from Infinisil/paths-as-submodulesRobert Hensing1-3/+5
lib/types: Allow paths as submodule values
2020-01-11lib/types: improve loaOf message even moreJan Tojnar1-7/+64
Now we suggest correct names for all options in Nixpkgs and also home-manager at the time of writing.
2020-01-11lib/types: only show ... in loaOf warning when necessaryJan Tojnar1-2/+3
2020-01-11lib/types: improve loaOf warningJan Tojnar1-3/+7
Not all modules use name attribute as the name of the submodule, for example, environment.etc uses target. We will need to maintain a list of exceptions.
2020-01-10lib/types: Introduce lazyAttrsOfSilvan Mosberger1-0/+24
The standard attrsOf is strict in its *values*, meaning it's impossible to access only one attribute value without evaluating all others as well. lazyAttrsOf is a version that doesn't have that problem, at the expense of conditional definitions not properly working anymore.
2020-01-10lib/types: Add emptyValue attribute to typesSilvan Mosberger1-2/+18
Co-Authored-By: Robert Hensing <roberth@users.noreply.github.com>
2020-01-08lib/types: Allow paths as submodule valuesSilvan Mosberger1-3/+5
2020-01-07Merge pull request #77133 from Infinisil/fix-path-checkSilvan Mosberger1-2/+1
lib/types: Fix path type check
2020-01-06lib/types: Fix path type checkSilvan Mosberger1-2/+1
Previously when this function was called without a value coercible to a string it would throw an error instead of returning false. Now it does. As a result this now allows the use of a type like `either path attrs` without it erroring out when a definition is an attribute set. The warning about there not being a isPath primop was removed because this is not the case anymore, there is builtins.isPath. But also there always was `builtins.typeOf x == "path"` that could've been used instead. However the path type now stands for more than just path types, but absolute paths in general.
2020-01-06lib/types: warn loaOf is deprecatedrnhmjoj1-12/+29
2020-01-03Revert "lib/types: Allow paths as submodule values"Silvan Mosberger1-5/+3
This reverts commit eec83d41e3e7d9ad5bc1086198d972d55bab1203. This broke hydra evaluation because with this commit submodule values are allowed to be paths, however the certmgr module uses `either (submodule ...) path` in its type, meaning it already used paths for something else which would now be interpreted as a submodule.
2020-01-02lib/types: Allow paths as submodule valuesSilvan Mosberger1-3/+5
2020-01-01lib/types: Add types.submoduleWith for more flexibility than types.submoduleSilvan Mosberger1-15/+47
2019-09-02Merge branch 'master' into stagingVladimír Čunát1-1/+2
2019-08-31lib/types: Make usage of types.string emit a warningSilvan Mosberger1-1/+2
2019-08-28treewide: remove redundant recvolth1-3/+3
2019-08-26treewide: remove redundant quotesvolth1-1/+1
2019-08-13Merge pull request #65728 from Infinisil/types-eithersAaron Andersen1-0/+7
lib/types: Add oneOf, extension of either to a list of types
2019-08-06lib/types: Add oneOf, extension of either to a list of typesSilvan Mosberger1-0/+7
2019-07-25lib/types: change merge strategy for `str`, `int`, `float` and `enum`danbst1-5/+5
Change to `mergeEqualOption`.
2019-03-07module system: revert "remove types.optionSet", just deprecate (#56857)Danylo Hlynskyi1-2/+4
The explicit remove helped to uncover some hidden uses of `optionSet` in NixOps. However it makes life harder for end-users of NixOps - it will be impossible to deploy 19.03 systems with old NixOps, but there is no new release of NixOps with `optionSet` fixes. Also, "deprecation" process isn't well defined. Even that `optionSet` was declared "deprecated" for many years, it was never announced. Hence, I leave "deprecation" announce. Then, 3 releases after announce, we can announce removal of this feature. This type has to be removed, not `throw`-ed in runtime, because it makes some perfectly fine code to fail. For example: ``` $ nix-instantiate --eval -E '(import <nixpkgs/lib>).types' --strict trace: `types.list` is deprecated; use `types.listOf` instead error: types.optionSet is deprecated; use types.submodule instead (use '--show-trace' to show detailed location information) ```
2019-01-31types.optionSet: deprecate and remove last usagesdanbst1-4/+1
2019-01-30lib/types.nix: small eval optimization (listToAttrs + mapAttrsToList -> ↵danbst1-2/+1
mapAttrs)
2018-10-18Add type port as an alias to u16Daniel Rutz1-0/+3
2018-10-12lib/types: enhances separatedString's descriptionSamuel Dionne-Riel1-1/+4
The previous description "string" is misleading in the full options manual pages; they are actually concatenated strings, with a specific character. The empty string version ("types.string") has been special-cased to provide a better message.
2018-09-06lib: move assertMsg and assertOneOf to their own library fileProfpatsch1-1/+1
Since the `assertOneOf` uses `lib.generators`, they are not really trivial anymore and should go into their own library file.
2018-09-06lib/trivial: add a few examples of usage of assertMsg/assertOneOfProfpatsch1-2/+6