summaryrefslogtreecommitdiff
path: root/html/publications/default.nix
blob: 04bb502c34947c4fb96c2c584531d20b94931cd4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{ html, data, lib, ... }:

let
  publications = data.publications;
  attrValsOpt = attrs: attrSet:
    lib.attrVals (builtins.filter (attr: lib.hasAttr attr attrSet) attrs)
    attrSet;
  format = publication:
    with html;
    with publication;
    {
      inherit id title url year abstract cite;
    } // (let
      authorsOther = lib.remove data.basics.name
        (builtins.map (author: "${author.given} ${author.family}") author);
    in lib.optionalAttrs (authorsOther != [ ]) {
      authors = "With ${lib.concatStringsSep ", " authorsOther}";
    }) // lib.optionalAttrs (publication ? container-title) {
      published = "In ${em container-title}, " + lib.concatStringsSep ", "
        (attrValsOpt [ "volume" "issue" "publisher" ] publication);
    } // lib.optionalAttrs (publication ? ISBN) {
      isbn = "${small "ISBN"}: ${ISBN}";
    } // lib.optionalAttrs (publication ? ISSN) {
      issn = "${small "ISSN"}: ${ISSN}";
    } // lib.optionalAttrs (publication ? DOI) {
      doi = "${small "DOI"}: ${href "https://doi.org/${DOI}" (code DOI)}";
    };
in {
  title = "Publications";
  priority = 10;
  body = with html;
    dl (for (sort.reverse.byPath [ "issued" "date-parts" ] publications)
      (publication:
        let formatted = format publication;
        in with formatted;
        lines [
          (dt { id = "Publications#${id}"; }
            "${href { target = "_blank"; } url title} (${year})")
          (dd [
            (lib.concatStringsSep ". "
              (attrValsOpt [ "authors" "published" "isbn" "issn" "doi" ]
                formatted))
            (details [
              (summary "More")
              (dl [
                (dt "Abstract.")
                (dd (blockquote abstract))
                (dt "Cite.")
                (let
                  citeWith = title: attr:
                    details [
                      (summary title)
                      (pre (code (lib.getAttr attr cite)))
                    ];
                in dd [
                  (citeWith "BibLaTeX" "biblatex")
                  (citeWith "BibTeX" "bibtex")
                  (citeWith "CSL JSON" "csljson")
                ])
              ])
            ])
          ])
        ]));
}