allow menu entries to be subtypes of page

with an example
This commit is contained in:
Valentin Gagarin 2024-11-13 15:24:41 +01:00 committed by Valentin Gagarin
parent 836ceb846a
commit 6631c09803
2 changed files with 20 additions and 2 deletions

View file

@ -1,4 +1,4 @@
{ config, ... }:
{ config, lib, ... }:
let
inherit (config) pages;
in
@ -10,6 +10,20 @@ in
menu.label = "Consortium";
menu.items = map (page: { inherit page; }) (with pages; [ nlnet oid tweag nordunet ]);
}
{
menu.label = "News";
menu.items =
let
sorted = with lib; reverseList (sortOn (entry: entry.date) config.collections.news.entry);
in
map
(page: {
page = lib.recursiveUpdate page {
title = "${page.date}: ${page.title}";
};
})
(lib.take 3 sorted);
}
{ page = pages.fediversity; }
{ page = pages.grants; }
];

View file

@ -5,6 +5,10 @@ let
types
;
cfg = config;
subtype = baseModule: types.submodule [
baseModule
{ _module.freeformType = types.attrs; }
];
in
{
content-types.named-link = { ... }: {
@ -36,7 +40,7 @@ in
description = "List of menu items";
type = with types; listOf (attrTag {
menu = mkOption { type = submodule cfg.content-types.navigation; };
page = mkOption { type = submodule cfg.content-types.page; };
page = mkOption { type = subtype cfg.content-types.page; };
link = mkOption { type = submodule cfg.content-types.named-link; };
});
};