diff --git a/content/navigation.nix b/content/navigation.nix index 30303993..1410f617 100644 --- a/content/navigation.nix +++ b/content/navigation.nix @@ -6,6 +6,7 @@ in menus.main = { label = "Main"; items = [ + { page = pages.index // { title = "Start"; }; } { menu.label = "For you"; menu.items = map (page: { inherit page; }) diff --git a/presentation/default.nix b/presentation/default.nix index 38ca658a..9c78c0d1 100644 --- a/presentation/default.nix +++ b/presentation/default.nix @@ -5,6 +5,14 @@ let types ; templates = import ./templates.nix { inherit lib; }; + render-html = document: + let + eval = lib.evalModules { + class = "DOM"; + modules = [ document (import ./dom.nix { inherit lib; }).document ]; + }; + in + toString eval.config; in { options.templates = @@ -38,30 +46,38 @@ in in { nav = lib.mkDefault templates.nav; - page = lib.mkDefault (config: page: templates.html { - head = '' - ${page.title} - - - ''; - body = '' - ${config.menus.main.outputs.html page} - ${builtins.readFile (commonmark page.name page.body)} - ''; + page = lib.mkDefault (config: page: render-html { + html = { + head = { + title.text = page.title; + meta.description = page.description; + link.canonical = lib.head page.locations; + }; + body.content = '' + ${config.menus.main.outputs.html page} + +

${page.title}

+ + ${builtins.readFile (commonmark page.name page.body)} + ''; + }; }); - article = lib.mkDefault (config: page: templates.html { - head = '' - ${page.title} - - ${with lib; join "\n" (map - (author: '''') - (if isList page.author then page.author else [page.author])) - } - ''; - body = '' - ${config.menus.main.outputs.html page} - ${builtins.readFile (commonmark page.name page.body)} - ''; + article = lib.mkDefault (config: page: render-html { + html = { + head = { + title.text = page.title; + meta.description = page.description; + meta.authors = if lib.isList page.author then page.author else [ page.author ]; + link.canonical = lib.head page.locations; + }; + body.content = '' + ${config.menus.main.outputs.html page} + +

${page.title}

+ + ${builtins.readFile (commonmark page.name page.body)} + ''; + }; }); }; diff --git a/presentation/templates.nix b/presentation/templates.nix index d33630b1..c0d7f652 100644 --- a/presentation/templates.nix +++ b/presentation/templates.nix @@ -1,19 +1,5 @@ { lib }: rec { - html = { head, body }: '' - - - - - - - ${lib.indent " " head} - - - ${lib.indent " " body} - - - ''; nav = menu: page: let render-item = item: diff --git a/structure/document.nix b/structure/document.nix index eca89c88..8af04c36 100644 --- a/structure/document.nix +++ b/structure/document.nix @@ -46,6 +46,8 @@ in default = target: with lib; "${relativePath (head config.locations) (head target.locations)}.html"; }; outputs = mkOption { + # TODO: figure out how to make this overridable at any granularity. + # it should be possible with the DOM module now. description = '' Representations of the document in different formats '';