about summary refs log tree commit diff
path: root/users/tazjin/blog/default.nix
diff options
context:
space:
mode:
authorVincent Ambo <mail@tazj.in>2020-06-26T19·25+0100
committertazjin <mail@tazj.in>2020-06-26T19·33+0000
commita2cbbedc65c9200fd3c2a6a698366ac431cc153d (patch)
treead3ef740c5f1fb155cc7f2d7eb5be50bc14017db /users/tazjin/blog/default.nix
parenta46ffd85f50e75c3bcb3cac52eade6b35f4c0300 (diff)
chore(tazjin): Move //web/blog & //web/homepage to my userdir r/1087
Change-Id: I96a2620ffb1d9e98a1d8ce7d97f2c4f58c2dbfd3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/603
Reviewed-by: tazjin <mail@tazj.in>
Diffstat (limited to 'users/tazjin/blog/default.nix')
-rw-r--r--users/tazjin/blog/default.nix59
1 files changed, 59 insertions, 0 deletions
diff --git a/users/tazjin/blog/default.nix b/users/tazjin/blog/default.nix
new file mode 100644
index 000000000000..d2f04aaea574
--- /dev/null
+++ b/users/tazjin/blog/default.nix
@@ -0,0 +1,59 @@
+# This creates the static files that make up my blog from the Markdown
+# files in this repository.
+#
+# All blog posts are rendered from Markdown by cheddar.
+{ depot, lib, ... }@args:
+
+with depot.nix.yants;
+
+let
+  inherit (builtins) filter hasAttr map;
+
+  # Type definition for a single blog post.
+  post = struct "blog-post" {
+    key = string; #
+    title = string;
+    date = int;
+
+    # Path to the Markdown file containing the post content.
+    content = path;
+
+    # Should this post be included in the index? (defaults to true)
+    listed = option bool;
+
+    # Is this a draft? (adds a banner indicating that the link should
+    # not be shared)
+    draft = option bool;
+
+    # Previously each post title had a numeric ID. For these numeric
+    # IDs, redirects are generated so that old URLs stay compatible.
+    oldKey = option string;
+  };
+
+  posts = list post (import ./posts.nix);
+  fragments = import ./fragments.nix args;
+
+  rendered = depot.third_party.runCommandNoCC "tazjins-blog" {} ''
+    mkdir -p $out
+
+    ${lib.concatStringsSep "\n" (map (post:
+      "cp ${fragments.renderPost post} $out/${post.key}.html"
+    ) posts)}
+  '';
+
+  includePost = post: !(fragments.isDraft post) && !(fragments.isUnlisted post);
+in {
+  inherit post rendered;
+  static = ./static;
+
+  # Only include listed posts
+  posts = filter includePost posts;
+
+  # Generate embeddable nginx configuration for redirects from old post URLs
+  oldRedirects = lib.concatStringsSep "\n" (map (post: ''
+    location ~* ^(/en)?/${post.oldKey} {
+      # TODO(tazjin): 301 once this works
+      return 302 https://tazj.in/blog/${post.key};
+    }
+  '') (filter (hasAttr "oldKey") posts));
+}