blog posts
-
'' + lib.concatMapStrings
(post: ''
- ${parseTitle post} '') posts + ''
{ depot, ... }: let inherit (depot.third_party.nixpkgs) lib ; inherit (depot.users.sterni.nix) url fun string ; inherit (depot.web.bubblegum) pathInfo scriptName respond absolutePath ; # substituted using substituteAll in default.nix blogdir = "@blogdir@"; # blogdir = toString ./posts; # for local testing parseDate = post: let matched = builtins.match "/?([0-9]+)-([0-9]+)-([0-9]+)-.+" post; in if matched == null then [ 0 0 0 ] else builtins.map builtins.fromJSON matched; parseTitle = post: let matched = builtins.match "/?[0-9]+-[0-9]+-[0-9]+-(.+).html" post; in if matched == null then "no title" else builtins.head matched; dateAtLeast = a: b: builtins.all fun.id (lib.zipListsWith (partA: partB: partA >= partB) a b); byPostDate = a: b: dateAtLeast (parseDate a) (parseDate b); posts = builtins.sort byPostDate (builtins.attrNames (lib.filterAttrs (_: v: v == "regular") (builtins.readDir blogdir))); generic = { title, inner, ... }: ''