diff --git a/build/index.py b/build/index.py
new file mode 100644
index 0000000..febbc86
--- /dev/null
+++ b/build/index.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+
+import sys
+import re
+
+# we expect the arguments to be filepaths to each blog post
+
+def print_usage():
+ print("\nusage: python mkblogindex.py POSTS\n")
+ print("\n")
+ print("\t\tPOSTS\tfilepaths of blog posts")
+
+# check args for at least one file path
+if len(sys.argv) < 2:
+ print_usage()
+ sys.exit(1)
+
+# posts are arguments from index 1 onwards
+posts = sys.argv[1:]
+
+dir_pattern = re.compile("(.+)/(blog\/.+\.html)")
+path_pattern = re.compile("(.+)\/(\d{4})\/(\d{1,2})\/(\d{1,2})\/(.+).html")
+title_pattern = re.compile("
(.+)
")
+
+# filter posts to just those with a date in them
+posts = [p for p in posts if path_pattern.match(p)]
+posts.reverse()
+
+links = []
+
+# for each file we want to output an tag with a relative href to the site root
+for path in posts:
+ m = re.match(path_pattern, path)
+ year = m.group(2)
+ month = m.group(3).rjust(2, '0')
+ day = m.group(4).rjust(2, '0')
+
+ date = f'{year}-{month}-{day}'
+
+ title = ""
+ with open(path) as f:
+ for line in f:
+ if title_pattern.match(line):
+ title = re.sub(title_pattern, r'\1', line).strip()
+ break
+
+ # clean leading directories to get the relative path we'll use for the link
+ url = re.sub(dir_pattern, r"\2", path)
+
+ item = (date, f'{date}{title}')
+ links.append(item)
+
+# make sure we're properly ordered in reverse date order lol
+links = sorted(links, key=lambda x: x[0])
+links.reverse()
+
+for l in links:
+ print(l[1])
+
diff --git a/makefile b/makefile
index 9abe944..306d8f4 100644
--- a/makefile
+++ b/makefile
@@ -3,26 +3,39 @@ OUT_DIR = out/
HTML_DIR = $(OUT_DIR)html
GEMINI_DIR = $(OUT_DIR)gemini
-MAKE_GEMINI = build/markdown2gemini.py
-MAKE_HTML = build/markdown2html.py
-MAKE_RSS = build/rss.py
+MAKE_GEMINI = build/markdown2gemini.py
+MAKE_HTML = build/markdown2html.py
+MAKE_RSS = build/rss.py
+MAKE_HTML_INDEX = build/index.py
PAGES = $(shell find $(SRC_DIR) -wholename "$(BLOG_SRC_DIR)*.md")
HTML_TARGETS = $(PAGES:$(SRC_DIR)/%.md=$(HTML_DIR)/%.html)
HTML_RSS = $(HTML_DIR)/index.xml
+HTML_INDEX = $(HTML_DIR)/index.html
+
GEMINI_TARGETS = $(PAGES:$(SRC_DIR)/%.md=$(GEMINI_DIR)/%.gmi)
_dummy := $(shell mkdir -p $(HTML_DIR) $(GEMINI_DIR))
$(HTML_DIR)/%.html: $(SRC_DIR)/%.md
- python $(MAKE_HTML) $< $@
+ pipenv run python $(MAKE_HTML) $< $@
$(HTML_RSS): $(PAGES)
pipenv run python $(MAKE_RSS) $(PAGES) > $@
-html: $(HTML_TARGETS) $(HTML_RSS)
- echo $(HTML_TARGETS)
+$(HTML_INDEX): $(HTML_TARGETS)
+ pipenv run python $(MAKE_HTML_INDEX) $(HTML_TARGETS) > $@
+
+$(HTML_DIR)/%.png: $(SRC_DIR)/%.png
+ mkdir -p $(shell dirname $@)
+ cp $< $@
+
+$(HTML_DIR)/%.jpg: $(SRC_DIR)/%.jpg
+ mkdir -p $(shell dirname $@)
+ cp $< $@
+
+html: $(HTML_TARGETS) $(HTML_RSS) $(HTML_INDEX) $(IMAGE_TARGETS)
gemini: