about summary refs log tree commit diff
path: root/lib/generators.nix
AgeCommit message (Collapse)AuthorFilesLines
2024-03-16lib: use names from `lib` in `lib/generators.nix`, rather than `builtins` or ↵Philip Taron1-36/+24
submodules of `lib` There's not a lot of rhyme to which names are exported from which module, as I see it, but everything is found somewhere.
2024-03-14lib/generators: use the explicit public interface patternPhilip Taron1-19/+37
This enables further refactoring without accidentally changing the public interface.
2024-03-14lib/generators: explicitly import names from `lib.trivial`Philip Taron1-1/+5
Everything else was already imported.
2024-03-14lib/generators: explicitly import names from `lib.attrsets`Philip Taron1-7/+5
Everything used was already imported.
2024-03-14lib/generators: explicitly import names from `lib.string`Philip Taron1-15/+24
A couple of these were imports from `builtins`.
2024-03-14lib/generators: explicitly import names from `lib`Philip Taron1-18/+41
I followed the `inherit` chains in `lib/default.nix` to arrive at these imports.
2024-03-14lib/generators: builtins.isFloat is in Nix 2.3Philip Taron1-22/+39
There's a couple of aliases in play: 1. `lib.isList` is an alias for `builtins.isList`. 2. `lib.strings.concatStringsSep` is an alias for `builtins.concatStringsSep`
2023-12-15lib.generators: made toLua accept derivations tooMatthieu Coudron1-0/+2
While trying to extend generateLuarocksConfig, I had infinite loops caused by toLua considering derivations as attrSets
2023-09-11Merge pull request #250220Robert Helgesson1-3/+11
lib.generators.toGitINI: escape string values in configuration
2023-08-19lib.generators.toGitINI: escape string values in configurationRobert Helgesson1-3/+11
This should handle the special characters that typically occur. Upstreaming of https://github.com/nix-community/home-manager/commit/642d9ffe24eec1290e94d70e8129ba74922fddf2
2023-08-15nixos/dconf: add settings supportlinsui1-0/+8
2023-07-22lib/generators/toKeyValue: add `indent` parameterNaïm Favier1-2/+3
toKeyValue is generic enough that it is sometimes used as part of other format generators, where it might be useful to specify the indentation level.
2023-06-29lib.generators.toINIWithGlobalSection: give sections a defaultArtturin1-1/+1
often sections aren't needed when using globalSection currently one has to `sections = { }` when using only globalSection ``` lib.generators.toINIWithGlobalSection { } { globalSection = { background_color = "1d202199"; }; sections = { }; }; ````
2023-05-19lib: fix typosfigsoda1-1/+1
2023-05-05Merge pull request #223407 from AngryAnt/toplist-pathtoonn1-0/+2
lib.toPlist: Add support for path values
2023-04-29lib.generators.toLua: asBindings optionMykola Orliuk1-3/+21
Allows to generate code block for setting of global variables
2023-04-23lib.generators.toLua: allow disabling multilineMykola Orliuk1-8/+16
2023-04-23lib.generators.toLua: tune comment for noogle useMykola Orliuk1-22/+36
See https://github.com/nix-community/noogle
2023-04-23lib/generators: add toLua/mkLuaInlineMykola Orliuk1-0/+55
Suitable to simplify Lua-based configurations like neovim-lspconfig that might need to interpolate Nix package paths.
2023-03-27lib.toPlist: support for path valuesEmil "AngryAnt" Johansen1-0/+2
2023-03-06treewide: deprecate isNullFelix Buehler1-1/+1
https://nixos.org/manual/nix/stable/language/builtins.html#builtins-isNull
2023-01-01stdenv/check-meta: do deep type checksNaïm Favier1-2/+4
Use a wrapper around `mergeDefinitions` to type-check values deeply, so that e.g. `maintainers = [ 42 ];` is an error.
2022-12-10lib.generators.toPretty: Add attribute name to error contextRobert Hensing1-1/+4
2022-12-08nixos/doc: render option values using `lib.generators.toPretty`Naïm Favier1-4/+10
Render un`_type`d defaults and examples as `literalExpression`s using `lib.generators.toPretty` so that consumers don't have to reinvent Nix pretty-printing. `renderOptionValue` is kept internal for now intentionally. Make `toPretty` print floats as valid Nix values (without a tilde). Get rid of the now-obsolete `substSpecial` function. Move towards disallowing evaluation of packages in the manual by raising a warning on `pkgs.foo.{outPath,drvPath}`; later, this should throw an error. Instead, module authors should use `literalExpression` and `mkPackageOption`.
2022-12-08lib/generators.toPretty: escape strings properlyNaïm Favier1-11/+13
2022-12-08lib/generators.toPretty: don't evaluate derivationsNaïm Favier1-1/+1
With the goal of making `toPretty` suitable for rendering option values, render derivations as `<derivation foo-1.0>` instead of `<derivation /nix/store/…-foo-1.0.drv>`. This is to avoid causing sudden evaluation errors for out-of-tree projects that have options with `default = pkgs.someUnfreePackage;` and no `defaultText`.
2022-10-10treewide: optional -> optionals where the argument is a listArtturin1-1/+1
the argument to optional should not be list
2022-09-28lib.generators: simplify toYAMLfigsoda1-1/+1
2022-09-26lib/generators.nix: remove unused bindingsfigsoda1-2/+2
2022-04-12lib/generators: withRecursion: don't break attr-sets with special attrsMaximilian Bosch1-1/+11
Closes #168327 The issue reported there can be demonstrated with the following expression: → nix-instantiate --eval -E "with import ./. {}; pkgs.lib.options.showDefs [ { file = \"foo\"; value = pkgs.rust.packages.stable.buildRustPackages; } ]" error: attempt to call something which is not a function but a string at /home/ma27/Projects/nixpkgs/lib/trivial.nix:442:35: 441| isFunction = f: builtins.isFunction f || 442| (f ? __functor && isFunction (f.__functor f)); | ^ 443| Basically, if a `__functor` is in an attribute-set at depth-limit, `__functor` will be set to `"<unevaluated>"`. This however breaks `lib.isFunction` which checks for a `__functor` by invoking `__functor` with `f` itself. The same issue - "magic" attributes being shadowed by `withRecursion` - also applies to others such as `__pretty`/`__functionArgs`/`__toString`. Since these attributes have a low-risk of causing a stack overflow (because these are flat attr-sets or even functions), ignoring them in `withRecursion` seems like a valid solution.
2022-03-14lib.generators: fix references to test fileProfpatsch1-3/+3
2022-03-14lib.generators: add toINIWithGlobalSectionProfpatsch1-0/+45
As discussed in https://github.com/NixOS/nixpkgs/pull/118925#issuecomment-821112723, this is the best way of adding global sections to `toINI` without employing heuristics (i.e. checking whether something is an attrset).
2021-09-29Merge pull request #131205 from Ma27/showdefs-overflowLinus Heckemann1-1/+26
lib/modules: improve errors for `options`/`config`-mixups
2021-09-28lib/generators: fix error messageMaximilian Bosch1-2/+2
2021-09-12lib.generators.toINI: serialize derivations to stringzimbatm1-0/+2
This is the common case when passing a derivation, we want to access the store path.
2021-09-12lib.generators.toGitINI: don't traverse derivationszimbatm1-1/+1
Consider a derivation a value to be serialized. nix-repl> lib.generators.toGitINI { hello = { drv = pkgs.hello; }; } error: evaluation aborted with the following error message: 'generators.mkValueStringDefault: attrsets not supported: <derivation /nix/store/533q15q67sl6dl0272dyi7m7w5pwkkjh-hello-2.10.drv>' Fixes #137390
2021-08-26lib/generators: move limit detection into `withRecursion`Maximilian Bosch1-15/+30
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/generators/toPretty: add evaluation-limitMaximilian Bosch1-7/+17
When having e.g. recursive attr-set, it cannot be printed which is solved by Nix itself like this: $ nix-instantiate --eval -E 'let a.b = 1; a.c = a; in builtins.trace a 1' trace: { b = 1; c = <CYCLE>; } 1 However, `generators.toPretty` tries to evaluate something until it's done which can result in a spurious `stack-overflow`-error: $ nix-instantiate --eval -E 'with import <nixpkgs/lib>; generators.toPretty { } (mkOption { type = types.str; })' error: stack overflow (possible infinite recursion) Those attr-sets are in fact rather common, one example is shown above, a `types.<type>`-declaration is such an example. By adding an optional `depthLimit`-argument, `toPretty` will stop evaluating as soon as the limit is reached: $ nix-instantiate --eval -E 'with import ./Projects/nixpkgs-update-int/lib; generators.toPretty { depthLimit = 2; } (mkOption { type = types.str; })' |xargs -0 echo -e "{ _type = \"option\"; type = { _type = \"option-type\"; check = <function>; deprecationMessage = null; description = \"string\"; emptyValue = { }; functor = { binOp = <unevaluated>; name = <unevaluated>; payload = <unevaluated>; type = <unevaluated>; wrapped = <unevaluated>; }; getSubModules = null; getSubOptions = <function>; merge = <function>; name = \"str\"; nestedTypes = { }; substSubModules = <function>; typeMerge = <function>; }; }" Optionally, it's also possible to let `toPretty` throw an error if the limit is exceeded.
2021-08-11lib.generators: Handle no drvPath in toPrettySilvan Mosberger1-1/+1
Previously, if a derivation without a `drvPath` was handled, an error would be thrown: nix-repl> lib.generators.toPretty {} { type = "derivation"; } error: attribute 'drvPath' missing, at /home/infinisil/src/nixpkgs/lib/generators.nix:251:24 With this commit it doesn't anymore: nix-repl> lib.generators.toPretty {} { type = "derivation"; } "<derivation ???>" This matches what `nix repl` outputs: nix-repl> { type = "derivation"; } «derivation ???»
2021-04-01lib/generators: add toDhallEmery Hemingway1-0/+24
2021-02-01Revert "lib/generators: fix toPretty throwing on (partially applied) builtins"sternenseemann1-9/+4
This reverts commit d9a7d03da8c58aa863911506ae3153729f8931da. Reason for this is that it actually doesn't migitate the issue on nix stable for another reason: builtins.tryEval doesn't prevent the error generated by builtins.functionArgs from halting evaluation: > builtins.tryEval (builtins.functionArgs builtins.functionArgs) error: 'functionArgs' requires a function, at (string):1:19 Thus it seems that there is no workaround to make lib.generators.toPretty work with nix stable and primops since there is no way to distinguish between primops and lambdas in nix.
2021-01-31lib/generators: fix toPretty throwing on (partially applied) builtinssternenseemann1-4/+9
An high level example case of this problem occuring can be found below: nix-repl> lib.generators.toPretty {} (lib.concatStringsSep "\n") error: 'functionArgs' requires a function, at /home/lukas/src/nix/nixpkgs/lib/trivial.nix:334:42 However this does not happen on other partially applied functions: nix-repl> lib.generators.toPretty {} (lib.concatMapStringsSep "\n") "<function>" The issue, as it turns out is that while builtins are functions, builtins.functionArgs throws if is passed a builtin or a partially applied builtin: nix-repl> lib.generators.toPretty {} builtins.toString error: 'functionArgs' requires a function, at /home/lukas/src/nix/nixpkgs/lib/trivial.nix:334:42 nix-repl> lib.generators.toPretty {} (builtins.foldl' (a: b: a + b)) error: 'functionArgs' requires a function, at /home/lukas/src/nix/nixpkgs/lib/trivial.nix:334:42 I'm pretty sure this qualifies as a nix bug and should be filed accordingly, but we can work around it in lib.generators.toPretty by using tryEval and falling back to {} which functionArgs _should_ return for builtins. The nix behavior is inconsistent to say the least: nix-repl> builtins.functionArgs builtins.functionArgs error: 'functionArgs' requires a function, at (string):1:1 nix-repl> builtins.typeOf builtins.functionArgs "lambda" builtins.functionArgs (a: 1 + a) { } nix-repl> builtins.typeOf (a: 1 + a) "lambda"
2020-09-17lib/generators.toPretty: functors should print as functionsSilvan Mosberger1-7/+7
Not attribute sets. So move the function case forward
2020-09-17lib/generators.toPretty: Print [] and {} compactlySilvan Mosberger1-2/+5
2020-09-17lib/generators.toPretty: Switch away from δ and λSilvan Mosberger1-7/+5
- These symbols can be confusing for those not familiar with them - There's no harm in making these more obvious - Terminals may not print them correctly either Also changes the function argument printing slightly to be more obvious
2020-09-17lib/generators.toPretty: Improved string printing, handling newlinesSilvan Mosberger1-1/+13
2020-09-17lib/generators.toPretty: Implement multiline printingSilvan Mosberger1-10/+15
2020-09-17lib/generators.toPretty: Wrap in a go functionSilvan Mosberger1-3/+4
As a preparation to the following commit
2020-09-17lib/generators.toPretty: Only quote attribute names if necessarySilvan Mosberger1-1/+1
2020-07-29lib/generators: Extend mkValueStringDefault with float supportSilvan Mosberger1-2/+4