{ 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 = with lib; mkDefault (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; } ) ); }; }