summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Dockerfile17
-rw-r--r--feed.scm9
-rwxr-xr-xmonitor-fswatch.sh13
-rwxr-xr-xmonitor-inotifywait.sh13
-rw-r--r--requirements.list5
-rwxr-xr-xvendor/bin/pandoc-rss7
6 files changed, 60 insertions, 4 deletions
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..0fa0d69
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,17 @@
+FROM alpine:latest
+
+WORKDIR /app
+
+# Install deps
+RUN apk add --no-cache chicken inotify-tools bash pandoc coreutils
+COPY requirements.list ./requirements.list
+RUN chicken-install -from-list requirements.list
+
+# Build app
+COPY vendor ./vendor
+COPY *.sh ./
+COPY static ./static
+COPY template.html ./template.html
+COPY *.scm ./
+
+CMD ["/bin/bash", "monitor-inotifywait.sh"]
diff --git a/feed.scm b/feed.scm
index 57a0afb..1badb35 100644
--- a/feed.scm
+++ b/feed.scm
@@ -14,13 +14,16 @@
(define (generate-feed src-dir archive-dir out-dir)
(define paths (glob (format "~A/*" archive-dir)))
+ (define archive-format (pipe archive-dir
+ (@ replace (format "^~A\\/?" src-dir) "")
+ (@ format "~A/%s")))
(define output-port
(process "vendor/bin/pandoc-rss"
(apply list "-s"
"-t" "jan's garden"
"-d" "RSS feed for Jan's personal digital garden"
"-l" "https://jan.systems"
- "-f" "%s"
+ "-f" archive-format
"-n" "en-GB"
"-c" "CC BY-SA 4.0"
"-w" "https://jan.systems"
@@ -71,9 +74,10 @@
(define (compare a b)
(string>? (assocdr 'date (cdr a)) (assocdr 'date (cdr b))))
- (list-sort! compare index-alist)
+ (define index-alist (list-sort! compare index-alist))
(define (to-li pair)
+ (printf "[info] indexing page ~A~%" pair)
(define path (car pair))
(define title (assocdr 'title (cdr pair)))
(define date (assocdr 'date (cdr pair)))
@@ -86,6 +90,7 @@
(define index-lis (map to-li index-alist))
(define out-md (string-append "---\n"
"title: Archive\n"
+ "hide-body-title: defined\n"
"---\n"
"# Archive\n\n"
(string-join index-lis "\n")))
diff --git a/monitor-fswatch.sh b/monitor-fswatch.sh
new file mode 100755
index 0000000..c989d69
--- /dev/null
+++ b/monitor-fswatch.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+dir="${SRC_DIR:-pages}"
+
+set -euxo pipefail
+
+csi -s main.scm
+
+while true; do
+ fswatch -r -L -1 "${dir}"
+ sleep 1
+ csi -s main.scm
+done
diff --git a/monitor-inotifywait.sh b/monitor-inotifywait.sh
new file mode 100755
index 0000000..03fefae
--- /dev/null
+++ b/monitor-inotifywait.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+dir="${SRC_DIR:-pages}"
+
+set -euxo pipefail
+
+csi -s main.scm
+
+while true; do
+ inotifywait -r -q "${dir}"
+ sleep 1
+ csi -s main.scm
+done
diff --git a/requirements.list b/requirements.list
new file mode 100644
index 0000000..6102a50
--- /dev/null
+++ b/requirements.list
@@ -0,0 +1,5 @@
+(srfi-1 "0.5.1")
+(srfi-13 "0.3.4")
+(srfi-18 "0.1.7")
+(srfi-132 "1.0.0")
+(matchable "1.1")
diff --git a/vendor/bin/pandoc-rss b/vendor/bin/pandoc-rss
index f1a1d7d..dad8232 100755
--- a/vendor/bin/pandoc-rss
+++ b/vendor/bin/pandoc-rss
@@ -100,11 +100,14 @@ get_date ()
shift
if date=$(get_metadata_value date "$input_file")
then
- if [ -f /opt/homebrew/bin/gdate ]; then
+ if [ -f /opt/homebrew/bin/gdate ]; then
date_cmd=/opt/homebrew/bin/gdate
- else
+ elif [ -f /usr/bin/date ]; then
date_cmd=/usr/bin/date
+ else
+ date_cmd=/bin/date
fi
+
$date_cmd --utc --date "$date" +'%a, %d %b %Y %T +0000'
fi
}