Commit Diff


commit - 0ae518ce1867e6369d05fb920faf803eafd21c09
commit + 441c3bcdcc1b984c1f0edfb3c74a441573dd3d88
blob - 49ce9f72c03daca1f4bd3b129c88b555f1b056d3
blob + b3778b2f511415da3fb9fddb13b68469eb754eef
--- src/blog/core.clj
+++ src/blog/core.clj
@@ -125,11 +125,14 @@
         (viewfn tag posts)))
 
 (defn render-rss []
-  (spit (str "resources/out/gemini/rss.xml")
-        (rss/feed #(str "gemini://gemini.omarpolo.com/post/" % ".gmi")
-                  (->> @posts
-                       (filter gemini-post)
-                       (map #(dissoc % :body)))))
+  (let [gemposts (->> @posts
+                      (filter gemini-post)
+                      (map #(dissoc % :body)))]
+    (spit (str "resources/out/gemini/rss.xml")
+          (rss/feed #(str "gemini://gemini.omarpolo.com/post/" % ".gmi")
+                    gemposts))
+    (spit (str "resources/out/gemini/rss.gmi")
+          (gemini/feed-page gemposts)))
   (spit (str "resources/out/http/rss.xml")
         (rss/feed #(str "https://www.omarpolo.com/post/" % ".html") @posts)))
 
blob - 30d1f39a9e4e027b5ab082b07246e8129cff4171
blob + e5628966368b1b9755ef2c6480b4a06e90c167b7
--- src/blog/gemini.clj
+++ src/blog/gemini.clj
@@ -3,6 +3,17 @@
    [blog.time :as time]
    [blog.gemtext :as gemtext]))
 
+(defn feed-page [posts]
+  (gemtext/unparse
+   (list
+    [:h1 "yumh"]
+    [:blockquote "Writing about things, sometimes"]
+    [:paragraph ""]
+    (for [post posts]
+      (let [{:keys [title date slug]} post
+            url (str "gemini://gemini.omarpolo.com/post/" slug ".gmi")]
+        [:link url (str (time/fmt-iso8601 date) " " title)])))))
+
 (defn with-page [_ & body]
   (gemtext/unparse
    (list
blob - d1841ca09e58e2a83defde3f7c565fde34671af4
blob + 428495b3be602bd744157d2438495a5cf5635bf7
--- src/blog/time.clj
+++ src/blog/time.clj
@@ -22,6 +22,13 @@
     (str (.format d pattern)
          " 00:00:00 GMT")))
 
+(defn fmt-iso8601 [d]
+  ;; quoted to indicate UTC, not TZ offset. Also, HH:mm is 00:00
+  ;; because i'm parsing the raw date as LocalDate and not datetime,
+  ;; so there isn't the info about the hour and the minute.
+  (let [pattern (DateTimeFormatter/ofPattern "yyyy-MM-dd'T'00:00'Z'")]
+    (.format d pattern)))
+
 (defn parse [s]
   (LocalDate/parse s pattern))