summaryrefslogtreecommitdiff
path: root/lib/generators.nix (follow)
Commit message (Expand)AuthorAgeFilesLines
* treewide: Format all Nix files•••Format all Nix files using the officially approved formatter, making the CI check introduced in the previous commit succeed: nix-build ci -A fmt.check This is the next step of the of the [implementation](https://github.com/NixOS/nixfmt/issues/153) of the accepted [RFC 166](https://github.com/NixOS/rfcs/pull/166). This commit will lead to merge conflicts for a number of PRs, up to an estimated ~1100 (~33%) among the PRs with activity in the past 2 months, but that should be lower than what it would be without the previous [partial treewide format](https://github.com/NixOS/nixpkgs/pull/322537). Merge conflicts caused by this commit can now automatically be resolved while rebasing using the [auto-rebase script](https://github.com/NixOS/nixpkgs/tree/8616af08d915377bd930395f3b700a0e93d08728/maintainers/scripts/auto-rebase). If you run into any problems regarding any of this, please reach out to the [formatting team](https://nixos.org/community/teams/formatting/) by pinging @NixOS/nix-formatting. Silvan Mosberger2025-04-011-248/+356
* lib.generators.toLua: support path-valuesMatt Sturgeon2025-03-151-2/+2
* treewide: Fix incorrect string indentationspiegames2025-01-071-6/+6
* lib.generators.toPlist: escape XML syntax in strings & keys•••Before this patch, code like this would break generate invalid XML: lib.generators.toPlist {} "ab<cd" That's obviously bad, since the call to toPlist often happens through indirection, as is the case in e.g. the nix-darwin project. A user might not realize that they have to escape the strings. This patch adds the argument 'escape' to lib.generators.plist and emits a warning if it is not set to true. In a future release, this behavior should become the default. I have also added a note for future maintainers, in case I forget to actually remove the deprecated functionality in a future release. Linnnus2024-12-231-6/+16
* doc: add arguments for toKeyValueJohannes Kirschbauer2024-05-211-2/+14
* doc: init lib.generators reference documentationJohannes Kirschbauer2024-05-211-193/+385
* lib: use names from `lib` in `lib/generators.nix`, rather than `builtins` or ...•••There's not a lot of rhyme to which names are exported from which module, as I see it, but everything is found somewhere. Philip Taron2024-03-161-36/+24
* lib/generators: use the explicit public interface pattern•••This enables further refactoring without accidentally changing the public interface. Philip Taron2024-03-141-19/+37
* lib/generators: explicitly import names from `lib.trivial`•••Everything else was already imported. Philip Taron2024-03-141-1/+5
* lib/generators: explicitly import names from `lib.attrsets`•••Everything used was already imported. Philip Taron2024-03-141-7/+5
* lib/generators: explicitly import names from `lib.string`•••A couple of these were imports from `builtins`. Philip Taron2024-03-141-15/+24
* lib/generators: explicitly import names from `lib`•••I followed the `inherit` chains in `lib/default.nix` to arrive at these imports. Philip Taron2024-03-141-18/+41
* lib/generators: builtins.isFloat is in Nix 2.3•••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` Philip Taron2024-03-141-22/+39
* lib.generators: made toLua accept derivations too•••While trying to extend generateLuarocksConfig, I had infinite loops caused by toLua considering derivations as attrSets Matthieu Coudron2023-12-151-0/+2
* Merge pull request #250220•••lib.generators.toGitINI: escape string values in configurationRobert Helgesson2023-09-111-3/+11
|\
| * lib.generators.toGitINI: escape string values in configuration•••This should handle the special characters that typically occur. Upstreaming of https://github.com/nix-community/home-manager/commit/642d9ffe24eec1290e94d70e8129ba74922fddf2 Robert Helgesson2023-08-191-3/+11
* | nixos/dconf: add settings supportlinsui2023-08-151-0/+8
|/
* lib/generators/toKeyValue: add `indent` parameter•••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. Naïm Favier2023-07-221-2/+3
* lib.generators.toINIWithGlobalSection: give sections a default•••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 = { }; }; ```` Artturin2023-06-291-1/+1
* lib: fix typosfigsoda2023-05-191-1/+1
* Merge pull request #223407 from AngryAnt/toplist-path•••lib.toPlist: Add support for path valuestoonn2023-05-051-0/+2
|\
| * lib.toPlist: support for path valuesEmil "AngryAnt" Johansen2023-03-271-0/+2
* | lib.generators.toLua: asBindings option•••Allows to generate code block for setting of global variables Mykola Orliuk2023-04-291-3/+21
* | lib.generators.toLua: allow disabling multilineMykola Orliuk2023-04-231-8/+16
* | lib.generators.toLua: tune comment for noogle use•••See https://github.com/nix-community/noogle Mykola Orliuk2023-04-231-22/+36
* | lib/generators: add toLua/mkLuaInline•••Suitable to simplify Lua-based configurations like neovim-lspconfig that might need to interpolate Nix package paths. Mykola Orliuk2023-04-231-0/+55
|/
* treewide: deprecate isNull•••https://nixos.org/manual/nix/stable/language/builtins.html#builtins-isNull Felix Buehler2023-03-061-1/+1
* stdenv/check-meta: do deep type checks•••Use a wrapper around `mergeDefinitions` to type-check values deeply, so that e.g. `maintainers = [ 42 ];` is an error. Naïm Favier2023-01-011-2/+4
* lib.generators.toPretty: Add attribute name to error contextRobert Hensing2022-12-101-1/+4
* nixos/doc: render option values using `lib.generators.toPretty`•••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`. Naïm Favier2022-12-081-4/+10
* lib/generators.toPretty: escape strings properlyNaïm Favier2022-12-081-11/+13
* lib/generators.toPretty: don't evaluate derivations•••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`. Naïm Favier2022-12-081-1/+1
* treewide: optional -> optionals where the argument is a list•••the argument to optional should not be list Artturin2022-10-101-1/+1
* lib.generators: simplify toYAMLfigsoda2022-09-281-1/+1
* lib/generators.nix: remove unused bindingsfigsoda2022-09-261-2/+2
* lib/generators: withRecursion: don't break attr-sets with special attrs•••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. Maximilian Bosch2022-04-121-1/+11
* lib.generators: fix references to test fileProfpatsch2022-03-141-3/+3
* lib.generators: add toINIWithGlobalSection•••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). Profpatsch2022-03-141-0/+45
* Merge pull request #131205 from Ma27/showdefs-overflow•••lib/modules: improve errors for `options`/`config`-mixupsLinus Heckemann2021-09-291-1/+26
|\
| * lib/generators: fix error messageMaximilian Bosch2021-09-281-2/+2
| * lib/generators: move limit detection into `withRecursion`•••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. Maximilian Bosch2021-08-261-15/+30
| * lib/generators/toPretty: add evaluation-limit•••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. Maximilian Bosch2021-08-251-7/+17
* | lib.generators.toINI: serialize derivations to string•••This is the common case when passing a derivation, we want to access the store path. zimbatm2021-09-121-0/+2
* | lib.generators.toGitINI: don't traverse derivations•••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 zimbatm2021-09-121-1/+1
|/
* lib.generators: Handle no drvPath in toPretty•••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 ???» Silvan Mosberger2021-08-111-1/+1
* lib/generators: add toDhallEmery Hemingway2021-04-011-0/+24
* Revert "lib/generators: fix toPretty throwing on (partially applied) builtins"•••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. sternenseemann2021-02-011-9/+4
* lib/generators: fix toPretty throwing on (partially applied) builtins•••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" sternenseemann2021-01-311-4/+9
* lib/generators.toPretty: functors should print as functions•••Not attribute sets. So move the function case forward Silvan Mosberger2020-09-171-7/+7
* lib/generators.toPretty: Print [] and {} compactlySilvan Mosberger2020-09-171-2/+5