`lib/services/service.nix` reached outside of `lib/` for two class-agnostic
module fragments: `modules/generic/meta-maintainers.nix` and
`nixos/modules/misc/assertions.nix`. That prevents `lib/` from being used as a
standalone tree, which is exactly how `nixos/modules/misc/documentation.nix`
consumes it when building `lazy-options.json`.
Host both fragments in `lib/` and expose them as `lib.genericModules`, so that
consumers outside `lib/` reach them through the `lib` module argument instead of
a filesystem-relative import. The old locations become re-exports, keeping
`modules/generic/meta-maintainers.nix` importable as documented in
`modules/README.md` and `nixos/modules/misc/assertions.nix` usable from
`nixos/modules/module-list.nix`.
`lib` now shares the `filteredModules` tree in `documentation.nix`, so that
`declarations` pointing into it are stripped like the ones pointing into
`modules` and `nixos`, rather than leaving a disallowed store path reference in
`lazy-options.json`.
Assisted-by: Claude:claude-opus-5
There was no need for it to be this complicated.
Notably the maintainer check was never used anyways, because only its
merge function was used, which doesn't do a check
There is a minor functional change with this commit, which is that even
if explicitly `meta.maintainers = []`, that module will be in the result
when it wasn't before. I deem this insignificant.
This factors out `meta.maintainers` from NixOS `misc/meta.nix` for use in arbitrary
Module System applications.
It is useful beyond NixOS and not coupled to it, although it is currently coupled to Nixpkgs'
`lib.maintainers`.
That restriction could be lifted optionally if there's future demand.