diff options
| -rw-r--r-- | Dockerfile | 17 | ||||
| -rw-r--r-- | feed.scm | 9 | ||||
| -rwxr-xr-x | monitor-fswatch.sh | 13 | ||||
| -rwxr-xr-x | monitor-inotifywait.sh | 13 | ||||
| -rw-r--r-- | requirements.list | 5 | ||||
| -rwxr-xr-x | vendor/bin/pandoc-rss | 7 |
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"] @@ -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 } |
