Fediversity/website/structure/default.nix

68 lines
1.7 KiB
Nix
Raw Normal View History

2024-11-13 15:24:40 +01:00
{ config, options, lib, pkgs, ... }:
let
inherit (lib)
mkOption
types
;
cfg = config;
in
{
2024-11-13 15:24:41 +01:00
imports = [ ./content-types.nix ];
2024-11-13 15:24:41 +01:00
2024-11-13 15:24:41 +01:00
# TODO: enable i18n, e.g. via a nested attribute for language-specific content
2024-11-13 15:24:40 +01:00
options.pages = mkOption {
description = ''
Collection of pages on the site
'';
2024-11-13 15:24:41 +01:00
type = with types; attrsOf (submodule config.content-types.page);
2024-11-13 15:24:41 +01:00
};
2024-11-13 15:24:40 +01:00
2024-11-13 15:24:41 +01:00
options.collections = mkOption
{
description = ''
Named collections of unnamed pages
2024-11-13 15:24:41 +01:00
Define the content type of a new collection `example` to be `article`:
```nix
config.collections.example.type = config.types.article;
```
Add a new entry to the `example` collection:
```nix
config.collections.example.entry = {
# contents here
}
```
2024-11-13 15:24:41 +01:00
'';
type = with types; attrsOf (submodule ({ name, config, ... }: {
options = {
type = mkOption {
description = "Type of entries in the collection";
type = types.deferredModule;
2024-11-13 15:24:40 +01:00
};
name = mkOption {
description = "Symbolic name, used as a human-readable identifier";
type = types.str;
default = name;
};
2024-11-13 15:24:41 +01:00
entry = mkOption {
description = "An entry in the collection";
2024-11-13 15:24:41 +01:00
type = types.collection (types.submodule ({
_module.args.collection = config;
2024-11-13 15:24:41 +01:00
imports = [ config.type ];
}));
2024-11-13 15:24:40 +01:00
};
};
}));
2024-11-13 15:24:41 +01:00
};
2024-11-13 15:24:40 +01:00
2024-11-13 15:24:41 +01:00
options.menus = mkOption {
description = ''
Collection navigation menus
'';
type = with types; attrsOf (submodule config.content-types.navigation);
};
2024-11-13 15:24:40 +01:00
}