about summary refs log tree commit diff
path: root/lib/options.nix
AgeCommit message (Collapse)AuthorFilesLines
2022-09-10lib/options: deprecate docbook text and literalDocBookpennae1-1/+4
deprecate literalDocBook by adding a warning (that will not fire yet) to its uses and other docbook literal strings by adding optional warning message to mergeJSON.
2022-08-31lib/modules: convert option description to MDpennae1-1/+1
2022-08-30lib/options: add mdDoc support to mkEnableOptionpennae1-1/+4
2022-07-28haskell.compiler: ghc923 -> ghc924sternenseemann1-1/+1
https://www.haskell.org/ghc/download_ghc_9_2_4.html
2022-06-27lib/options: Add hint for debugging infinite recursion in docsRobert Hensing1-0/+2
2022-06-21lib/options: Add showOptionWithDefLocsRobert Hensing1-0/+6
2022-06-12treewide: attempt at markdown option docspennae1-0/+15
2022-05-28haskell.compiler: ghc922 -> ghc923sternenseemann1-1/+1
https://www.haskell.org/ghc/download_ghc_9_2_3.html Since the tarball is generated by Hadrian, neither autoreconf nor ./boot is executed so ./configure and ghc.mk is missing.
2022-03-26Merge remote-tracking branch 'origin/master' into haskell-updatessternenseemann1-2/+0
2022-03-18lib/modules: Finally remove deprecated types.optionSetSilvan Mosberger1-2/+0
types.optionSet has been deprecated for almost 10 years now (0e333688cea468a28516bf6935648c03ed62a7bb)! A removal was already attempted in 2019 (27982b408e465554b8831f492362bc87ed0ec02a), but it was promptly reinstantiated since some third-party uses were discovered (f531ce75e4178c6867cc1d0f7fec96b2d5c3f1cb). It's finally time to remove it for good :)
2022-03-17Merge master into haskell-updatesgithub-actions[bot]1-1/+1
2022-03-09haskell.compiler: ghc921 -> ghc922sternenseemann1-1/+1
https://www.haskell.org/ghc/download_ghc_9_2_2.html
2022-02-28lib/options: Throw error for options without a typeJanne Heß1-1/+1
Makes all options rendered in the manual throw an error if they don't have a type specified. This is a follow-up to #76184 Co-Authored-By: Silvan Mosberger <contact@infinisil.com>
2022-01-25Merge pull request #156503 from hercules-ci/nixos-add-system.build-optionsRobert Hensing1-5/+7
nixos: Add `system.build.`{`toplevel`,`installBootLoader`}, improve error message
2022-01-24lib.modules: Define mergeOneOption in terms of mergeUniqueOptionRobert Hensing1-5/+1
2022-01-24lib.types: Add unique like uniq, but custom errorsRobert Hensing1-0/+6
Couldn't extend types.uniq and it had a silly name anyway. Now we can have better error messages.
2022-01-23nixos/docs/option-declarations: Document mkEnableOption and mkPackageOptionAnselm Schüler1-15/+40
This is a squashed commit. These are the original commit messages: lib/option: Improve comment better comment Update documentation Updated nixos/doc/manual/development/options-declarations.md with info on mkEnableOption and mkPackageOption. Updated the comment on mkEnableOption in lib/options.nix remove trailing whitespace nixos/doc/option-declarations: Update IDs & formatting nixos/docs/option-declarations: Escape angle brackets Build DB from MD (Amended) Fix typo Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> (Amended) Build DB from MD (again)
2022-01-23lib/options: Add mkPackageOptionAnselm Schüler1-0/+19
This is a squashed commit. These are the original commit messages: lib/options: Add mkPackageOption lib/options: Add missing semicolon lib/options.nix: Make mkPackageOption more complicated lib/options: Fix indent. & spacing lib/options.nix: Remove example and align comment lib/options: ravenous overuse of arguments lib/options: Format better lib/options: Add default examplePath decl lib/options: Make better mkPackageOption function lib/options: Remove trailing whitespace lib/options: Improve mkPackageOptions lib/options: Remove pkgs prefixing Co-authored-by: pennae <82953136+pennae@users.noreply.github.com> lib/options: Slim down mkPackageOption further lib/options: mkPackageOption: Add "pkgs." to example lib/options: mkPackageOption: Make name & pkgs single arguments lib/options: mkPackageOption: Swap name & pkgs lib/options: Remove unnecessary import Co-authored-by: pennae <82953136+pennae@users.noreply.github.com>
2022-01-02nixos/documentation: split options doc buildpennae1-1/+1
most modules can be evaluated for their documentation in a very restricted environment that doesn't include all of nixpkgs. this evaluation can then be cached and reused for subsequent builds, merging only documentation that has changed into the cached set. since nixos ships with a large number of modules of which only a few are used in any given config this can save evaluation a huge percentage of nixos options available in any given config. in tests of this caching, despite having to copy most of nixos/, saves about 80% of the time needed to build the system manual, or about two second on the machine used for testing. build time for a full system config shrank from 9.4s to 7.4s, while turning documentation off entirely shortened the build to 7.1s.
2021-11-01modules: Add visible = "shallow" to hide only sub-optionsRobert Hensing1-3/+7
2021-10-03lib/options: add literalExpression and literalDocBook, deprecate literalExampleNaïm Favier1-5/+19
2021-08-26lib/generators: move limit detection into `withRecursion`Maximilian Bosch1-1/+3
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/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-10lib/options: Better mergeEqualOption error for uncomparable typesSilvan Mosberger1-1/+2
For an option definition that uses `lib.options.mergeEqualOption` underneath, like `types.anything`, an error is thrown when multiple functions are assigned, indicating that functions can't be compared for equivalence: error: The option `test' has conflicting definition values: - In `xxx': <function> - In `xxx': <function> (use '--show-trace' to show detailed location information) However, the error message didn't use the correct files. While above error indicates that both definitions are in the xxx file, that's in fact not true. Above error was generated with options.test = lib.mkOption { type = lib.types.anything; }; imports = [ { _file = "yyy"; test = y: y; } { _file = "xxx"; test = x: x; } ]; With this change, the error uses the correct file locations: error: The option `test' has conflicting definition values: - In `xxx': <function> - In `yyy': <function> (use '--show-trace' to show detailed location information)
2020-12-18Revert "Module-builtin assertions, disabling assertions and submodule ↵Silvan Mosberger1-1/+1
assertions"
2020-11-30lib/options: Don't show internal suboption in the manualSilvan Mosberger1-1/+1
Initially https://github.com/NixOS/nixpkgs/pull/82897 prevented non-visible options from being rendered in the manual, but visible-but-internal options were still being recursed into. This fixes this, aligning the recurse condition here with the one in make-options-doc/default.nix
2020-10-22lib/options.nix: Use merge-friendly inherit syntaxRobert Hensing1-5/+30
2020-10-22lib: Use Nix's static scope checking, fix error message, optimizeRobert Hensing1-5/+9
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/options.nix: Use head instead of elemAt _ 0Robert Hensing1-1/+1
2020-09-21lib/modules: Improve error messages using showDefsSilvan Mosberger1-6/+6
2020-09-21lib/options: Introduce showDefsSilvan Mosberger1-0/+18
For pretty-printing definitions, including file and values
2020-09-15lib/options: Fix mergeEqualOption for singular functionsSilvan Mosberger1-0/+4
Previously it would error out for a single function definition
2020-04-14lib/options: fix showOption exampleDaiderd Jordan1-1/+1
2020-04-14Revert "lib/options: Use escapeNixIdentifier for showOption"Daiderd Jordan1-7/+8
This is used in in the manual generation for option identifiers that can be linked. This, unike what the example describes, doesn't preserve quotes which is needed for these identifiers to be valid. This reverts commit 124cccbe3b63122733e02e41e45a383ec48752fd.
2020-04-14lib/options: Relax showOption quotingJan Tojnar1-1/+14
https://github.com/NixOS/nixpkgs/commit/124cccbe3b63122733e02e41e45a383ec48752fd broke the build of NixOS manual. It does not make sense to be as strict as with attributes since we are not limited by the CLI's inability to handle numbers. Placeholders should not be quoted either as they are not part of Nix syntax but a meta-level construct.
2020-04-13lib/options: Use escapeNixIdentifier for showOptionSilvan Mosberger1-8/+1
2020-03-19lib/options: Only recurse into visible sub optionsSilvan Mosberger1-1/+1
2019-08-26lib/options: fix path in commentJan Tojnar1-1/+1
2019-06-05module system: prettify a bit error when unique option defined twicedanbst1-1/+1
The error can be reproduced like: ``` $ nix-instantiate ./nixos -A system --arg configuration ' { fileSystems."/".device = "nodev"; boot.loader.grub.devices = [ "nodev" ]; containers.t.config.imports = [ <nixpkgs/nixos/modules/virtualisation/amazon-image.nix> ]; }' ``` Previously error was: ``` error: The unique option `containers.t.networking.hostName' is defined multiple times, in `/nix/var/nix/profiles/per-user/root/channels/nixpkgs/nixos/modules/virtualisation/amazon-image.nix' and `module at /home/danbst/dev/nixpkgs/nixos/modules/virtualisation/containers.nix:470'. (use '--show-trace' to show detailed location information) ``` Now it is: ``` error: The unique option `containers.t.networking.hostName' is defined multiple times, in: - /nix/var/nix/profiles/per-user/root/channels/nixpkgs/nixos/modules/virtualisation/amazon-image.nix - module at /home/danbst/dev/nixpkgs/nixos/modules/virtualisation/containers.nix:470. (use '--show-trace' to show detailed location information) ``` Related: https://github.com/NixOS/nixpkgs/issues/15747
2019-03-07module system: revert "remove types.optionSet", just deprecate (#56857)Danylo Hlynskyi1-0/+2
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-03-05lib: optionAttrSetToDocList: warn instead of throwing on options without ↵Jan Malakhovski1-1/+1
descriptions For convenience, it's not like not having a description is deadly or something.
2019-01-31types.optionSet: deprecate and remove last usagesdanbst1-2/+0
2018-10-29lib/options: Update documentation comments for docs generationVincent Ambo1-67/+88
Documents functions in `lib.options` for docs generation with nixdoc. The formatting change in the `mkOption` arguments is due to the way `nixdoc` parses documentation comments on pattern arguments. It's not ideal, but it works.
2018-10-02docs: lib/options.nix function documentationTobias Pflug1-0/+39
2018-03-05lib/options: teach showOptions about funny option namesGraham Christensen1-1/+14
Handle the case where options have funny symbols inside of them. Example: If I reference the following attribute without it being defined: security.acme.certs."example.com".webroot I now get the error: The option `security.acme.certs."example.com".webroot' is used but not defined. where before I got: The option `security.acme.certs.example.com.webroot' is used but not defined. which is not true.
2018-02-11lib: export option location in `optionAttrSetToDocList`Jan Malakhovski1-0/+1
2018-02-09nixos, lib: implement relatedPackages optionJan Malakhovski1-4/+5
This allows one to specify "related packages" in NixOS that get rendered into the configuration.nix(5) man page. The interface philosophy is pretty much stolen from TeX bibliography. See the next several commits for examples.
2017-12-23Revert "nixos: doc: implement related packages in the manual"Graham Christensen1-5/+4
2017-12-07nixos, lib: implement relatedPackages optionJan Malakhovski1-4/+5
This allows one to specify "related packages" in NixOS that get rendered into the configuration.nix(5) man page. The interface philosophy is pretty much stolen from TeX bibliography.
2017-09-16Convert libs to a fixed-pointGraham Christensen1-6/+5
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 )