Add rss feed
This commit is contained in:
parent
857e0b65ac
commit
46807b2ba6
5 changed files with 119 additions and 9 deletions
18
Makefile
18
Makefile
|
|
@ -17,7 +17,7 @@ style := $(STYLEDIR)/style.css
|
||||||
# Main html template that pandoc uses to generate .html from .md files
|
# Main html template that pandoc uses to generate .html from .md files
|
||||||
template_html := $(PANDOCDIR)/template.html
|
template_html := $(PANDOCDIR)/template.html
|
||||||
template_ansi := $(PANDOCDIR)/template
|
template_ansi := $(PANDOCDIR)/template
|
||||||
|
template_rss := $(PANDOCDIR)/rss-template.xml
|
||||||
# Template for extracting metadata of .md files in json format
|
# Template for extracting metadata of .md files in json format
|
||||||
list_template := $(PANDOCDIR)/meta-json-template.txt
|
list_template := $(PANDOCDIR)/meta-json-template.txt
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ articles_md := $(wildcard $(SRCDIR)/$(ARTICLEDIR)/*.md)
|
||||||
articles_html := $(patsubst $(SRCDIR)/%.md, $(BUILDDIR)/%.html, $(articles_md))
|
articles_html := $(patsubst $(SRCDIR)/%.md, $(BUILDDIR)/%.html, $(articles_md))
|
||||||
articles_ansi := $(patsubst $(SRCDIR)/%.md, $(BUILDDIR)/%, $(articles_md))
|
articles_ansi := $(patsubst $(SRCDIR)/%.md, $(BUILDDIR)/%, $(articles_md))
|
||||||
|
|
||||||
all: $(BUILDDIR)/index.html $(BUILDDIR)/index
|
all: $(BUILDDIR)/index.html $(BUILDDIR)/index $(BUILDDIR)/rssfeed.xml
|
||||||
|
|
||||||
install:
|
install:
|
||||||
cp -r $(BUILDDIR)/index.html $(articles_html) $(STYLEDIR) $(IMAGEDIR) $(INSTALLDIR_HTML); \
|
cp -r $(BUILDDIR)/index.html $(articles_html) $(STYLEDIR) $(IMAGEDIR) $(INSTALLDIR_HTML); \
|
||||||
|
|
@ -48,13 +48,15 @@ $(BUILDDIR):
|
||||||
|
|
||||||
$(BUILDDIR)/$(ARTICLEDIR)/%.html: $(SRCDIR)/$(ARTICLEDIR)/%.md | $(BUILDDIR)
|
$(BUILDDIR)/$(ARTICLEDIR)/%.html: $(SRCDIR)/$(ARTICLEDIR)/%.md | $(BUILDDIR)
|
||||||
jq 'del(.articles[] | select(.filename == "$(patsubst %.html,%,$(notdir $@))"))' $(article_list) > articles.json.tmp; \
|
jq 'del(.articles[] | select(.filename == "$(patsubst %.html,%,$(notdir $@))"))' $(article_list) > articles.json.tmp; \
|
||||||
mv ./articles.json.tmp $(article_list); \
|
mv articles.json.tmp $(article_list); \
|
||||||
# Build articles using pandoc
|
# Build articles using pandoc
|
||||||
pandoc $< --template $(template_html) --css $(style) --highlight-style zenburn --mathml --toc --output $@; \
|
pandoc $< --template $(template_html) --css $(style) --highlight-style zenburn --mathml --toc --output $@; \
|
||||||
# Extract metadata from .md file, append filename field to the article object.
|
# Extract metadata from .md file, append filename field to the article object.
|
||||||
# This is used to link to the article from index.html. Append article object to the article list.
|
# This is used to link to the article from index.html. Append article object to the article list.
|
||||||
jq '.articles += [$(shell pandoc $< --template $(list_template) | jq '. += {"filename": "$(patsubst %.html,%,$(notdir $@))"}')]' $(article_list) > articles.json.tmp; \
|
|
||||||
mv ./articles.json.tmp $(article_list);
|
jq '.articles += [$(shell pandoc $< --template $(list_template) | jq '. += {"filename": "$(patsubst %.html,%,$(notdir $@))", "pubdate": "$(shell date -d $(shell pandoc $< --template $(list_template) | jq '.date') --rfc-2822)"}')]' $(article_list) > articles.json.tmp; \
|
||||||
|
mv articles.json.tmp $(article_list);
|
||||||
|
|
||||||
|
|
||||||
$(BUILDDIR)/$(ARTICLEDIR)/%: $(SRCDIR)/$(ARTICLEDIR)/%.md | $(BUILDDIR)
|
$(BUILDDIR)/$(ARTICLEDIR)/%: $(SRCDIR)/$(ARTICLEDIR)/%.md | $(BUILDDIR)
|
||||||
pandoc $< --template $(template_ansi) --to ansi --output $@
|
pandoc $< --template $(template_ansi) --to ansi --output $@
|
||||||
|
|
@ -62,9 +64,13 @@ $(BUILDDIR)/$(ARTICLEDIR)/%: $(SRCDIR)/$(ARTICLEDIR)/%.md | $(BUILDDIR)
|
||||||
$(BUILDDIR)/index.html: $(SRCDIR)/index.md $(articles_html) | $(BUILDDIR)
|
$(BUILDDIR)/index.html: $(SRCDIR)/index.md $(articles_html) | $(BUILDDIR)
|
||||||
# Sort articles decending by date (date need to be in ISO 8601 format)
|
# Sort articles decending by date (date need to be in ISO 8601 format)
|
||||||
jq '.articles |= sort_by(.date) | .articles |= reverse' ${article_list} > articles.json.tmp; \
|
jq '.articles |= sort_by(.date) | .articles |= reverse' ${article_list} > articles.json.tmp; \
|
||||||
mv ./articles.json.tmp ${article_list}; \
|
mv articles.json.tmp ${article_list}; \
|
||||||
# Build index.html with metadata injected from articles_list
|
# Build index.html with metadata injected from articles_list
|
||||||
pandoc $< --template $(template_html) --include-after-body $(shark_js) --css $(style) --metadata-file $(article_list) --highlight-style zenburn --mathml --toc --output $@;
|
pandoc $< --template $(template_html) --include-after-body $(shark_js) --css $(style) --metadata-file $(article_list) --highlight-style zenburn --mathml --toc --output $@;
|
||||||
|
|
||||||
$(BUILDDIR)/index: $(SRCDIR)/index.md $(articles_ansi) | $(BUILDDIR)
|
$(BUILDDIR)/index: $(SRCDIR)/index.md $(articles_ansi) | $(BUILDDIR)
|
||||||
pandoc $< --template $(template_ansi) --metadata-file $(article_list) --to ansi --output $@
|
pandoc $< --template $(template_ansi) --metadata-file $(article_list) --to ansi --output $@
|
||||||
|
|
||||||
|
$(BUILDDIR)/rssfeed.xml: $(SRCDIR)/rssfeed.md $(articles_html) | $(BUILDDIR)
|
||||||
|
|
||||||
|
pandoc $< --template $(template_rss) --metadata-file $(article_list) --to html --output $@
|
||||||
|
|
|
||||||
41
build/rssfeed.xml
Normal file
41
build/rssfeed.xml
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
<title>nevereverever.de RSS Feed</title>
|
||||||
|
<link>https://nevereverever.de/eh/eh/eh-eh</link>
|
||||||
|
<description>RSS of my published articles</description>
|
||||||
|
<language>en-us</language>
|
||||||
|
<pubDate>Wed, 11 Feb 2026 23:26:41 +0100</pubDate>
|
||||||
|
<docs>https://www.rssboard.org/rss-specification</docs>
|
||||||
|
<generator>pandoc</generator>
|
||||||
|
<managingEditor>Never</managingEditor>
|
||||||
|
<webMaster>Never</webMaster>
|
||||||
|
<atom:link href="https://www.rssboard.org/files/sample-rss-2.xml" rel="self" type="application/rss+xml"/>
|
||||||
|
<item>
|
||||||
|
<title>Using rsync on Android to syncronise my Music library</title>
|
||||||
|
<link>https://nevereverever.de/eh/eh/eh-eh/rsync-android.html</link>
|
||||||
|
<description>As Spotify is getting enshittified by capitalism, keeping a
|
||||||
|
music library is kind of essential. Here I use rsync to syncronise my
|
||||||
|
library with my Android smartphone.</description>
|
||||||
|
<pubDate>Mon, 12 Jan 2026 00:00:00 +0100</pubDate>
|
||||||
|
<guid>rsync-android</guid>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<title>Latex Endeavors</title>
|
||||||
|
<link>https://nevereverever.de/eh/eh/eh-eh/latex-endeavors.html</link>
|
||||||
|
<description>Latex undoubtedly has some quirks. Some of them have a
|
||||||
|
rather unintuitive solution. In this article I cover some quirks and
|
||||||
|
solutions I have encountered.</description>
|
||||||
|
<pubDate>Fri, 09 Jan 2026 00:00:00 +0100</pubDate>
|
||||||
|
<guid>latex-endeavors</guid>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<title>Random linux utilities</title>
|
||||||
|
<link>https://nevereverever.de/eh/eh/eh-eh/random-linux-utils.html</link>
|
||||||
|
<description>Tricks and tools I learned about, while tweaking my Linux
|
||||||
|
sytem or trying to do productive things.</description>
|
||||||
|
<pubDate>Fri, 25 Jul 2025 00:00:00 +0200</pubDate>
|
||||||
|
<guid>random-linux-utils</guid>
|
||||||
|
</item>
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
51
pandoc/rss-template.xml
Normal file
51
pandoc/rss-template.xml
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||||
|
<channel>
|
||||||
|
$if(title)$
|
||||||
|
<title>$title$</title>
|
||||||
|
$endif$
|
||||||
|
$if(link)$
|
||||||
|
<link>$link$</link>
|
||||||
|
$endif$
|
||||||
|
$if(description)$
|
||||||
|
<description>$description$</description>
|
||||||
|
$endif$
|
||||||
|
$if(lang)$
|
||||||
|
<language>$lang$</language>
|
||||||
|
$endif$
|
||||||
|
$if(pubdate)$
|
||||||
|
<pubDate>$pubdate$</pubDate>
|
||||||
|
$endif$
|
||||||
|
$if(builddate)$
|
||||||
|
<lastBuildDate>$builddate$</lastBuildDate>
|
||||||
|
$endif$
|
||||||
|
<docs>https://www.rssboard.org/rss-specification</docs>
|
||||||
|
<generator>pandoc</generator>
|
||||||
|
$if(editor)$
|
||||||
|
<managingEditor>$editor$</managingEditor>
|
||||||
|
$endif$
|
||||||
|
$if(webmaster)$
|
||||||
|
<webMaster>$webmaster$</webMaster>
|
||||||
|
$endif$
|
||||||
|
<atom:link href="https://www.rssboard.org/files/sample-rss-2.xml" rel="self" type="application/rss+xml"/>
|
||||||
|
$for(articles)$
|
||||||
|
<item>
|
||||||
|
$if(articles.title)$
|
||||||
|
<title>$articles.title$</title>
|
||||||
|
$endif$
|
||||||
|
$if(articles.filename)$
|
||||||
|
<link>$link$/$articles.filename$.html</link>
|
||||||
|
$endif$
|
||||||
|
$if(articles.summary)$
|
||||||
|
<description>$articles.summary$</description>
|
||||||
|
$endif$
|
||||||
|
$if(articles.date)$
|
||||||
|
<pubDate>$articles.pubdate$</pubDate>
|
||||||
|
$endif$
|
||||||
|
$if(articles.filename)$
|
||||||
|
<guid>$articles.filename$</guid>
|
||||||
|
$endif$
|
||||||
|
</item>
|
||||||
|
$endfor$
|
||||||
|
</channel>
|
||||||
|
</rss>
|
||||||
|
|
@ -5,7 +5,8 @@
|
||||||
"date": "2026-01-12",
|
"date": "2026-01-12",
|
||||||
"summary": "As Spotify is getting enshittified by capitalism, keeping a music library is kind of essential. Here I use rsync to syncronise my library with my Android smartphone.",
|
"summary": "As Spotify is getting enshittified by capitalism, keeping a music library is kind of essential. Here I use rsync to syncronise my library with my Android smartphone.",
|
||||||
"title": "Using rsync on Android to syncronise my Music library",
|
"title": "Using rsync on Android to syncronise my Music library",
|
||||||
"filename": "rsync-android"
|
"filename": "rsync-android",
|
||||||
|
"pubdate": "Mon, 12 Jan 2026 00:00:00 +0100"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "Never",
|
"author": "Never",
|
||||||
|
|
@ -13,7 +14,8 @@
|
||||||
"subtitle": "Some unintuitive quirks of Latex",
|
"subtitle": "Some unintuitive quirks of Latex",
|
||||||
"summary": "Latex undoubtedly has some quirks. Some of them have a rather unintuitive solution. In this article I cover some quirks and solutions I have encountered.",
|
"summary": "Latex undoubtedly has some quirks. Some of them have a rather unintuitive solution. In this article I cover some quirks and solutions I have encountered.",
|
||||||
"title": "Latex Endeavors",
|
"title": "Latex Endeavors",
|
||||||
"filename": "latex-endeavors"
|
"filename": "latex-endeavors",
|
||||||
|
"pubdate": "Fri, 09 Jan 2026 00:00:00 +0100"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "Never",
|
"author": "Never",
|
||||||
|
|
@ -21,7 +23,8 @@
|
||||||
"subtitle": "Neat things I picked up along the way",
|
"subtitle": "Neat things I picked up along the way",
|
||||||
"summary": "Tricks and tools I learned about, while tweaking my Linux sytem or trying to do productive things.",
|
"summary": "Tricks and tools I learned about, while tweaking my Linux sytem or trying to do productive things.",
|
||||||
"title": "Random linux utilities",
|
"title": "Random linux utilities",
|
||||||
"filename": "random-linux-utils"
|
"filename": "random-linux-utils",
|
||||||
|
"pubdate": "Fri, 25 Jul 2025 00:00:00 +0200"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
9
src/rssfeed.md
Normal file
9
src/rssfeed.md
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
title: nevereverever.de RSS Feed
|
||||||
|
link: https://nevereverever.de/eh/eh/eh-eh
|
||||||
|
description: RSS of my published articles
|
||||||
|
lang: en-us
|
||||||
|
pubdate: Wed, 11 Feb 2026 23:26:41 +0100
|
||||||
|
editor: Never
|
||||||
|
webmaster: Never
|
||||||
|
---
|
||||||
Loading…
Add table
Add a link
Reference in a new issue