diff --git a/build/rss.py b/build/rss.py
new file mode 100644
index 0000000..4922fe5
--- /dev/null
+++ b/build/rss.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python3
+
+import markdown
+import pathlib
+import sys
+import re
+
+def print_usage():
+ print("\nusage: python mkblogrss.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:]
+
+# header and footer to enclose feed items
+header = """
+
+
+ ktyl.dev
+ https://ktyl.dev/blog/index.html
+ mostly computer stuff!
+
+ """
+footer = ""
+
+# regex patterns
+title_pattern = re.compile("
(.+)
")
+path_pattern = re.compile("(.+)\/(\d{4})\/(\d{1,2})\/(\d{1,2})\/(.+).md")
+
+def make_item(path):
+ str = "- \n"
+
+ # get the HTML version of the file
+ text = ""
+ with open(path) as f:
+ text = f.read()
+ html = markdown.markdown(text, extensions=["fenced_code"])
+
+ # title
+ title = ""
+ m = title_pattern.match(html)
+ title = m.group(1)
+ str += f"{title}\n"
+
+ # link
+ url = "/".join(pathlib.Path(path).parts[2:])
+ url = url.replace(".md", ".html")
+ link = f"https://ktyl.dev/blog/{url}"
+ str += f"{link}\n"
+
+ # content
+ description = html
+ description = re.sub('<', '<', description)
+ description = re.sub('>', '>', description)
+ str += f"{description}\n"
+
+ # pub date
+ date = re.sub(path_pattern, r'\2-\3-\4', path)
+ str += f"{date}\n"
+
+ str += "
"
+
+ return str
+
+# print everything!
+print(header)
+for p in posts:
+ print(make_item(p))
+print(footer)
+
diff --git a/makefile b/makefile
index 72489e2..9abe944 100644
--- a/makefile
+++ b/makefile
@@ -5,10 +5,12 @@ GEMINI_DIR = $(OUT_DIR)gemini
MAKE_GEMINI = build/markdown2gemini.py
MAKE_HTML = build/markdown2html.py
+MAKE_RSS = build/rss.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
GEMINI_TARGETS = $(PAGES:$(SRC_DIR)/%.md=$(GEMINI_DIR)/%.gmi)
_dummy := $(shell mkdir -p $(HTML_DIR) $(GEMINI_DIR))
@@ -16,7 +18,10 @@ _dummy := $(shell mkdir -p $(HTML_DIR) $(GEMINI_DIR))
$(HTML_DIR)/%.html: $(SRC_DIR)/%.md
python $(MAKE_HTML) $< $@
-html: $(HTML_TARGETS)
+$(HTML_RSS): $(PAGES)
+ pipenv run python $(MAKE_RSS) $(PAGES) > $@
+
+html: $(HTML_TARGETS) $(HTML_RSS)
echo $(HTML_TARGETS)
gemini: