about summary refs log tree commit diff
path: root/lib/types.nix
Commit message (Collapse)AuthorAge
* Convert libs to a fixed-pointGraham Christensen2017-09-16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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 )
* lib: introduce imap0, imap1 (#25543)zimbatm2017-07-04
| | | | | | | | | | | | | | | | * 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
* types: add short docstringsNikolay Amiantov2017-05-25
| | | | Fixes #26055
* nixos doc: document coercedTo typeNikolay Amiantov2017-05-24
| | | | | | | Also mention about docs in types.nix and fix a small error in related documentation. Fixes #26055.
* lib: trivial spelling fixesTom Saeger2017-04-19
|
* Get rid of all `with { inherit... }` and just used `let inherit...`John Ericson2017-03-30
| | | | | | The old forms presumably predates, or were made in ignorance of, `let inherit`. This way is better style as the scoping as more lexical, something which Nix can (or might already!) take advantage of.
* lib: fix mixed tab/space indents, trailing whitespace, etcBenjamin Staffin2017-03-11
| | | | | | Nix style seems to have settled on not using spaces between bound variable names and the lambda : so I also tried to make those somewhat more consistent throughout.
* types library: add coercedToNikolay Amiantov2017-02-02
|
* either type: improve merge functionEric Sagnes2016-11-08
|
* module system: extensible option typesEric Sagnes2016-11-06
|
* optionSet type: enable deprecation messageEric Sagnes2016-09-13
|
* Use shell packages to select the user's shellzimbatm2016-06-12
| | | | The string type is still available for backward-compatiblity.
* Improve types.listOf error messageEelco Dolstra2016-05-25
| | | | | | | | | | If an option value is not a list, you now get The option value `bla' in `file.nix' is not a list. rather than value is a string while a list was expected, at .../nixpkgs/lib/lists.nix:49:56
* lib/types: Revert handling submodules for "either"aszlig2016-03-19
| | | | | | | | | | | | | This reverts commit 0f0805b, because @nbp had concerns about whether this would be a good idea and pointed out problems with this. We currently do not have a case where "either" is used in conjunction with submodules, but I'm reverting it anyway to prevent people from adding options using that type in that way. This is now being reviewed in #14053. Signed-off-by: aszlig <aszlig@redmoonstudios.org>
* lib/types: Handle submodules for type "either"aszlig2016-03-19
| | | | | | | | | | | | | | | | | So far the "either" type only handled "flat" types, so you couldn't do something like: type = either int (submodule { options = ...; }); Not only caused this the submodule's options not being checked but also not show up in the documentation. This was something we stumbled on with #13916. Signed-off-by: aszlig <aszlig@redmoonstudios.org> Cc: @edolstra
* Revert "Add the tool "nixos-typecheck" that can check an option declaration to:"Eelco Dolstra2016-03-01
| | | | | | This reverts commit cad8957eabcbf73062226d28366fd446c15c8737. It breaks NixOps, but more importantly, such major changes to the module system really need to be reviewed.
* Add the tool "nixos-typecheck" that can check an option declaration to:Thomas Strobel2016-02-29
| | | | | | | | | | | | | | - Enforce that an option declaration has a "defaultText" if and only if the type of the option derives from "package", "packageSet" or "nixpkgsConfig" and if a "default" attribute is defined. - Enforce that the value of the "example" attribute is wrapped with "literalExample" if the type of the option derives from "package", "packageSet" or "nixpkgsConfig". - Warn if a "defaultText" is defined in an option declaration if the type of the option does not derive from "package", "packageSet" or "nixpkgsConfig". - Warn if no "type" is defined in an option declaration.
* lib/types: Set name of types.package to "package"aszlig2016-02-17
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Nobody seems to have noticed this (except @Profpatsch) that options with a "package" type do not get included in the manual. So debugging this was a bit more involving because while generating the manual there is an optionList' attribute built from the collected attributes of all the option declarations. Up to that point everything is fine except if it comes to builtins.toXML, where attributes with { type = "derivation" } won't get included, for example see here: nix-repl> builtins.toXML { type = "derivation"; foo = "bar"; } "<?xml version='1.0' encoding='utf-8'?>\n<expr>\n <derivation> <repeated />\n </derivation>\n</expr>\n" nix-repl> builtins.toXML { type = "somethingelse"; foo = "bar"; } "<?xml version='1.0' encoding='utf-8'?>\n<expr>\n <attrs> <attr name=\"foo\">\n <string value=\"bar\" />\n </attr> <attr name=\"type\">\n <string value=\"somethingelse\" /> </attr>\n </attrs>\n</expr>\n" The following function in libexpr/eval.cc (Nix) is responsible for toXML dropping the attributes: bool EvalState::isDerivation(Value & v) { if (v.type != tAttrs) return false; Bindings::iterator i = v.attrs->find(sType); if (i == v.attrs->end()) return false; forceValue(*i->value); if (i->value->type != tString) return false; return strcmp(i->value->string.s, "derivation") == 0; } So I've renamed this now to "package" which is not only more consistent with the option type but also shouldn't cause similar issues anymore. Tested this on base of b60ceea, because building the dependencies on recent libc/staging changes on master took too long. Signed-off-by: aszlig <aszlig@redmoonstudios.org> Reported-by: Profpatsch <mail@profpatsch.de>
* Use x == null instead of builtins.isNull xIgor Pashev2015-12-04
|
* Allow enum of integers (and any other type)Igor Pashev2015-12-04
| | | | Closes #9826.
* nixos,lib: move environment generation related copy-paste to libJan Malakhovski2015-09-18
|
* Revert change of path typeBenno Fünfstück2015-08-15
| | | | The change caused lots of evaluation errors, since it caused derivations to no longer be valid paths as well.
* types.nix: better error message for non-pathsBenno Fünfstück2015-08-15
| | | | | | | | | | | | | | | | This improves error messages when a set or a list is used where a path was expected. For an example, if you used a package set (as opposed to a single package) in systemPackages before this commit, the error was: ``` cannot coerce a list to a string, at "/home/nixpkgs/lib/types.nix":103:37 ``` Now, the error message reads: ``` The option value `environment.systemPackages' in `/etc/nixos/configuration.nix' is not a list of paths. ```
* Allow options with type "package" to be store pathsEelco Dolstra2015-08-07
| | | | | | | | For example, this allows writing nix.package = /nix/store/786mlvhd17xvcp2r4jmmay6jj4wj6b7f-nix-1.10pre4206_896428c; Also, document types.package in the manual.
* Use foldl' instead of fold in some placesEelco Dolstra2015-07-23
|
* Make types.bool complain on conflicting definitionsEelco Dolstra2015-06-15
| | | | | | | Previously, conflicting definitions would merge to "true". Now they give an error, e.g. error: The option `hardware.enableAllFirmware' has conflicting definitions, in `/etc/nixos/configurations/misc/eelco/stuff.nix' and `/etc/nixos/configurations/misc/eelco/mandark.nix'.
* Document and rename internal option of modules.Nicolas B. Pierron2015-03-15
|
* Share common code for merging option definitions.Nicolas B. Pierron2015-03-12
| | | | | | | This move idioms which were used in `evalOptionValue` and in the `merge` functions of `listOf` and `attrsOf` types, such that we can use a names such as `isDefined` and `optionalValue` instead or repeating identical comparisons of `defsFinal == []`.
* Add comments about the module system interfaceShea Levy2015-03-12
| | | | | | | Ideally the module system could be configured pretty much completely by the contents of the modules themselves, so add comments about avoiding complicating it further and possibly removing now-redundant configurability from the existing interface.
* types.loaOf: Update check functionShea Levy2015-03-12
| | | | | This symplifies typechecking and allows properties to be used inside the function body. It also makes possible checking the type of the result.
* types.attrsOf: Use mergeDefinitions to handle each elementShea Levy2015-03-12
| | | | | | | | This simplifes typechecking and allows properties to be used inside of the attribute sets. This fixes the empty synergy-client and synergy-server services previously generated on systems with synergy disabled.
* types.listOf: Use mergeDefinitions to handle each elementShea Levy2015-03-12
| | | | This simplifies typechecking and allows properties to be used inside the lists
* Remove types.functionTo.Nicolas Pierron2014-09-07
|
* Merge options having the submodule type.Nicolas Pierron2014-09-07
| | | | | | | | | | Now we should be able to have multiple declaration of the same option as long as all declarations have the same type. If the type has a sub module, then it is merged with the submodules of other declarations, as done with option sets. In addition, the file of the option declaration is passed into the submodule, such as the documentation can display it correctly.
* types.nix: Add ‘either’ typeEelco Dolstra2014-08-19
|
* Fix description to match conventionShea Levy2014-05-01
|
* Add enum option typeShea Levy2014-05-01
|
* Remove lib.typeOfEelco Dolstra2014-02-27
| | | | It clashes with builtins.typeOf.
* loaOf: Allow merging definitions from a list into other definitions IFF ↵Shea Levy2014-02-20
| | | | there is a name attribute
* Revert "Add nixosSubmodule option type"Shea Levy2014-02-13
| | | | | | Moving recent types work to a separate branch for now This reverts commit ca1c5cfa8fff055c74786dbe0d2ca889ae462365.
* Revert "Add option type for a submodule with extra arguments"Shea Levy2014-02-13
| | | | | | Moving recent types work to a separate branch for now This reverts commit 8764758044b0425de54228d87cc68a4ed6d4d414.
* Revert "Add heterogeneousAttrsOf option type"Shea Levy2014-02-13
| | | | | | Moving recent types work to a separate branch for now This reverts commit 3f70dabad320b115d586a59db8cca05c7f3b7c75.
* Add heterogeneousAttrsOf option typeShea Levy2014-02-11
| | | | | | It is parameterized by a function that takes a name and evaluates to the option type for the attribute of that name. Together with submoduleWithExtraArgs, this subsumes nixosSubmodule.
* Add option type for a submodule with extra argumentsShea Levy2014-02-11
|
* Add nixosSubmodule option typeShea Levy2014-02-11
| | | | Since NixOS modules expect special arguments, use a hack to provide them
* Try to improve naming of list elements in loaOf typesShea Levy2014-02-08
| | | | Signed-off-by: Shea Levy <shea@shealevy.com>
* Add some primops to libEelco Dolstra2013-11-12
|
* Fix backward compatibility with Nix < 1.6Eelco Dolstra2013-10-30
| | | | | "with" used to be less lazy, so don't rely on that. Also don't use the "<" operator.
* Strictly check the arguments to mkOptionEelco Dolstra2013-10-30
| | | | And fix various instances of bad arguments.
* Show correct position info for errors in submodulesEelco Dolstra2013-10-30
| | | | | | | | E.g. The unique option `fileSystems./.device' is defined multiple times, in `/etc/nixos/configuration.nix' and `/etc/nixos/foo.nix'. This requires passing file/value tuples to the merge functions.