diff --git a/website/structure/event.nix b/website/structure/event.nix new file mode 100644 index 0000000..8cfe233 --- /dev/null +++ b/website/structure/event.nix @@ -0,0 +1,81 @@ +{ config, options, lib, ... }: +let + inherit (lib) + mkOption + types + ; + cfg = config; +in +{ + content-types.event = { config, collection, ... }: { + imports = [ cfg.content-types.page ]; + options = { + collection = mkOption { + description = "Collection this event belongs to"; + type = options.collections.type.nestedTypes.elemType; + default = collection; + }; + start-date = mkOption { + description = "Start date of the event"; + type = with types; str; + }; + start-time = mkOption { + description = "Start time of the event"; + type = with types; str; + default = null; + }; + end-date = mkOption { + description = "End date of the event"; + type = with types; str; + default = null; + }; + end-time = mkOption { + description = "End time of the event"; + type = with types; str; + default = null; + }; + location = mkOption { + description = "Location of the event"; + type = with types; str; + }; + }; + config.name = lib.slug config.title; + config.summary = lib.mkDefault config.description; + config.outputs.html = lib.mkForce + ((cfg.templates.html.page config).override (final: prev: { + html.body.content = with lib; map + (e: + if isAttrs e && e ? section + then + recursiveUpdate e + { + section.content = [ + { + dl.content = [ + { + terms = [{ dt = "Location"; }]; + descriptions = [{ dd = config.location; }]; + } + { + terms = [{ dt = "Start"; }]; + descriptions = [{ + dd = config.start-date + lib.optionalString (!isNull config.start-time) " ${config.start-time}"; + }]; + } + ] ++ lib.optional (!isNull config.end-date) { + terms = [{ dt = "End"; }]; + descriptions = [{ + dd = config.end-date + lib.optionalString (!isNull config.end-time) " ${config.end-time}"; + }]; + }; + } + ] + ++ e.section.content; + } + else e + ) + prev.html.body.content; + + })); + }; +}