From e67e3fbe1f10449b50dca5a7d06305830aba625f Mon Sep 17 00:00:00 2001 From: Sameer Rahmani Date: Tue, 30 Apr 2024 12:29:47 +0100 Subject: [PATCH] Add the meta.maintainers and meta.doc options in the unit module --- nix/fg42/lib.nix | 2 ++ nix/modules/unit/README.md | 1 + nix/modules/unit/default.nix | 55 ++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 nix/modules/unit/README.md diff --git a/nix/fg42/lib.nix b/nix/fg42/lib.nix index 5dbbca0..43de278 100644 --- a/nix/fg42/lib.nix +++ b/nix/fg42/lib.nix @@ -16,6 +16,8 @@ { pkgs, ... }: final: prev: rec { + maintainers = import ../../maintainers.nix; + /* Create a value to be accessable on the Elisp side as a variable. */ diff --git a/nix/modules/unit/README.md b/nix/modules/unit/README.md new file mode 100644 index 0000000..5984dd5 --- /dev/null +++ b/nix/modules/unit/README.md @@ -0,0 +1 @@ +# Unit Module diff --git a/nix/modules/unit/default.nix b/nix/modules/unit/default.nix index e73810d..b57bd7b 100644 --- a/nix/modules/unit/default.nix +++ b/nix/modules/unit/default.nix @@ -34,9 +34,60 @@ let src = ./.; }; + + maintainer = mkOptionType { + name = "maintainer"; + check = email: elem email (attrValues lib.maintainers); + merge = loc: defs: listToAttrs (singleton (nameValuePair (last defs).file (last defs).value)); + }; + + listOfMaintainers = types.listOf maintainer // { + # Returns list of + # { "module-file" = [ + # "maintainer1 " + # "maintainer2 " ]; + # } + merge = loc: defs: + zipAttrs + (flatten (imap1 + (n: def: imap1 + (m: def': + maintainer.merge (loc ++ [ "[${toString n}-${toString m}]" ]) + [{ inherit (def) file; value = def'; }]) + def.value) + defs)); + }; + docFile = types.path // { + # Returns tuples of + # { file = "module location"; value = ; } + merge = loc: defs: defs; + }; + in { options = { + meta = { + maintainers = mkOption { + type = listOfMaintainers; + internal = true; + default = [ ]; + example = literalExpression ''[ lib.maintainers.all ]''; + description = lib.mdDoc '' + List of maintainers of each module. This option should be defined at + most once per module. + ''; + }; + + doc = mkOption { + type = docFile; + internal = true; + example = "./meta.chapter.md"; + description = lib.mdDoc '' + Documentation prologue for the set of options of each module. This + option should be defined at most once per module. + ''; + }; + }; fg42.version = mkOption { type = types.str; visible = true; @@ -197,6 +248,10 @@ in '') ]; + meta = { + maintainers = [ maintainers.lxsameer ]; + doc = ./README.md; + }; }; }