From 5fe2440107941ba9a62539cb9503ad40a5a5a23d Mon Sep 17 00:00:00 2001 From: wi11-holdsworth <83637728+wi11-holdsworth@users.noreply.github.com> Date: Mon, 27 Jan 2025 22:16:57 +1100 Subject: [PATCH] site source --- Makefile | 204 +++++++++++++++++++++++++++++ articles/welcome.md | 18 +++ config | 7 + flake.lock | 57 ++++++++ flake.nix | 16 +++ shell.nix | 8 ++ tags/test | 2 + tags/welcome | 1 + templates/article_entry.html | 1 + templates/article_footer.html | 1 + templates/article_header.html | 1 + templates/article_list_footer.html | 1 + templates/article_list_header.html | 1 + templates/article_separator.html | 0 templates/footer.html | 1 + templates/header.html | 1 + templates/index_footer.html | 1 + templates/index_header.html | 1 + templates/tag_entry.html | 1 + templates/tag_index_footer.html | 1 + templates/tag_index_header.html | 1 + templates/tag_list_footer.html | 1 + templates/tag_list_header.html | 1 + templates/tag_separator.html | 1 + 24 files changed, 328 insertions(+) create mode 100644 Makefile create mode 100644 articles/welcome.md create mode 100644 config create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 shell.nix create mode 100644 tags/test create mode 100644 tags/welcome create mode 100644 templates/article_entry.html create mode 100644 templates/article_footer.html create mode 100644 templates/article_header.html create mode 100644 templates/article_list_footer.html create mode 100644 templates/article_list_header.html create mode 100644 templates/article_separator.html create mode 100644 templates/footer.html create mode 100644 templates/header.html create mode 100644 templates/index_footer.html create mode 100644 templates/index_header.html create mode 100644 templates/tag_entry.html create mode 100644 templates/tag_index_footer.html create mode 100644 templates/tag_index_header.html create mode 100644 templates/tag_list_footer.html create mode 100644 templates/tag_list_header.html create mode 100644 templates/tag_separator.html diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9e316cc --- /dev/null +++ b/Makefile @@ -0,0 +1,204 @@ +#!/usr/bin/make -f + +BLOG := $(MAKE) -f $(lastword $(MAKEFILE_LIST)) --no-print-directory +ifneq ($(filter-out help,$(MAKECMDGOALS)),) +include config +endif + +# The following can be configured in config +BLOG_DATE_FORMAT_INDEX ?= %x +BLOG_DATE_FORMAT ?= %x %X +BLOG_TITLE ?= blog +BLOG_DESCRIPTION ?= blog +BLOG_URL_ROOT ?= http://localhost/blog +BLOG_FEED_MAX ?= 20 +BLOG_FEEDS ?= rss atom +BLOG_SRC ?= articles + + +.PHONY: help init build deploy clean + +ARTICLES = $(shell git ls-tree HEAD --name-only -- $(BLOG_SRC)/ 2>/dev/null) +TAGFILES = $(patsubst $(BLOG_SRC)/%.md,tags/%,$(ARTICLES)) + +help: + $(info blogit init|build|deploy|clean) + +init: + mkdir -p $(BLOG_SRC) data templates + printf '
tags: ' > templates/tag_list_header.html + printf '#$$NAME' > templates/tag_entry.html + printf ', ' > templates/tag_separator.html + printf '
' > templates/tag_list_footer.html + printf 'posted: $$DATE_POSTED
edited: $$DATE_EDITED
,;bT}' \
+ -e 'x;/<\/code>/{x;s,\$$,\$,g;$$G;p;d};x' \
+ -e 's,\\\$$,\$,g' \
+ -e '/^####/{s,^####,,;s,$$,
,;H;s,.*,,;x;p;d}' \
+ -e '/^###/{s,^###,,;s,$$,
,;H;s,.*,,;x;p;d}' \
+ -e '/^##/{s,^##,,;s,$$,
,;H;s,.*,,;x;p;d}' \
+ -e '/^#/{s,^#,,;s,$$,
,;H;s,.*,,;x;p;d}' \
+ -e 's,`\([^`]*\)`,\1,g' \
+ -e 's,\*\*\(\([^*<>][^*<>]*\*\?\)*\)\*\*,\1,g' \
+ -e 's,\*\([^*<>][^*<>]*\)\*,\1,g' \
+ -e 's,!\[\([^]]*\)\](\([^)]*\)),
,g' \
+ -e 's,\[\([^]]*\)\](\([^)]*\)),\1,g' \
+ -e '/^- /{s,^- ,,;s,$$, ,;x;/^<\/ul>/{x;bL};p;s,.*,,;bT}' \
+ -e '/^[1-9][0-9]*\. /{s,^[0-9]*\. ,- ,;s,$$,
,;x;/^<\/ol>/{x;bL};p;s,.*,,;bT}' \
+ -e '/^$$/{x;/^$$/d;p;d}' \
+ -e 'x;/^$$/{s,.*,,;bT};x' \
+ -e ':L;$$G;p;d' \
+ -e ':T;p;:t;s,<\([^/>][^>]*\)>\(\(<[^/>][^>]*>\)*\),\2\1>,;/<[^\/>]/bt;x;/^$$/{$${x;p};d};bL' \
+ "$<" | envsubst >> $@; \
+ envsubst < templates/article_footer.html >> $@; \
+ envsubst < templates/footer.html >> $@; \
+
+blog/rss.xml: $(ARTICLES)
+ printf '\n\n\n%s \n%s\n%s \n' \
+ "$(BLOG_TITLE)" "$(BLOG_URL_ROOT)" "$(BLOG_DESCRIPTION)" > $@
+ for f in $(ARTICLES); do \
+ printf '%s ' "$$f"; \
+ git log --diff-filter=A --date="format:%s %a, %d %b %Y %H:%M:%S %z" --pretty=format:'%ad%n' -- "$$f"; \
+ done | sort -k2nr | head -n $(BLOG_FEED_MAX) | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE; do \
+ printf '- \n
%s \n%s\n%s \n%s \n%s \n \n' \
+ "`head -n 1 $$FILE`" \
+ "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
+ "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
+ "$$DATE" \
+ "`sed -n '1d;/^$$/{2{d;b};q};p' < $$FILE`"; \
+ done >> $@
+ printf ' \n \n' >> $@
+
+blog/atom.xml: $(ARTICLES)
+ printf '\n\n%s \n%s \n%s \n\n%s \n\n' \
+ "$(BLOG_TITLE)" "$(BLOG_DESCRIPTION)" "$(shell date +%Y-%m-%dT%H:%M:%SZ)" "$(BLOG_URL_ROOT)" "$(BLOG_URL_ROOT)/atom.xml" "$(BLOG_URL_ROOT)/atom.xml" > $@
+ for f in $(ARTICLES); do \
+ printf '%s ' "$$f"; \
+ git log --diff-filter=A --date="format:%s %Y-%m-%dT%H:%M:%SZ" --pretty=format:'%ad %aN%n' -- "$$f"; \
+ done | sort -k2nr | head -n $(BLOG_FEED_MAX) | cut -d" " -f1,3- | while IFS=" " read -r FILE DATE AUTHOR; do \
+ printf '\n%s \n\n%s \n%s \n%s \n%s \n%s \n \n' \
+ "`head -n 1 $$FILE`" \
+ "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
+ "$(BLOG_URL_ROOT)/`basename $$FILE .md`.html" \
+ "$$DATE" \
+ "`git log -n 1 --date="format:%Y-%m-%dT%H:%M:%SZ" --pretty=format:'%ad' -- "$$FILE"`" \
+ "$$AUTHOR" \
+ "`sed -n '1d;/^$$/{2{d;b};q};p' < $$FILE`"; \
+ done >> $@
+ printf ' \n' >> $@
+
diff --git a/articles/welcome.md b/articles/welcome.md
new file mode 100644
index 0000000..bfc228f
--- /dev/null
+++ b/articles/welcome.md
@@ -0,0 +1,18 @@
+welcome!
+
+the static site generator i'm using to kickstart this blog[1] requires a single post to exist in order to compile, and failing to provide a post sends `make` into an infinite loop.
+
+so without further ado here it is, my first post!
+
+topics to expect once i get myself more organised:
+
+- basic tutorials on setting up self-hosted nixos web services
+- lazy hardware reviews
+- software shenanigans
+- anything else i feel is relevant and useful to the wider web
+
+thanks for stopping by ^.^
+
+[1] [blogit](https://pedantic.software/git/blogit)
+
+;tags: all
diff --git a/config b/config
new file mode 100644
index 0000000..a36760b
--- /dev/null
+++ b/config
@@ -0,0 +1,7 @@
+BLOG_REMOTE:=opal:/srv/fi33buzz
+BLOG_DATE_FORMAT:=%Y/%m/%d %H:%M
+BLOG_DATE_FORMAT_INDEX:=%Y/%m/%d
+BLOG_TITLE:=will holdsworth's blog
+BLOG_URL_ROOT:=https://fi33.buzz
+BLOG_FEED_MAX:=20
+BLOG_FEEDS:=rss atom
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..7ce6dc3
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,57 @@
+{
+ "nodes": {
+ "flake-utils": {
+ "inputs": {
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1731533236,
+ "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 0,
+ "narHash": "sha256-nmKOgAU48S41dTPIXAq0AHZSehWUn6ZPrUKijHAMmIk=",
+ "path": "/nix/store/irknf7niks2djxz4csh7sr44wwrs082y-source",
+ "type": "path"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "type": "indirect"
+ }
+ },
+ "root": {
+ "inputs": {
+ "flake-utils": "flake-utils",
+ "nixpkgs": "nixpkgs"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..c996dab
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,16 @@
+{
+ inputs.flake-utils.url = "github:numtide/flake-utils";
+
+ outputs = {
+ nixpkgs,
+ flake-utils,
+ ...
+ }:
+ flake-utils.lib.eachDefaultSystem
+ (system:
+ let pkgs = nixpkgs.legacyPackages.${system}; in
+ {
+ devShells.default = import ./shell.nix { inherit pkgs; };
+ }
+ );
+}
diff --git a/shell.nix b/shell.nix
new file mode 100644
index 0000000..cf1447d
--- /dev/null
+++ b/shell.nix
@@ -0,0 +1,8 @@
+{ pkgs ? import {} }:
+ pkgs.mkShell {
+ nativeBuildInputs = with pkgs.buildPackages; [
+ gnumake
+ envsubst
+ python312Packages.mat2
+ ];
+}
diff --git a/tags/test b/tags/test
new file mode 100644
index 0000000..bae42c5
--- /dev/null
+++ b/tags/test
@@ -0,0 +1,2 @@
+test1
+test2
diff --git a/tags/welcome b/tags/welcome
new file mode 100644
index 0000000..0702cb5
--- /dev/null
+++ b/tags/welcome
@@ -0,0 +1 @@
+all
diff --git a/templates/article_entry.html b/templates/article_entry.html
new file mode 100644
index 0000000..858c6c4
--- /dev/null
+++ b/templates/article_entry.html
@@ -0,0 +1 @@
+- $DATE - $TITLE
\ No newline at end of file
diff --git a/templates/article_footer.html b/templates/article_footer.html
new file mode 100644
index 0000000..b55125b
--- /dev/null
+++ b/templates/article_footer.html
@@ -0,0 +1 @@
+
posted: $DATE_POSTED
edited: $DATE_EDITED