{ config, lib, ... }: let inherit (config) pages; cfg = config; in { imports = lib.nixFiles ./.; collections.news.type = cfg.content-types.article; collections.events.type = cfg.content-types.event; pages.index = { config, link, ... }: { title = "Welcome to the Fediversity project"; description = "Fediversity web site"; summary = '' This web site hosts up-to-date information about the the NGI Zero Fediversity project. ''; body = '' ${pages.fediversity.summary} [Learn more about Fediversity](${link pages.fediversity}) ''; outputs.html = (cfg.templates.html.page config).override (final: prev: { html = { head.title.text = "Fediversity"; head.link.stylesheets = prev.html.head.link.stylesheets ++ [ { href = "${link cfg.assets."index.css"}"; } ]; body.content = let prev-content = prev.html.body.content; to-section = { heading, body, attrs ? { } }: { section = { heading.content = heading; inherit attrs; content = [ (cfg.templates.html.markdown { name = "${config.name}-${lib.slug heading}"; inherit body; }) ]; }; }; in [ (lib.head prev-content) # header { section = { attrs = { }; heading.content = config.title; content = [ (cfg.templates.html.markdown { inherit (config) name body; }) ] ++ (map to-section [ { heading = "Fediversity grants"; body = '' ${pages.grants.summary} [Learn more about Fediversity grants](${link pages.grants}) ''; } { heading = "Consortium"; body = '' The Consortium behind the Fediversity project is a cooperation between NLnet, Open Internet Discourse Foundation, NORDUnet and Tweag. ${toString (map (partner: '' ### ${partner.title} ${partner.summary} [Read more about ${partner.title}](${link partner}) '') (with pages; [ nlnet oid tweag nordunet ]))} ''; } { heading = "Fediverse explained"; body = '' ${toString (map (role: '' ### ${role.title} ${role.summary} [Read more about ${role.title}](${link role}) '') (with pages; [ individuals developers european-commission ]))} ''; } ]); }; } ] ++ (map to-section [ { heading = "News"; attrs = { class = [ "collection" ]; }; body = let sorted = with lib; reverseList (sortOn (entry: entry.date) cfg.collections.news.entry); in lib.join "\n" (map (article: '' - ${article.date} [${article.title}](${link article}) '') sorted); } { heading = "Events"; attrs = { class = [ "collection" ]; }; body = let sorted = with lib; reverseList (sortOn (entry: entry.start-date) cfg.collections.events.entry); in lib.join "\n" (map (article: '' - ${article.start-date} [${article.title}](${link article}) '') sorted); } ]); }; }); }; assets."index.css".path = with lib; builtins.toFile "index.css" '' section h1, section h2, section h3 { text-align: center; } section h1 { font-size: 3em; } section h2 { font-size: 2.5em; } section h3 { font-size: 1.5em; } section.collection h1 { font-size: 2em; text-align: left; } ''; }