modules/misc: include assertions and meta modules in the repo

Based on the modules we previously imported from NixOS.

This will allow us to drop the `defaultPkgs` specialArg and avoids
needing the proposed `pkgsPath` specialArg.
This commit is contained in:
Matt Sturgeon 2024-09-24 02:58:37 +01:00
parent 901346e38b
commit 6da94195c2
No known key found for this signature in database
GPG key ID: 4F91844CED1A8299
3 changed files with 92 additions and 8 deletions

View file

@ -0,0 +1,34 @@
{ lib, ... }:
# Based on https://github.com/NixOS/nixpkgs/blob/814a4e48/nixos/modules/misc/assertions.nix
{
options = {
assertions = lib.mkOption {
type = with lib.types; listOf unspecified;
internal = true;
default = [ ];
example = [
{
assertion = false;
message = "you can't enable this for that reason";
}
];
description = ''
This option allows modules to express conditions that must
hold for the evaluation of the system configuration to
succeed, along with associated error messages for the user.
'';
};
warnings = lib.mkOption {
internal = true;
default = [ ];
type = with lib.types; listOf str;
example = [ "The `foo' service is deprecated and will go away soon!" ];
description = ''
This option allows modules to show warnings to users during
the evaluation of the system configuration.
'';
};
};
# implementation of assertions is in lib/modules.nix
}

View file

@ -1,15 +1,9 @@
{ defaultPkgs, ... }:
let
# We can't use config._module.args to define imports,
# so we're forced to use specialArgs.defaultPkgs's path
nixosModules = defaultPkgs.path + "/nixos/modules/";
in
{
imports = [
./assertions.nix
./context.nix
./meta.nix
./nixpkgs.nix
./nixvim-info.nix
(nixosModules + "/misc/assertions.nix")
(nixosModules + "/misc/meta.nix")
];
}

56
modules/misc/meta.nix Normal file
View file

@ -0,0 +1,56 @@
{ lib, ... }:
# Based on https://github.com/NixOS/nixpkgs/blob/814a4e48/nixos/modules/misc/meta.nix
let
maintainer = lib.mkOptionType {
name = "maintainer";
check = m: lib.elem m (lib.attrValues lib.maintainers);
merge =
loc: defs:
let
def = lib.last defs;
in
{
${def.file} = def.value;
};
};
listOfMaintainers = lib.types.listOf maintainer // {
# Returns attrset of
# { "module-file" = [
# "maintainer1 <first@nixos.org>"
# "maintainer2 <second@nixos.org>" ];
# }
merge =
loc: defs:
lib.pipe defs [
(lib.imap1 (
n: def:
lib.imap1 (
m: value:
maintainer.merge (loc ++ [ "[${toString n}-${toString m}]" ]) [
{
inherit (def) file;
inherit value;
}
]
) def.value
))
lib.flatten
lib.zipAttrs
];
};
in
{
options.meta = {
maintainers = lib.mkOption {
type = listOfMaintainers;
internal = true;
default = [ ];
example = lib.literalExpression "[ lib.maintainers.all ]";
description = ''
List of maintainers of each module. This option should be defined at
most once per module.
'';
};
};
}