tvl-depot/web/tvl/default.nix
sterni 040416b3eb refactor(web): common template for index pages of tvl and atward
Use simple string interpolation based approach to templating and allow
changing the main body, the title and to inject extra HTML into the head
element. Additionally we can use `https://tvl.fyi/` instead of `/` when
referring to assets.

One limitation currently is that the template only works for index pages
(it link to self using `href="/"`), but this should be easy to fix.

For atward, instead of using the `onload` attribute of `body`, we now
register an event listener in JavaScript which makes the template code
less complicated. When building the derivation the template is rendered
to HTML and injected into the source.

Change-Id: I2ea0c5bf5f6286e781285ade7751a348bab3bdc8
Reviewed-on: https://cl.tvl.fyi/c/depot/+/3112
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
2021-05-12 15:36:44 +00:00

51 lines
1.3 KiB
Nix

{ depot, pkgs, ... }:
let
inherit (pkgs) graphviz runCommandNoCC writeText;
tvlGraph = runCommandNoCC "tvl.svg" {
nativeBuildInputs = with pkgs; [ fontconfig freetype cairo jetbrains-mono ];
} ''
${graphviz}/bin/neato -Tsvg ${./tvl.dot} > $out
'';
homepage = depot.web.tvl.template {
title = "The Virus Lounge";
content = ''
<main>
<img alt="The Virus Lounge" src="/static/virus_lounge.webp">
</main>
<p>
Welcome to <b>The Virus Lounge</b>. We're a random group of
people who feel undersocialised in these trying times, and
we've decided that there isn't enough spontaneous socialising
on the internet.
</p>
<hr>
<h2>Where did all these people come from?</h2>
<p>
It's pretty straightforward. Feel free to click on people, too.
</p>
${builtins.readFile tvlGraph}
'';
extraHead = ''
<style>
svg {
max-width: inherit;
height: auto;
}
</style>
'';
};
in runCommandNoCC "website" {} ''
mkdir -p $out/static
cp ${homepage} $out/index.html
cp -r ${./static}/* $out/static
# Some assets are stolen from tazjin's blog
cp ${depot.users.tazjin.homepage}/static/jetbrains-* $out/static
cp ${depot.users.tazjin.homepage}/static/tazjin.css $out/static
''