| Commit message (Collapse) | Author | Age |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
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
|
|
|
|
| |
Fixes #26055
|
|
|
|
|
|
|
| |
Also mention about docs in types.nix and fix a small error in related
documentation.
Fixes #26055.
|
| |
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
The string type is still available for backward-compatiblity.
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
| |
This reverts commit cad8957eabcbf73062226d28366fd446c15c8737. It
breaks NixOps, but more importantly, such major changes to the module
system really need to be reviewed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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>
|
| |
|
|
|
|
| |
Closes #9826.
|
| |
|
|
|
|
| |
The change caused lots of evaluation errors, since it caused derivations to no longer be valid paths as well.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
```
|
|
|
|
|
|
|
|
| |
For example, this allows writing
nix.package = /nix/store/786mlvhd17xvcp2r4jmmay6jj4wj6b7f-nix-1.10pre4206_896428c;
Also, document types.package in the manual.
|
| |
|
|
|
|
|
|
|
| |
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'.
|
| |
|
|
|
|
|
|
|
| |
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 == []`.
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
This symplifies typechecking and allows properties to be used inside the
function body. It also makes possible checking the type of the result.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
This simplifies typechecking and allows properties to be used inside the lists
|
| |
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
|
| |
It clashes with builtins.typeOf.
|
|
|
|
| |
there is a name attribute
|
|
|
|
|
|
| |
Moving recent types work to a separate branch for now
This reverts commit ca1c5cfa8fff055c74786dbe0d2ca889ae462365.
|
|
|
|
|
|
| |
Moving recent types work to a separate branch for now
This reverts commit 8764758044b0425de54228d87cc68a4ed6d4d414.
|
|
|
|
|
|
| |
Moving recent types work to a separate branch for now
This reverts commit 3f70dabad320b115d586a59db8cca05c7f3b7c75.
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
| |
Since NixOS modules expect special arguments, use a hack to provide them
|
|
|
|
| |
Signed-off-by: Shea Levy <shea@shealevy.com>
|
| |
|
|
|
|
|
| |
"with" used to be less lazy, so don't rely on that. Also don't use
the "<" operator.
|
|
|
|
| |
And fix various instances of bad arguments.
|
|
|
|
|
|
|
|
| |
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.
|