about summary refs log tree commit diff
path: root/lib/modules.nix
Commit message (Collapse)AuthorAge
* lib.modules.doRename: Add condition parameterRobert Hensing2024-02-02
| | | | | This is to support single-to-multi service migrations, so that the `to` (e.g. `foos.""`) isn't defined unconditionally. See test cases.
* lib/modules: Test optionless module errors from #131205Robert Hensing2023-12-09
|
* Merge pull request #249243 from lf-/jade/declarationsWithLocationsRobert Hensing2023-09-17
|\ | | | | nixos/modules: Add declarationPositions
| * nixos/modules: Add declarationPositionsJade Lovelace2023-09-08
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | What it does: line and column level *declaration* position information: $ nix repl . nix-repl> :p nixosConfigurations.micro.options.environment.systemPackages.declarationPositions [ { column = 7; file = "/nix/store/24aj3k7fgqv3ly7qkbf98qvphasrw9nb-source/nixos/modules/config/system-path.nix"; line = 63; } ] Use cases: - ctags over NixOS options, as will be presented at NixCon 2023 ;) - improving the documentation pages to go to the exact line of the declarations. Related work: - https://github.com/NixOS/nixpkgs/pull/65024 This one does it for all *definitions* rather than declarations, and it was not followed through with due to performance worries. - https://github.com/NixOS/nixpkgs/pull/208173 The basis for this change. This change is just a rebase of that one. I split it out to add the capability before adding users of it, in order to simplify review. However, the ctags script in there is a sample user of this feature. Benchmarks: conducted by evaluating my own reasonably complex NixOS configuration with the command: `hyperfine -S none -w 1 -- "nix eval .#nixosConfigurations.snowflake.config.system.build.toplevel.outPath"` ``` Benchmark 1: nix eval .#nixosConfigurations.snowflake.config.system.build.toplevel.outPath Time (mean ± σ): 8.971 s ± 0.254 s [User: 5.872 s, System: 1.388 s] Range (min … max): 8.574 s … 9.327 s 10 runs Benchmark 1: nix eval .#nixosConfigurations.snowflake.config.system.build.toplevel.outPath Time (mean ± σ): 8.766 s ± 0.160 s [User: 5.873 s, System: 1.346 s] Range (min … max): 8.496 s … 9.033 s 10 runs ``` Summary of results: it seems to be in the noise, this does not cause any visible regression in times.
* | lib/modules: Report a better error when option tree has bare typeRobert Hensing2023-08-18
| | | | | | | | | | | | | | | | | | | | | | Improves on 0d472a62012364d064f0b75f1da491242c6ae9c6 - https://github.com/NixOS/nixpkgs/pull/242339 We actually do have the file name. Thanks Shawn8901 for the [feedback]! feedback: https://github.com/NixOS/nixpkgs/pull/242339#issuecomment-1683107055
* | lib/modules: Report a good error when option tree has bare typeRobert Hensing2023-08-14
|/ | | | | Note that this removes the possibility of declaring an option named `_type`.
* Merge pull request #245271 from sternenseemann/module-system-merge-no-typeRobert Hensing2023-07-27
|\ | | | | lib/modules: handle typeless options in mergeModules
| * lib/modules: handle typeless options in mergeModulessternenseemann2023-07-26
| | | | | | | | | | | | mkOption does not require a `type` argument and does not set the resulting attribute if it is not given. Consequently, we need to be prepared to merge options that have no type information.
* | lib.mergeModules: Add context to error messageRobert Hensing2023-07-11
| |
* | lib/modules.nix: FormatRobert Hensing2023-07-11
| |
* | lib/modules.nix: Inline single-use `subtree` bindingsRobert Hensing2023-07-11
| |
* | lib/modules.nix: Make entire definition list strict in config checkRobert Hensing2023-07-11
| | | | | | | | | | | | | | | | | | | | | | | | | | This is a non-trivial refactor that slightly changes the semantics of the internal definition lists. Whereas previously only individual list items would trigger the exception, now the error is promoted to the whole list. This is mostly ok, because we compute the value, it is wrong to ignore a definition. However, we don't always compute the value. For instance `readOnly` only needs to count definitions. That won't be possible anymore when the error is raised for one of the items. As a consequence, an error will be raised for the errant definition instead of the number of definitions.
* | lib/modules.nix: Rename defnsByName -> pushedDownDefinitionsByNameRobert Hensing2023-07-11
| |
* | lib/modules.nix: Rename defnsByName' -> rawDefinitionsByNameRobert Hensing2023-07-11
| |
* | lib/modules.nix: Apply argument `module` of old fRobert Hensing2023-07-11
| |
* | lib/modules.nix: Apply argument `modules` of old old old byNameRobert Hensing2023-07-11
| |
* | lib/modules.nix: Apply argument `f` of old old byNameRobert Hensing2023-07-11
| |
* | lib/modules.nix: Apply argument `attr` of old byNameRobert Hensing2023-07-11
| |
* | lib/modules.nix: Inline byNameRobert Hensing2023-07-11
|/ | | | | byName is not an abstraction. This is the first commit in a series that refactors it away.
* Merge pull request #238136 from ↵Robert Hensing2023-06-23
|\ | | | | | | | | hercules-ci/nixos-nixpkgs-dont-check-when-_module.args.pkgs-is-set `nixos/nixpkgs`: Don't check when `_module.args.pkgs` is set
| * lib/modules.nix: Clean up mergeAttrDefinitionsWithPrio implRobert Hensing2023-06-23
| |
| * lib.modules: Add mergeAttrDefinitionsWithPrioRobert Hensing2023-06-16
| | | | | | | | | | | | This will let us make assertions involving _module.args.pkgs, which is not an option but a value attribute, and therefore doesn't have its own highestPrio to inspect. The new function gives us that info.
* | lib/modules: remove unused let bindingsfigsoda2023-06-23
| |
* | lib: unhide _module.argspennae2023-06-16
| | | | | | | | this was a temporary fix that should hopefully no longer be necessary.
* | lib: turn *MD functions into aliasespennae2023-06-13
|/ | | | | | with docbook gone and MD the default these aren't needed any more. we can't remove them yet because there's thousands of uses, but maybe some day we can.
* lib.modules: configurationClass -> classRobert Hensing2023-05-06
| | | | This simplifies the documentation. `configuration` is implied by `_type`.
* lib.modules: in evalModules return move _module.class -> configurationClassRobert Hensing2023-05-06
|
* lib.modules: Change class declaration in module to _classRobert Hensing2023-05-06
|
* lib/modules: Move class out of specialArgsRobert Hensing2023-05-06
|
* lib/modules.nix: Deduplicate documentationRobert Hensing2023-05-06
| | | | `file://./..` looks redundant, but makes the url clickable in vscode.
* lib/modules: Only interpret class declaration in non-shorthand modeRobert Hensing2023-05-06
| | | | | | This is to avoid stealing keys from submodules. `class` might be common enough that reinterpreting existing `class` attributes in configurations as a declaration leads to fairly widespread problems.
* lib/modules.nix: Refactor: extract applyModuleArgsRobert Hensing2023-05-06
|
* lib/modules.nix: Refactor: evaluate applyModuleArgsIfFunction in attrs caseRobert Hensing2023-05-06
|
* lib/modules.nix: Restore old collectModules interfaceRobert Hensing2023-05-06
|
* lib/modules: Explain that a configuration can't be loaded as a moduleRobert Hensing2023-05-06
|
* lib/modules: Improve error when a configuration is importedRobert Hensing2023-05-06
| | | | | | This is appears to be a fairly common mistake for beginners who want to build larger things from the system configurations, such as NixOps networks, etc. Further explanation seems appropriate.
* lib/modules: Check against importing things with a _typeRobert Hensing2023-05-06
|
* lib/modules: Add class concept to check importsRobert Hensing2023-05-06
| | | | | This improves the error message when an incompatible module is imported.
* lib/modules.nix: Make some functions privateRobert Hensing2023-05-06
| | | | | | | | | The supposedly public nature of these functions has been holding back module system maintenance, while usages of these functions are expected to be rare. If used anywhere, presumably they're emulating module system behavior because some use case isn't supported properly. We should try to support such a use case directly, if it even exists.
* lib/modules.nix: Use explicit exportsRobert Hensing2023-05-06
|
* lib/modules: better error for invalid option declarationsNaïm Favier2023-03-22
| | | | | Make `byName` aware of whether it's processing options or config to give slightly more accurate error messages.
* lib/modules: Allow an "anonymous" module with key in disabledModulesRobert Hensing2023-03-01
| | | | | | | | | | | | | | | | | This makes the following work disabledModules = [ foo.nixosModules.bar ]; even if `bar` is not a path, but rather a module such as { key = "/path/to/foo#nixosModules.bar"; config = ...; } By supporting this, the user will often be able to use the same syntax for both importing and disabling a module. This is becoming more relevant because flakes promote the use of attributes to reference modules. Not all of these modules in flake attributes will be identifiable, but with the help of a framework such as flake-parts, these attributes can be guaranteed to be identifiable (by outPath + attribute path).
* lib/modules: make `mkAliasOptionModule` emit DocBookNaïm Favier2023-01-08
| | | | | | Follow-up to https://github.com/NixOS/nixpkgs/pull/208407 Removing `mdDoc` isn't enough, we need to emit actual DocBook.
* lib/modules: hide _module.args docspennae2023-01-05
| | | | | | unfortunately we can't unconditionally make this text markdown without impacting downstream users of docs generation (as noted in #175586). hide it entirely until the transition is complete.
* modules: add mkAliasOptionModuleMDpennae2023-01-05
| | | | | | | mkAliasOptionModule should not default to mdDoc descriptions because that can break out-of-tree users of documentation infrastructure. add an explicitly-MD variant for now, to be removed some time after the MD transition is complete.
* lib: fix typosfigsoda2022-12-17
|
* Merge pull request #204103 from ncfavier/doc-mkOrderValentin Gagarin2022-12-02
|\ | | | | nixos/doc: document `mkOrder` and friends
| * nixos/doc: document `mkOrder` and friendsNaïm Favier2022-12-02
| | | | | | | | | | | | | | | | | | Add a section on ordering option definitions. Also mention `mkDefault` in the section on `mkOverride`. Clarify the code a bit by renaming `defaultPriority` to `defaultOverridePriority` and introducing `defaultOrderPriority`.
* | lib/modules: Add context to the "option does not exist" errorRobert Hensing2022-12-02
|/ | | | | | | Add trace items that provide context for a failed definition that can not be caught within the Nix language. This also adds a test for the `tryEval` behavior of `showDefs`.
* lib.modules.doRename: Don't define warning, even as undefined, if not warning.Shea Levy2022-11-03
| | | | This fixes mkAliasOptionModule in systems with no warning option.