html.nix/templaters/basic.nix

105 lines
2.9 KiB
Nix
Raw Normal View History

2021-05-16 22:47:53 +03:00
{ utils, posts, pkgs, config, pages, ... }@context:
2021-05-15 19:42:16 +03:00
let
2021-05-16 22:47:53 +03:00
inherit (utils) readFile mapAttrsToList tags fetchGit map elemAt foldl';
inherit (pkgs.lib) optional length splitString mapAttrs' nameValuePair;
2021-05-15 19:42:16 +03:00
stylesheets = map tags.mkStylesheet [
"https://unpkg.com/purecss@2.0.6/build/pure-min.css"
"https://unpkg.com/purecss@2.0.6/build/grids-responsive-min.css"
"mine.css"
];
renderPost = { name, value }:
let
parts = splitString "_" name;
id = elemAt parts 1;
in
with tags; article [
(a { href = "#${id}"; class = "postheader"; } (h3 { inherit id; } ("## " + id)))
(h6 ("date: " + (elemAt parts 0)))
2021-05-16 22:47:53 +03:00
value
];
2021-05-16 22:47:53 +03:00
pagesSection =
map
(name: tags.div { class = "pure-u-1"; } (tags.a { href = "./${name}.html"; class = "postheader"; } name))
((mapAttrsToList (name: _: name) pages) ++ [ "index" ]);
2021-05-16 02:56:54 +03:00
postsSectionContent = with tags; [
(a { href = "#posts"; class = "postheader"; } (h1 "# posts"))
] ++ (map renderPost posts);
2021-05-16 22:47:53 +03:00
sidebarSection = optional ((length pagesSection) > 0) (
with tags; nav { class = "sidebar"; } ([
(a { href = "#pages"; class = "postheader"; } (h1 "# pages"))
2021-05-16 22:47:53 +03:00
(div { class = "pure-g"; } pagesSection)
])
);
2021-05-16 02:56:54 +03:00
mkPage = content: with tags;
2021-05-15 19:42:16 +03:00
html [
(head (stylesheets ++ [
2021-05-15 19:42:16 +03:00
(title config.title)
2021-05-15 21:52:25 +03:00
(meta { name = "viewport"; content = "width=device-width, initial-scale=1"; })
]))
2021-05-16 02:56:54 +03:00
(body (sidebarSection ++ [ (div { class = "content"; } content) ]))
2021-05-15 19:42:16 +03:00
];
2021-05-15 21:29:30 +03:00
2021-05-16 02:56:54 +03:00
stylesheet =
with utils.css;
let
marginMobile = {
margin-left = "3%";
margin-right = "3%";
};
in
2021-05-16 02:56:54 +03:00
css [
(css {
body = {
font-family = [ "Raleway" "Helvetica" "Arial" "sans-serif" ];
};
2021-05-16 04:25:22 +03:00
pre = {
2021-05-16 02:56:54 +03:00
font-family = [ "Iosevka Term" "Iosevka" "monospace" ];
background = "#000000cc";
color = "#eeeeee";
};
"a.postheader,a.postheader:hover" = {
color = "inherit";
text-decoration = "none";
};
"a.postheader:hover" = {
text-decoration = "underline";
};
"div.content" = {
margin-top = "5%";
margin-bottom = "5%";
margin-left = "20%";
margin-right = "10%";
};
"nav.sidebar" = {
position = "fixed";
top = 0;
margin-left = "3%";
z-index = 1000;
};
})
(media "max-width: 48em" {
"nav.sidebar" = {
position = "relative";
margin-top = "5%";
} // marginMobile;
2021-05-16 02:56:54 +03:00
"div.content" = {
margin-top = 0;
} // marginMobile;
2021-05-16 02:56:54 +03:00
})
];
in
{
inherit stylesheets sidebarSection mkPage stylesheet;
site = {
"index.html" = mkPage postsSectionContent;
"mine.css" = stylesheet;
2021-05-16 22:47:53 +03:00
} // (mapAttrs' (name: value: nameValuePair (name + ".html") (mkPage value)) pages);
2021-05-15 19:42:16 +03:00
}