summaryrefslogtreecommitdiffstats
path: root/lib/types.nix
AgeCommit message (Collapse)Author
2016-05-25Improve types.listOf error messageEelco Dolstra
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
2016-03-19lib/types: Revert handling submodules for "either"aszlig
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>
2016-03-19lib/types: Handle submodules for type "either"aszlig
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
2016-03-01Revert "Add the tool "nixos-typecheck" that can check an option declaration to:"Eelco Dolstra
This reverts commit cad8957eabcbf73062226d28366fd446c15c8737. It breaks NixOps, but more importantly, such major changes to the module system really need to be reviewed.
2016-02-29Add the tool "nixos-typecheck" that can check an option declaration to:Thomas Strobel
- 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.
2016-02-17lib/types: Set name of types.package to "package"aszlig
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>
2015-12-04Use x == null instead of builtins.isNull xIgor Pashev
2015-12-04Allow enum of integers (and any other type)Igor Pashev
Closes #9826.
2015-09-18nixos,lib: move environment generation related copy-paste to libJan Malakhovski
2015-08-15Revert change of path typeBenno Fünfstück
The change caused lots of evaluation errors, since it caused derivations to no longer be valid paths as well.
2015-08-15types.nix: better error message for non-pathsBenno Fünfstück
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. ```
2015-08-07Allow options with type "package" to be store pathsEelco Dolstra
For example, this allows writing nix.package = /nix/store/786mlvhd17xvcp2r4jmmay6jj4wj6b7f-nix-1.10pre4206_896428c; Also, document types.package in the manual.
2015-07-23Use foldl' instead of fold in some placesEelco Dolstra
2015-06-15Make types.bool complain on conflicting definitionsEelco Dolstra
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'.
2015-03-15Document and rename internal option of modules.Nicolas B. Pierron
2015-03-12Share common code for merging option definitions.Nicolas B. Pierron
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 == []`.
2015-03-12Add comments about the module system interfaceShea Levy
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.
2015-03-12types.loaOf: Update check functionShea Levy
This symplifies typechecking and allows properties to be used inside the function body. It also makes possible checking the type of the result.
2015-03-12types.attrsOf: Use mergeDefinitions to handle each elementShea Levy
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.
2015-03-12types.listOf: Use mergeDefinitions to handle each elementShea Levy
This simplifies typechecking and allows properties to be used inside the lists
2014-09-07Remove types.functionTo.Nicolas Pierron
2014-09-07Merge options having the submodule type.Nicolas Pierron
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.
2014-08-19types.nix: Add ‘either’ typeEelco Dolstra
2014-05-01Fix description to match conventionShea Levy
2014-05-01Add enum option typeShea Levy
2014-02-27Remove lib.typeOfEelco Dolstra
It clashes with builtins.typeOf.
2014-02-20loaOf: Allow merging definitions from a list into other definitions IFF ↵Shea Levy
there is a name attribute
2014-02-13Revert "Add nixosSubmodule option type"Shea Levy
Moving recent types work to a separate branch for now This reverts commit ca1c5cfa8fff055c74786dbe0d2ca889ae462365.
2014-02-13Revert "Add option type for a submodule with extra arguments"Shea Levy
Moving recent types work to a separate branch for now This reverts commit 8764758044b0425de54228d87cc68a4ed6d4d414.
2014-02-13Revert "Add heterogeneousAttrsOf option type"Shea Levy
Moving recent types work to a separate branch for now This reverts commit 3f70dabad320b115d586a59db8cca05c7f3b7c75.
2014-02-11Add heterogeneousAttrsOf option typeShea Levy
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.
2014-02-11Add option type for a submodule with extra argumentsShea Levy
2014-02-11Add nixosSubmodule option typeShea Levy
Since NixOS modules expect special arguments, use a hack to provide them
2014-02-08Try to improve naming of list elements in loaOf typesShea Levy
Signed-off-by: Shea Levy <shea@shealevy.com>
2013-11-12Add some primops to libEelco Dolstra
2013-10-30Fix backward compatibility with Nix < 1.6Eelco Dolstra
"with" used to be less lazy, so don't rely on that. Also don't use the "<" operator.
2013-10-30Strictly check the arguments to mkOptionEelco Dolstra
And fix various instances of bad arguments.
2013-10-30Show correct position info for errors in submodulesEelco Dolstra
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.
2013-10-29Add option type "str" for unique stringsEelco Dolstra
An annoying and dangerous property of "types.string" is that it merges multiple definitions by concatenating them, which almost never produces a sensible result. (Those options for which it does make sense typically should use "types.lines" instead, and things only work because the option definitions already end in a newline.) Of course, you can use "types.uniq types.string", but that's rather verbose, and inconsistent with other basic types like "types.int". Changing the behaviour of "types.string" to be unique by default is not an option, given the large number of options that use it. So instead, we now have "types.str", which is equivalent to "types.uniq types.string".
2013-10-28Show precise error messages in option merge failuresEelco Dolstra
For instance, if time.timeZone is defined multiple times, you now get the error message: error: user-thrown exception: The unique option `time.timeZone' is defined multiple times, in `/etc/nixos/configurations/misc/eelco/x11vnc.nix' and `/etc/nixos/configuration.nix'. while previously you got: error: user-thrown exception: Multiple definitions of string. Only one is allowed for this option. and only an inspection of the stack trace gave a clue as to what option caused the problem.
2013-10-28Remove uses of the "merge" option attributeEelco Dolstra
It's redundant because you can (and should) specify an option type, or an apply function.
2013-10-28Check for undeclared optionsEelco Dolstra
2013-10-28Show error locations in submodulesEelco Dolstra
2013-10-28Fix manual generationEelco Dolstra
2013-10-28Inline some functions on the critical pathEelco Dolstra
2013-10-28Use isType instead of typeOfEelco Dolstra
2013-10-28Big cleanup of the NixOS module systemEelco Dolstra
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-10Move pkgs/lib/ to lib/Eelco Dolstra