0c178a0ef6
Upstream nixpkgs removed a lot of aliases this time, so we needed to do the following transformations. It's a real shame that aliases only really become discoverable easily when they are removed. * runCommandNoCC -> runCommand * gmailieer -> lieer We also need to work around the fact that home-manager hasn't catched on to this rename. * mysql -> mariadb * pkgconfig -> pkg-config This also affects our Nix fork which needs to be bumped. * prometheus_client -> prometheus-client * rxvt_unicode -> rxvt-unicode-unwrapped * nix-review -> nixpkgs-review * oauth2_proxy -> oauth2-proxy Additionally, some Go-related builders decided to drop support for passing the sha256 hash in directly, so we need to use the generic hash arguments. Change-Id: I84aaa225ef18962937f8616a9ff064822f0d5dc3 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6792 Autosubmit: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: flokli <flokli@flokli.de> Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: wpcarro <wpcarro@gmail.com>
78 lines
2.4 KiB
Nix
78 lines
2.4 KiB
Nix
# Assembles the website index and configures an nginx instance to
|
|
# serve it.
|
|
#
|
|
# The website is made up of a simple header&footer and content
|
|
# elements for things such as blog posts and projects.
|
|
#
|
|
# Content for the blog is in //users/tazjin/blog instead of here.
|
|
{ depot, lib, pkgs, ... }@args:
|
|
|
|
with depot;
|
|
with nix.yants;
|
|
|
|
let
|
|
inherit (builtins) readFile replaceStrings sort;
|
|
inherit (pkgs) writeFile runCommand;
|
|
|
|
# The different types of entries on the homepage.
|
|
entryClass = enum "entryClass" [ "blog" "project" "misc" ];
|
|
|
|
# The definition of a single entry.
|
|
entry = struct "entry" {
|
|
class = entryClass;
|
|
title = string;
|
|
url = string;
|
|
date = int; # epoch
|
|
description = option string;
|
|
};
|
|
|
|
escape = replaceStrings [ "<" ">" "&" "'" ] [ "<" ">" "&" "'" ];
|
|
|
|
postToEntry = defun [ web.blog.post entry ] (post: {
|
|
class = "blog";
|
|
title = post.title;
|
|
url = "/blog/${post.key}";
|
|
date = post.date;
|
|
});
|
|
|
|
formatDate = defun [ int string ] (date: readFile (runCommand "date" { } ''
|
|
date --date='@${toString date}' '+%Y-%m-%d' > $out
|
|
''));
|
|
|
|
formatEntryDate = defun [ entry string ] (entry: entryClass.match entry.class {
|
|
blog = "Blog post from ${formatDate entry.date}";
|
|
project = "Project from ${formatDate entry.date}";
|
|
misc = "Posted on ${formatDate entry.date}";
|
|
});
|
|
|
|
entryToDiv = defun [ entry string ] (entry: ''
|
|
<a href="${entry.url}" class="entry ${entry.class}">
|
|
<div>
|
|
<p class="entry-title">${escape entry.title}</p>
|
|
${
|
|
lib.optionalString ((entry ? description) && (entry.description != null))
|
|
"<p class=\"entry-description\">${escape entry.description}</p>"
|
|
}
|
|
<p class="entry-date">${formatEntryDate entry}</p>
|
|
</div>
|
|
</a>
|
|
'');
|
|
|
|
index = entries: pkgs.writeText "index.html" (lib.concatStrings (
|
|
[ (builtins.readFile ./header.html) ]
|
|
++ (map entryToDiv (sort (a: b: a.date > b.date) entries))
|
|
++ [ (builtins.readFile ./footer.html) ]
|
|
));
|
|
|
|
pageEntries = import ./entries.nix;
|
|
homepage = index ((map postToEntry users.tazjin.blog.posts) ++ pageEntries);
|
|
atomFeed = import ./feed.nix (args // { inherit entry pageEntries; });
|
|
in
|
|
runCommand "website" { } ''
|
|
mkdir $out
|
|
cp ${homepage} $out/index.html
|
|
cp ${atomFeed} $out/feed.atom
|
|
mkdir $out/static
|
|
cp -r ${depot.web.static}/* $out/static
|
|
cp -rf ${./static}/* $out/static
|
|
''
|