summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--.gitignore7
-rw-r--r--Makefile77
-rw-r--r--deps.mk42
-rw-r--r--meta.capim11
-rw-r--r--meta.json5
-rwxr-xr-xmkdeps.sh54
-rw-r--r--po/de.po47
-rw-r--r--po/en.po47
-rw-r--r--po/eo.po47
-rw-r--r--po/es.po47
-rw-r--r--po/euandre.org.pot47
-rw-r--r--po/fr.po47
-rw-r--r--po/po4a.cfg4
-rw-r--r--po/pt.po49
l---------src/content/b1
-rw-r--r--src/content/en/blog/categories.adoc1
l---------src/content/en/blog/categories.name1
-rw-r--r--src/content/en/pastebin/categories.adoc1
l---------src/content/en/pastebin/categories.name1
-rw-r--r--src/content/en/podcast/2020/12/19/test-entry.flac.torrentbin544 -> 0 bytes
-rw-r--r--src/content/en/podcast/2020/12/19/test-entry.ogg.torrent1
-rw-r--r--src/content/en/podcast/categories.adoc1
l---------src/content/en/podcast/categories.name1
-rw-r--r--src/content/en/screencast/2021/02/07/autoqemu.webm.torrentbin7646 -> 0 bytes
-rw-r--r--src/content/en/screencast/categories.adoc1
l---------src/content/en/screencast/categories.name1
-rw-r--r--src/content/en/til/categories.adoc1
l---------src/content/en/til/categories.name1
-rw-r--r--src/content/favicon.pngbin180 -> 103 bytes
l---------src/content/git1
l---------src/content/live1
-rw-r--r--src/content/pt/hea/categorias.adoc1
l---------src/content/pt/hea/categories.name1
-rw-r--r--src/content/public.asc.txt107
-rw-r--r--src/headers.txt6
-rw-r--r--src/headers/de.txt13
-rw-r--r--src/headers/en.txt13
-rw-r--r--src/headers/eo.txt13
-rw-r--r--src/headers/es.txt13
-rw-r--r--src/headers/fr.txt13
-rw-r--r--src/headers/pt.txt13
-rw-r--r--src/headers/ref.txt13
-rw-r--r--src/linkonly-dirs.txt5
-rw-r--r--src/names/categories/de.txt1
-rw-r--r--src/names/categories/en.txt1
-rw-r--r--src/names/categories/eo.txt1
-rw-r--r--src/names/categories/es.txt1
-rw-r--r--src/names/categories/fr.txt1
-rw-r--r--src/names/categories/pt.txt1
-rw-r--r--src/names/categories/ref.txt1
-rw-r--r--src/names/category/de.txt1
-rw-r--r--src/names/category/en.txt1
-rw-r--r--src/names/category/eo.txt1
-rw-r--r--src/names/category/es.txt1
-rw-r--r--src/names/category/fr.txt1
-rw-r--r--src/names/category/pt.txt1
-rw-r--r--src/names/category/ref.txt1
-rw-r--r--src/static.conf5
58 files changed, 610 insertions, 165 deletions
diff --git a/.gitignore b/.gitignore
index ec674e8..874fc80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-*.sentinel
*.htmlbody
*.embedded-config
*.conf
@@ -18,9 +17,7 @@
*.htmllisting
*.ps
*.pdf
-index.htmlheader
-index.htmlfooter
-index.htmllisting
*.gz
+*.sentinel
+*.torrent
/src/content/.gitignore
-/po/*.mo
diff --git a/Makefile b/Makefile
index 823d3db..a3f44e4 100644
--- a/Makefile
+++ b/Makefile
@@ -28,7 +28,7 @@ BASEURL = /
.SUFFIXES:
.SUFFIXES: .adoc .conf .snippets .indexentry .feedentry .mapentry .sortdata .xml
.SUFFIXES: .htmlbody .htmlheader .htmlfooter .htmllisting .html .links .caslinks
-.SUFFIXES: .txt .categorydata .gz .torrent .flac .ogg .ps .pdf
+.SUFFIXES: .txt .categorydata .gz .torrent .flac .ogg .ps .pdf .sentinel
.adoc.conf:
mkwb conf src/global.conf $< > $@
@@ -125,6 +125,7 @@ dynamic-contents = \
$(sources.html) \
$(slides.pdf) \
$(feeds.xml) \
+ $(sources.media.torrent) \
src/content/sitemap.xml \
static-contents = \
@@ -163,6 +164,13 @@ all-contents = \
$(contents) \
$(contents.gz) \
+captured-assets = \
+ src/content/$(PUBURL) \
+ src/content/favicon.ico \
+ src/content/favicon.png \
+
+captured-assets.sentinel = $(captured-assets:=.sentinel)
+
derived-assets = \
$(dynamic-contents) \
@@ -209,13 +217,7 @@ derived-assets = \
install.txt \
sources.txt \
src/content/.gitignore \
- i18n.sentinel \
-
-captured-assets = \
- src/content/$(PUBURL) \
- src/content/favicon.ico \
- src/content/favicon.png \
- $(sources.media.torrent) \
+ $(captured-assets.sentinel) \
side-assets = \
src/collections/*/*/*/*/*/*.html.*.txt \
@@ -228,11 +230,7 @@ side-assets = \
src/pages/*/*.html.*.txt \
src/content/.well-known/ \
`cat src/all-symlinks.txt 2>/dev/null` \
- src/content/css/ \
- src/content/favicon/ \
- src/content/images/ \
- src/content/resources/ \
- src/content/static/ \
+ `cat src/linkonly-dirs.txt 2>/dev/null` \
@@ -243,7 +241,7 @@ all: $(captured-assets)
$(derived-assets): Makefile deps.mk
-$(sources.conf): src/global.conf src/headers.txt
+$(sources.conf): src/global.conf
src/content/.gitignore: src/symlinks.txt
@@ -271,8 +269,8 @@ $(indexes.htmllisting):
$(categories.htmllisting):
mkwb categoriesbody $*.conf > $@
-$(categories.txt):
- mkwb categories $(@D) > $@
+$(categories.txt): src/global.conf
+ mkwb categories src/global.conf $(@D) > $@
$(categories.xml):
for f in `cat $*.txt`; do \
@@ -292,16 +290,19 @@ $(sources.snippets.gz) $(categories.xml.gz):
if [ -s $* ]; then gzip -9fk `cat $*`; fi
sed 's/$$/.gz/' $* > $@
-src/content/$(PUBURL).gz: src/content/$(PUBURL)
-src/content/$(PUBURL):
- gpg --export --armour "`jq -r '.email' < meta.json`" > $@
+src/content/$(PUBURL).gz: src/content/$(PUBURL).sentinel
+src/content/$(PUBURL).sentinel: email.txt
+ gpg --export --armour "`cat email.txt`" | ifne ifnew $*
+ touch $@
-src/content/favicon.ico.gz: src/content/favicon.ico
-src/content/favicon.ico: src/content/img/favicon.svg
- convert src/content/img/favicon.svg $@
+src/content/favicon.ico.gz: src/content/favicon.ico.sentinel
+src/content/favicon.ico.sentinel: src/content/img/favicon.svg
+ convert src/content/img/favicon.svg -strip ico:- | ifnew $*
+ touch $@
-src/content/favicon.png: src/content/img/favicon.svg
- convert src/content/img/favicon.svg $@
+src/content/favicon.png.sentinel: src/content/img/favicon.svg
+ convert src/content/img/favicon.svg -strip png:- | ifnew $*
+ touch $@
$(sources.media.torrent):
F="`printf '%s\n' $* | cut -d/ -f3-`" && \
@@ -311,11 +312,11 @@ src/content/sitemap.xml.gz: src/content/sitemap.xml
src/content/sitemap.xml: $(sources.mapentry)
mkwb sitemap $(sources.mapentry) > $@
-email.txt: meta.json
- jq -r '.email' < meta.json > $@
+email.txt: meta.capim
+ cat meta.capim | awk '$$1 == ":email" && $$0=$$2' | tr -d '"' > $@
-baseurl.txt: meta.json
- jq -r '.baseurl' < meta.json > $@
+baseurl.txt: meta.capim
+ cat meta.capim | awk '$$1 == ":baseurl" && $$0=$$2' | tr -d '"' > $@
fingerprint.txt: src/content/$(PUBURL)
gpg --always-trust --no-keyring --show-key --with-colons \
@@ -362,10 +363,6 @@ install.txt: src/install.txt
sources.txt install.txt:
sed 's|^src/content/||' src/$(@F) > $@
-i18n.sentinel: po/po4a.cfg po/note.txt $(sources.po) $(po4a.in)
- po4a po/po4a.cfg
- touch $@
-
src/sort-expected.txt:
@@ -393,7 +390,7 @@ check-unit-updatedat: $(sources.updatedat-check)
.SUFFIXES: .links-internal-check
sources.links-internal-check = $(sources.adoc:.adoc=.links-internal-check)
-$(sources.links-internal-check): $(sources.html)
+$(sources.links-internal-check): $(sources.html) $(slides.pdf)
grep -E '^(link|image):' $*.links | cut -d: -f2- | \
xargs -I% test -e $(*D)/%
@@ -408,13 +405,14 @@ symlink-deps = \
$(feeds.xml) \
$(categories.xml) \
src/content/.well-known/security.txt \
+ $(sources.media.torrent) \
-check-unit-symlinks: src/all-symlinks.txt $(symlink-deps)
+check-unit-links-symlinks: src/all-symlinks.txt $(symlink-deps)
find `cat src/all-symlinks.txt` | xargs -n1 test -e
check-unit-links: check-unit-links-internal check-unit-links-external
-check-unit-links: check-unit-symlinks
+check-unit-links: check-unit-links-symlinks
MAXSIZE = 52428800 # from spec: https://www.sitemaps.org/protocol.html
@@ -451,6 +449,11 @@ check: check-unit check-integration
+i18n:
+ po4a po/po4a.cfg
+
+
+
## Remove *all* derived artifacts produced during the build.
## A dedicated test asserts that this is always true.
clean:
@@ -460,9 +463,9 @@ clean:
## Installs into $(DESTDIR)$(PREFIX). Its dependency target
## ensures that all installable artifacts are crafted beforehand.
install: all
- rsync --mkpath -a --files-from=install.txt src/content/ \
+ rsync --delete --mkpath -a --files-from=install.txt src/content/ \
'$(DESTDIR)$(HTMLDIR)'
- rsync --mkpath -a --files-from=sources.txt src/content/ \
+ rsync --delete --mkpath -a --files-from=sources.txt src/content/ \
'$(DESTDIR)$(SRCDIR)'
## Uninstalls from $(DESTDIR)$(PREFIX). This is a perfect mirror
diff --git a/deps.mk b/deps.mk
index 5434e46..43a93e9 100644
--- a/deps.mk
+++ b/deps.mk
@@ -143,12 +143,6 @@ sources.po = \
po/fr.po \
po/pt.po \
-po4a.in = \
- src/content/en/about.adoc \
- src/content/en/til/2020/08/12/filename-timestamp.adoc \
- src/content/en/til/categories.adoc \
- src/content/en/til/index.adoc \
-
src/content/en/about.html.gz: src/content/en/about.html
src/content/en/index.html.gz: src/content/en/index.html
src/content/pt/sobre.html.gz: src/content/pt/sobre.html
@@ -311,18 +305,15 @@ src/content/en/til/categories.snippets.gz: src/content/en/til/categories.snippet
src/content/pt/hea/categorias.snippets.gz: src/content/pt/hea/categorias.snippets
src/content/en/slide/2020/10/19/feature-flags.pdf.gz: src/content/en/slide/2020/10/19/feature-flags.pdf
src/content/en/slide/2020/11/14/local-first-hype.pdf.gz: src/content/en/slide/2020/11/14/local-first-hype.pdf
-src/content/en/blog/categories.xml.gz: src/content/en/blog/categories.xml
-src/content/en/pastebin/categories.xml.gz: src/content/en/pastebin/categories.xml
-src/content/en/podcast/categories.xml.gz: src/content/en/podcast/categories.xml
-src/content/en/screencast/categories.xml.gz: src/content/en/screencast/categories.xml
-src/content/en/til/categories.xml.gz: src/content/en/til/categories.xml
-src/content/pt/hea/categories.xml.gz: src/content/pt/hea/categories.xml
src/content/en/blog/feed.xml.gz: src/content/en/blog/feed.xml
src/content/en/pastebin/feed.xml.gz: src/content/en/pastebin/feed.xml
src/content/en/podcast/feed.xml.gz: src/content/en/podcast/feed.xml
src/content/en/screencast/feed.xml.gz: src/content/en/screencast/feed.xml
src/content/en/til/feed.xml.gz: src/content/en/til/feed.xml
src/content/pt/hea/feed.xml.gz: src/content/pt/hea/feed.xml
+src/content/en/podcast/2020/12/19/test-entry.flac.torrent.gz: src/content/en/podcast/2020/12/19/test-entry.flac.torrent
+src/content/en/podcast/2020/12/19/test-entry.ogg.torrent.gz: src/content/en/podcast/2020/12/19/test-entry.ogg.torrent
+src/content/en/screencast/2021/02/07/autoqemu.webm.torrent.gz: src/content/en/screencast/2021/02/07/autoqemu.webm.torrent
src/content/en/about.htmlbody src/content/en/about.snippets src/content/en/about.conf: src/content/en/about.adoc
src/content/en/index.htmlbody src/content/en/index.snippets src/content/en/index.conf: src/content/en/index.adoc
@@ -975,6 +966,11 @@ src/content/en/podcast/2020/12/19/test-entry.flac.torrent: src/content/en/podcas
src/content/en/podcast/2020/12/19/test-entry.ogg.torrent: src/content/en/podcast/2020/12/19/test-entry.ogg
src/content/en/screencast/2021/02/07/autoqemu.webm.torrent: src/content/en/screencast/2021/02/07/autoqemu.webm
+src/content/en/slide/2020/10/19/feature-flags.ps: src/content/en/slide/2020/10/19/feature-flags.adoc
+src/content/en/slide/2020/11/14/local-first-hype.ps: src/content/en/slide/2020/11/14/local-first-hype.adoc
+src/content/en/slide/2020/10/19/feature-flags.pdf: src/content/en/slide/2020/10/19/feature-flags.ps
+src/content/en/slide/2020/11/14/local-first-hype.pdf: src/content/en/slide/2020/11/14/local-first-hype.ps
+
articles.en.blog.adoc = \
@@ -1015,6 +1011,7 @@ src/content/en/blog/index.htmllisting src/content/en/blog/categories.htmllisting
src/content/en/blog/categories.txt: $(articles.en.blog.categorydata)
src/content/en/blog/categories.txt src/content/en/blog/feed.xml: $(articles.en.blog.feedentry)
src/content/en/blog/categories.htmllisting src/content/en/blog/categories.xml: src/content/en/blog/categories.txt
+src/content/en/blog/categories.xml.gz: src/content/en/blog/categories.xml
articles.en.pastebin.adoc = \
@@ -1060,6 +1057,7 @@ src/content/en/pastebin/index.htmllisting src/content/en/pastebin/categories.htm
src/content/en/pastebin/categories.txt: $(articles.en.pastebin.categorydata)
src/content/en/pastebin/categories.txt src/content/en/pastebin/feed.xml: $(articles.en.pastebin.feedentry)
src/content/en/pastebin/categories.htmllisting src/content/en/pastebin/categories.xml: src/content/en/pastebin/categories.txt
+src/content/en/pastebin/categories.xml.gz: src/content/en/pastebin/categories.xml
articles.en.podcast.adoc = \
@@ -1084,6 +1082,7 @@ src/content/en/podcast/index.htmllisting src/content/en/podcast/categories.htmll
src/content/en/podcast/categories.txt: $(articles.en.podcast.categorydata)
src/content/en/podcast/categories.txt src/content/en/podcast/feed.xml: $(articles.en.podcast.feedentry)
src/content/en/podcast/categories.htmllisting src/content/en/podcast/categories.xml: src/content/en/podcast/categories.txt
+src/content/en/podcast/categories.xml.gz: src/content/en/podcast/categories.xml
articles.en.screencast.adoc = \
@@ -1108,6 +1107,7 @@ src/content/en/screencast/index.htmllisting src/content/en/screencast/categories
src/content/en/screencast/categories.txt: $(articles.en.screencast.categorydata)
src/content/en/screencast/categories.txt src/content/en/screencast/feed.xml: $(articles.en.screencast.feedentry)
src/content/en/screencast/categories.htmllisting src/content/en/screencast/categories.xml: src/content/en/screencast/categories.txt
+src/content/en/screencast/categories.xml.gz: src/content/en/screencast/categories.xml
articles.en.til.adoc = \
@@ -1154,6 +1154,7 @@ src/content/en/til/index.htmllisting src/content/en/til/categories.htmllisting:
src/content/en/til/categories.txt: $(articles.en.til.categorydata)
src/content/en/til/categories.txt src/content/en/til/feed.xml: $(articles.en.til.feedentry)
src/content/en/til/categories.htmllisting src/content/en/til/categories.xml: src/content/en/til/categories.txt
+src/content/en/til/categories.xml.gz: src/content/en/til/categories.xml
articles.pt.hea.adoc = \
@@ -1170,11 +1171,12 @@ src/content/pt/hea/feed.xml: src/content/pt/hea/sortdata.txt
src/content/pt/hea/feed.xml: $(articles.pt.hea.sortdata)
src/content/pt/hea/index.htmllisting: src/content/pt/hea/sortdata.txt
src/content/pt/hea/index.htmllisting: $(articles.pt.hea.sortdata)
-src/content/pt/hea/categories.htmllisting: src/content/pt/hea/sortdata.txt
-src/content/pt/hea/categories.htmllisting: $(articles.pt.hea.sortdata)
-src/content/pt/hea/categories.txt: src/content/pt/hea/sortdata.txt
-src/content/pt/hea/categories.txt: $(articles.pt.hea.sortdata)
-src/content/pt/hea/index.htmllisting src/content/pt/hea/categories.htmllisting: $(articles.pt.hea.indexentry)
-src/content/pt/hea/categories.txt: $(articles.pt.hea.categorydata)
-src/content/pt/hea/categories.txt src/content/pt/hea/feed.xml: $(articles.pt.hea.feedentry)
-src/content/pt/hea/categories.htmllisting src/content/pt/hea/categories.xml: src/content/pt/hea/categories.txt
+src/content/pt/hea/categorias.htmllisting: src/content/pt/hea/sortdata.txt
+src/content/pt/hea/categorias.htmllisting: $(articles.pt.hea.sortdata)
+src/content/pt/hea/categorias.txt: src/content/pt/hea/sortdata.txt
+src/content/pt/hea/categorias.txt: $(articles.pt.hea.sortdata)
+src/content/pt/hea/index.htmllisting src/content/pt/hea/categorias.htmllisting: $(articles.pt.hea.indexentry)
+src/content/pt/hea/categorias.txt: $(articles.pt.hea.categorydata)
+src/content/pt/hea/categorias.txt src/content/pt/hea/feed.xml: $(articles.pt.hea.feedentry)
+src/content/pt/hea/categorias.htmllisting src/content/pt/hea/categorias.xml: src/content/pt/hea/categorias.txt
+src/content/pt/hea/categorias.xml.gz: src/content/pt/hea/categorias.xml
diff --git a/meta.capim b/meta.capim
new file mode 100644
index 0000000..a64fa37
--- /dev/null
+++ b/meta.capim
@@ -0,0 +1,11 @@
+{
+ :description "Blog and personal website (euandre.org)."
+ :baseurl "https://euandre.org"
+ :email "eu@euandre.org"
+ :dependencies {
+ :build #{
+ eslaides
+ mkwb
+ }
+ }
+}
diff --git a/meta.json b/meta.json
deleted file mode 100644
index b5a8522..0000000
--- a/meta.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "description": "Blog and personal website (euandre.org).",
- "baseurl": "https://euandre.org",
- "email": "eu@euandre.org"
-}
diff --git a/mkdeps.sh b/mkdeps.sh
index 3c7b6cb..9df3e5a 100755
--- a/mkdeps.sh
+++ b/mkdeps.sh
@@ -9,23 +9,23 @@ normalize() {
}
pages() {
- find src/pages/*/*.adoc -type f | normalize
+ find src/pages/*/*.adoc -type f | normalize
}
articles() {
- find src/collections/*/*/*/ -type f -name '*.adoc' | normalize
+ find src/collections/*/*/*/ -type f -name '*.adoc' | normalize
}
slides() {
- find src/slides/*/*/ -type f -name '*.adoc' | normalize
+ find src/slides/*/*/ -type f -name '*.adoc' | normalize
}
indexes() {
- find src/collections/*/*/index.adoc | normalize
+ find src/collections/*/*/index.adoc | normalize
}
categories() {
- find src/collections/*/*/categories.name | normalize
+ grep -l '^:type: categories$' src/collections/*/*/*.adoc | normalize
}
media() {
@@ -59,11 +59,11 @@ files() {
}
-pages | varlist 'pages.adoc'
-articles | varlist 'articles.adoc'
-slides | varlist 'slides.adoc'
+pages | varlist 'pages.adoc'
+articles | varlist 'articles.adoc'
+slides | varlist 'slides.adoc'
categories | varlist 'categories.adoc'
-indexes | varlist 'indexes.adoc'
+indexes | varlist 'indexes.adoc'
indexes | sed 's|/index\.adoc$|/feed.xml|' | varlist 'feeds.xml'
find src/content/img/ -name '*.svg' | varlist 'images.svg'
media | varlist 'sources.media'
@@ -72,17 +72,12 @@ extras | varlist 'sources.extras'
find po/*.po po/*.pot | varlist 'sources.po'
-cat po/po4a.cfg |
- awk '$1 == "[type:" && $2 == "asciidoc]" && $4 != "" && $0=$3' |
- varlist 'po4a.in'
-
-
{
files | sed 's/^\(.*\)\.adoc$/\1.html/'
files | sed 's/^\(.*\)\.adoc$/\1.snippets/'
slides | sed 's/^\(.*\)\.adoc$/\1.pdf/'
- indexes | sed 's|^\(.*\)/index\.adoc$|\1/categories.xml|'
indexes | sed 's|^\(.*\)/index\.adoc$|\1/feed.xml|'
+ media | sed 's/^\(.*\)$/\1.torrent/'
} | sed 's/^\(.*\)$/\1.gz:\t\1/'
printf '\n'
@@ -106,11 +101,12 @@ listings | sed 's/^\(.*\)\.adoc$/\1.html:\t\1.htmlheader\t\1.htmlfooter/'
listings | sed 's/^\(.*\)\.adoc$/\1.html:\t\1.htmllisting\t\1.htmlbody/'
printf '\n'
-media | sed 's/\(.*\)$/\1.torrent:\t\1/'
+media | sed 's/^\(.*\)$/\1.torrent:\t\1/'
printf '\n'
slides | sed 's/^\(.*\)\.adoc$/\1.ps:\t\1.adoc/'
slides | sed 's/^\(.*\)\.adoc$/\1.pdf:\t\1.ps/'
+printf '\n'
@@ -119,6 +115,7 @@ collectionentries() {
colllink="$2"
lang="$(basename "$langlink")"
c="$(printf '%s' "$colllink" | normalize)"
+ plural="$(cat src/names/categories/"$lang".txt)"
printf '\n\n'
name="$(basename "$c")"
@@ -129,35 +126,36 @@ collectionentries() {
echo "$art.$name.feedentry = \$($art.$name.adoc:.adoc=.feedentry)"
echo "$art.$name.categorydata = \$($art.$name.adoc:.adoc=.categorydata)"
-
printf '%s/sortdata.txt:\tdeps.mk\n' "$c"
printf '\tprintf %s $(%s.%s.sortdata) > $@\n\n' "'%s\n'" "$art" "$name"
- listings='
+ listings="
feed.xml
index.htmllisting
- categories.htmllisting
- categories.txt
- '
+ $plural.htmllisting
+ $plural.txt
+ "
for lst in $listings; do
- printf '%s/%s:\t%s/sortdata.txt\n' "$c" "$lst" "$c"
+ printf '%s/%s:\t%s/sortdata.txt\n' "$c" "$lst" "$c"
printf '%s/%s:\t$(%s.%s.sortdata)\n' "$c" "$lst" "$art" "$name"
done
printf '%s/index.htmllisting\t' "$c"
- printf '%s/categories.htmllisting:\t' "$c"
+ printf '%s/%s.htmllisting:\t' "$c" "$plural"
printf '$(%s.%s.indexentry)\n' "$art" "$name"
- printf '%s/categories.txt:\t' "$c"
+ printf '%s/%s.txt:\t' "$c" "$plural"
printf '$(%s.%s.categorydata)\n' "$art" "$name"
- printf '%s/categories.txt\t' "$c"
+ printf '%s/%s.txt\t' "$c" "$plural"
printf '%s/feed.xml:\t' "$c"
printf '$(%s.%s.feedentry)\n' "$art" "$name"
- printf '%s/categories.htmllisting\t' "$c"
- printf '%s/categories.xml:\t' "$c"
- printf '%s/categories.txt\n' "$c"
+ printf '%s/%s.htmllisting\t' "$c" "$plural"
+ printf '%s/%s.xml:\t' "$c" "$plural"
+ printf '%s/%s.txt\n' "$c" "$plural"
+
+ printf '%s/%s.xml.gz:\t%s/%s.xml\n' "$c" "$plural" "$c" "$plural"
}
diff --git a/po/de.po b/po/de.po
index 53a03fa..3524d73 100644
--- a/po/de.po
+++ b/po/de.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2025-04-30 07:24-0300\n"
+"POT-Creation-Date: 2025-05-01 19:02-0300\n"
"PO-Revision-Date: 2025-04-29 19:46-0300\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,6 +16,51 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#. type: Plain text
+#: src/headers/ref.txt:2
+msgid "en/blog/\tBlog"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:4
+msgid "en/til/\tTIL"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:6
+msgid "en/podcast/\tPodcasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:8
+msgid "en/screencast/\tScreencasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:10
+msgid "en/pastebin/\tPastebins"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:12
+msgid "en/slide/\tSlides"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:13
+msgid "en/about.html\tAbout"
+msgstr ""
+
+#. type: Plain text
+#: src/names/categories/ref.txt:1
+msgid "categories"
+msgstr ""
+
+#. type: Plain text
+#: src/names/category/ref.txt:1
+msgid "category"
+msgstr ""
+
#. type: Title =
#: src/content/en/about.adoc:1
#, no-wrap
diff --git a/po/en.po b/po/en.po
index db6ed53..cc244ff 100644
--- a/po/en.po
+++ b/po/en.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2025-04-30 07:24-0300\n"
+"POT-Creation-Date: 2025-05-01 19:02-0300\n"
"PO-Revision-Date: 2025-04-29 19:46-0300\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,6 +16,51 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#. type: Plain text
+#: src/headers/ref.txt:2
+msgid "en/blog/\tBlog"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:4
+msgid "en/til/\tTIL"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:6
+msgid "en/podcast/\tPodcasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:8
+msgid "en/screencast/\tScreencasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:10
+msgid "en/pastebin/\tPastebins"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:12
+msgid "en/slide/\tSlides"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:13
+msgid "en/about.html\tAbout"
+msgstr ""
+
+#. type: Plain text
+#: src/names/categories/ref.txt:1
+msgid "categories"
+msgstr ""
+
+#. type: Plain text
+#: src/names/category/ref.txt:1
+msgid "category"
+msgstr ""
+
#. type: Title =
#: src/content/en/about.adoc:1
#, no-wrap
diff --git a/po/eo.po b/po/eo.po
index 1428267..d0cda59 100644
--- a/po/eo.po
+++ b/po/eo.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2025-04-30 07:24-0300\n"
+"POT-Creation-Date: 2025-05-01 19:02-0300\n"
"PO-Revision-Date: 2025-04-29 19:46-0300\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,6 +16,51 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#. type: Plain text
+#: src/headers/ref.txt:2
+msgid "en/blog/\tBlog"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:4
+msgid "en/til/\tTIL"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:6
+msgid "en/podcast/\tPodcasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:8
+msgid "en/screencast/\tScreencasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:10
+msgid "en/pastebin/\tPastebins"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:12
+msgid "en/slide/\tSlides"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:13
+msgid "en/about.html\tAbout"
+msgstr ""
+
+#. type: Plain text
+#: src/names/categories/ref.txt:1
+msgid "categories"
+msgstr ""
+
+#. type: Plain text
+#: src/names/category/ref.txt:1
+msgid "category"
+msgstr ""
+
#. type: Title =
#: src/content/en/about.adoc:1
#, no-wrap
diff --git a/po/es.po b/po/es.po
index 7cbd471..43e2cbf 100644
--- a/po/es.po
+++ b/po/es.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2025-04-30 07:24-0300\n"
+"POT-Creation-Date: 2025-05-01 19:02-0300\n"
"PO-Revision-Date: 2025-04-29 19:46-0300\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,6 +16,51 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#. type: Plain text
+#: src/headers/ref.txt:2
+msgid "en/blog/\tBlog"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:4
+msgid "en/til/\tTIL"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:6
+msgid "en/podcast/\tPodcasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:8
+msgid "en/screencast/\tScreencasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:10
+msgid "en/pastebin/\tPastebins"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:12
+msgid "en/slide/\tSlides"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:13
+msgid "en/about.html\tAbout"
+msgstr ""
+
+#. type: Plain text
+#: src/names/categories/ref.txt:1
+msgid "categories"
+msgstr ""
+
+#. type: Plain text
+#: src/names/category/ref.txt:1
+msgid "category"
+msgstr ""
+
#. type: Title =
#: src/content/en/about.adoc:1
#, no-wrap
diff --git a/po/euandre.org.pot b/po/euandre.org.pot
index 160d9c3..783e8ab 100644
--- a/po/euandre.org.pot
+++ b/po/euandre.org.pot
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2025-04-30 07:24-0300\n"
+"POT-Creation-Date: 2025-05-01 19:02-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,6 +16,51 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#. type: Plain text
+#: src/headers/ref.txt:2
+msgid "en/blog/\tBlog"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:4
+msgid "en/til/\tTIL"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:6
+msgid "en/podcast/\tPodcasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:8
+msgid "en/screencast/\tScreencasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:10
+msgid "en/pastebin/\tPastebins"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:12
+msgid "en/slide/\tSlides"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:13
+msgid "en/about.html\tAbout"
+msgstr ""
+
+#. type: Plain text
+#: src/names/categories/ref.txt:1
+msgid "categories"
+msgstr ""
+
+#. type: Plain text
+#: src/names/category/ref.txt:1
+msgid "category"
+msgstr ""
+
#. type: Title =
#: src/content/en/about.adoc:1
#, no-wrap
diff --git a/po/fr.po b/po/fr.po
index 9c5a775..7093686 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -6,7 +6,7 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2025-04-30 07:24-0300\n"
+"POT-Creation-Date: 2025-05-01 19:02-0300\n"
"PO-Revision-Date: 2025-04-29 19:46-0300\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,6 +16,51 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+#. type: Plain text
+#: src/headers/ref.txt:2
+msgid "en/blog/\tBlog"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:4
+msgid "en/til/\tTIL"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:6
+msgid "en/podcast/\tPodcasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:8
+msgid "en/screencast/\tScreencasts"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:10
+msgid "en/pastebin/\tPastebins"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:12
+msgid "en/slide/\tSlides"
+msgstr ""
+
+#. type: Plain text
+#: src/headers/ref.txt:13
+msgid "en/about.html\tAbout"
+msgstr ""
+
+#. type: Plain text
+#: src/names/categories/ref.txt:1
+msgid "categories"
+msgstr ""
+
+#. type: Plain text
+#: src/names/category/ref.txt:1
+msgid "category"
+msgstr ""
+
#. type: Title =
#: src/content/en/about.adoc:1
#, no-wrap
diff --git a/po/po4a.cfg b/po/po4a.cfg
index d4efb52..77f48a6 100644
--- a/po/po4a.cfg
+++ b/po/po4a.cfg
@@ -2,6 +2,10 @@
[po_directory] po
+[type: text] src/headers/ref.txt $lang:src/headers/$lang.txt
+[type: text] src/names/categories/ref.txt $lang:src/names/categories/$lang.txt
+[type: text] src/names/category/ref.txt $lang:src/names/category/$lang.txt
+
[type: asciidoc] src/content/en/about.adoc pt:src/content/pt/sobre.adoc add_$lang:po/note.txt
[type: asciidoc] src/content/en/til/index.adoc pt:src/content/pt/hea/index.adoc add_$lang:po/note.txt
[type: asciidoc] src/content/en/til/categories.adoc pt:src/content/pt/hea/categorias.adoc add_$lang:po/note.txt
diff --git a/po/pt.po b/po/pt.po
index 37ef3a1..4794358 100644
--- a/po/pt.po
+++ b/po/pt.po
@@ -6,8 +6,8 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
-"POT-Creation-Date: 2025-04-30 07:24-0300\n"
-"PO-Revision-Date: 2025-04-30 07:25-0300\n"
+"POT-Creation-Date: 2025-05-01 19:02-0300\n"
+"PO-Revision-Date: 2025-05-01 19:08-0300\n"
"Last-Translator: EuAndreh <eu@euandre.org>\n"
"Language-Team: none\n"
"Language: pt\n"
@@ -17,6 +17,51 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.5\n"
+#. type: Plain text
+#: src/headers/ref.txt:2
+msgid "en/blog/\tBlog"
+msgstr "#"
+
+#. type: Plain text
+#: src/headers/ref.txt:4
+msgid "en/til/\tTIL"
+msgstr "pt/hea/\tHEA"
+
+#. type: Plain text
+#: src/headers/ref.txt:6
+msgid "en/podcast/\tPodcasts"
+msgstr "#"
+
+#. type: Plain text
+#: src/headers/ref.txt:8
+msgid "en/screencast/\tScreencasts"
+msgstr "#"
+
+#. type: Plain text
+#: src/headers/ref.txt:10
+msgid "en/pastebin/\tPastebins"
+msgstr "#"
+
+#. type: Plain text
+#: src/headers/ref.txt:12
+msgid "en/slide/\tSlides"
+msgstr "#"
+
+#. type: Plain text
+#: src/headers/ref.txt:13
+msgid "en/about.html\tAbout"
+msgstr "pt/sobre.html\tSobre"
+
+#. type: Plain text
+#: src/names/categories/ref.txt:1
+msgid "categories"
+msgstr "categorias"
+
+#. type: Plain text
+#: src/names/category/ref.txt:1
+msgid "category"
+msgstr "categoria"
+
#. type: Title =
#: src/content/en/about.adoc:1
#, no-wrap
diff --git a/src/content/b b/src/content/b
new file mode 120000
index 0000000..dc1dc0c
--- /dev/null
+++ b/src/content/b
@@ -0,0 +1 @@
+/dev/null \ No newline at end of file
diff --git a/src/content/en/blog/categories.adoc b/src/content/en/blog/categories.adoc
index f29acda..feb64ff 100644
--- a/src/content/en/blog/categories.adoc
+++ b/src/content/en/blog/categories.adoc
@@ -1 +1,2 @@
= Articles by category
+:type: categories
diff --git a/src/content/en/blog/categories.name b/src/content/en/blog/categories.name
deleted file mode 120000
index df691ee..0000000
--- a/src/content/en/blog/categories.name
+++ /dev/null
@@ -1 +0,0 @@
-categories.adoc \ No newline at end of file
diff --git a/src/content/en/pastebin/categories.adoc b/src/content/en/pastebin/categories.adoc
index f29acda..feb64ff 100644
--- a/src/content/en/pastebin/categories.adoc
+++ b/src/content/en/pastebin/categories.adoc
@@ -1 +1,2 @@
= Articles by category
+:type: categories
diff --git a/src/content/en/pastebin/categories.name b/src/content/en/pastebin/categories.name
deleted file mode 120000
index df691ee..0000000
--- a/src/content/en/pastebin/categories.name
+++ /dev/null
@@ -1 +0,0 @@
-categories.adoc \ No newline at end of file
diff --git a/src/content/en/podcast/2020/12/19/test-entry.flac.torrent b/src/content/en/podcast/2020/12/19/test-entry.flac.torrent
deleted file mode 100644
index 519fb2f..0000000
--- a/src/content/en/podcast/2020/12/19/test-entry.flac.torrent
+++ /dev/null
Binary files differ
diff --git a/src/content/en/podcast/2020/12/19/test-entry.ogg.torrent b/src/content/en/podcast/2020/12/19/test-entry.ogg.torrent
deleted file mode 100644
index 901eac3..0000000
--- a/src/content/en/podcast/2020/12/19/test-entry.ogg.torrent
+++ /dev/null
@@ -1 +0,0 @@
-d10:created by13:mktorrent 1.14:infod6:lengthi97060e12:x_cross_seed42:mktorrent-9934A4BD4BF787E1BD685FCE62C6057A4:name14:test-entry.ogg12:piece lengthi32768e6:pieces60:dTÝK«f^”Q_eõù]O´ðI}PúG“+'wgäË/É2áýÒ¤¢«þ³p_yæ¯_ü£6Ó!ÇSè<e8:url-list57:https://euandre.org/en/podcasts/2020/12/19/test-entry.ogge \ No newline at end of file
diff --git a/src/content/en/podcast/categories.adoc b/src/content/en/podcast/categories.adoc
index f29acda..feb64ff 100644
--- a/src/content/en/podcast/categories.adoc
+++ b/src/content/en/podcast/categories.adoc
@@ -1 +1,2 @@
= Articles by category
+:type: categories
diff --git a/src/content/en/podcast/categories.name b/src/content/en/podcast/categories.name
deleted file mode 120000
index df691ee..0000000
--- a/src/content/en/podcast/categories.name
+++ /dev/null
@@ -1 +0,0 @@
-categories.adoc \ No newline at end of file
diff --git a/src/content/en/screencast/2021/02/07/autoqemu.webm.torrent b/src/content/en/screencast/2021/02/07/autoqemu.webm.torrent
deleted file mode 100644
index 24bfe73..0000000
--- a/src/content/en/screencast/2021/02/07/autoqemu.webm.torrent
+++ /dev/null
Binary files differ
diff --git a/src/content/en/screencast/categories.adoc b/src/content/en/screencast/categories.adoc
index f29acda..feb64ff 100644
--- a/src/content/en/screencast/categories.adoc
+++ b/src/content/en/screencast/categories.adoc
@@ -1 +1,2 @@
= Articles by category
+:type: categories
diff --git a/src/content/en/screencast/categories.name b/src/content/en/screencast/categories.name
deleted file mode 120000
index df691ee..0000000
--- a/src/content/en/screencast/categories.name
+++ /dev/null
@@ -1 +0,0 @@
-categories.adoc \ No newline at end of file
diff --git a/src/content/en/til/categories.adoc b/src/content/en/til/categories.adoc
index f29acda..feb64ff 100644
--- a/src/content/en/til/categories.adoc
+++ b/src/content/en/til/categories.adoc
@@ -1 +1,2 @@
= Articles by category
+:type: categories
diff --git a/src/content/en/til/categories.name b/src/content/en/til/categories.name
deleted file mode 120000
index df691ee..0000000
--- a/src/content/en/til/categories.name
+++ /dev/null
@@ -1 +0,0 @@
-categories.adoc \ No newline at end of file
diff --git a/src/content/favicon.png b/src/content/favicon.png
index a416e71..136d8cb 100644
--- a/src/content/favicon.png
+++ b/src/content/favicon.png
Binary files differ
diff --git a/src/content/git b/src/content/git
new file mode 120000
index 0000000..dc1dc0c
--- /dev/null
+++ b/src/content/git
@@ -0,0 +1 @@
+/dev/null \ No newline at end of file
diff --git a/src/content/live b/src/content/live
new file mode 120000
index 0000000..dc1dc0c
--- /dev/null
+++ b/src/content/live
@@ -0,0 +1 @@
+/dev/null \ No newline at end of file
diff --git a/src/content/pt/hea/categorias.adoc b/src/content/pt/hea/categorias.adoc
index 5ef54e2..19e7cb7 100644
--- a/src/content/pt/hea/categorias.adoc
+++ b/src/content/pt/hea/categorias.adoc
@@ -1,4 +1,5 @@
= Artigos por categoria
+:type: categories
diff --git a/src/content/pt/hea/categories.name b/src/content/pt/hea/categories.name
deleted file mode 120000
index 1b27816..0000000
--- a/src/content/pt/hea/categories.name
+++ /dev/null
@@ -1 +0,0 @@
-categorias.adoc \ No newline at end of file
diff --git a/src/content/public.asc.txt b/src/content/public.asc.txt
index 6559b02..d548547 100644
--- a/src/content/public.asc.txt
+++ b/src/content/public.asc.txt
@@ -36,51 +36,64 @@ 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
-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
-s5K/1f77Aqr6hdYRfw5KqGs=
-=0+B8
+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
+=bNun
-----END PGP PUBLIC KEY BLOCK-----
diff --git a/src/headers.txt b/src/headers.txt
deleted file mode 100644
index 5c050ab..0000000
--- a/src/headers.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-blog/ Blog
-tils/ TIL
-podcasts/ Podcasts
-screencasts/ Screencasts
-pastebins/ Pastebins
-about.html About
diff --git a/src/headers/de.txt b/src/headers/de.txt
new file mode 100644
index 0000000..ca848a3
--- /dev/null
+++ b/src/headers/de.txt
@@ -0,0 +1,13 @@
+en/blog/ Blog
+
+en/til/ TIL
+
+en/podcast/ Podcasts
+
+en/screencast/ Screencasts
+
+en/pastebin/ Pastebins
+
+en/slide/ Slides
+
+en/about.html About
diff --git a/src/headers/en.txt b/src/headers/en.txt
new file mode 100644
index 0000000..ca848a3
--- /dev/null
+++ b/src/headers/en.txt
@@ -0,0 +1,13 @@
+en/blog/ Blog
+
+en/til/ TIL
+
+en/podcast/ Podcasts
+
+en/screencast/ Screencasts
+
+en/pastebin/ Pastebins
+
+en/slide/ Slides
+
+en/about.html About
diff --git a/src/headers/eo.txt b/src/headers/eo.txt
new file mode 100644
index 0000000..ca848a3
--- /dev/null
+++ b/src/headers/eo.txt
@@ -0,0 +1,13 @@
+en/blog/ Blog
+
+en/til/ TIL
+
+en/podcast/ Podcasts
+
+en/screencast/ Screencasts
+
+en/pastebin/ Pastebins
+
+en/slide/ Slides
+
+en/about.html About
diff --git a/src/headers/es.txt b/src/headers/es.txt
new file mode 100644
index 0000000..ca848a3
--- /dev/null
+++ b/src/headers/es.txt
@@ -0,0 +1,13 @@
+en/blog/ Blog
+
+en/til/ TIL
+
+en/podcast/ Podcasts
+
+en/screencast/ Screencasts
+
+en/pastebin/ Pastebins
+
+en/slide/ Slides
+
+en/about.html About
diff --git a/src/headers/fr.txt b/src/headers/fr.txt
new file mode 100644
index 0000000..ca848a3
--- /dev/null
+++ b/src/headers/fr.txt
@@ -0,0 +1,13 @@
+en/blog/ Blog
+
+en/til/ TIL
+
+en/podcast/ Podcasts
+
+en/screencast/ Screencasts
+
+en/pastebin/ Pastebins
+
+en/slide/ Slides
+
+en/about.html About
diff --git a/src/headers/pt.txt b/src/headers/pt.txt
new file mode 100644
index 0000000..48f2523
--- /dev/null
+++ b/src/headers/pt.txt
@@ -0,0 +1,13 @@
+#
+
+pt/hea/ HEA
+
+#
+
+#
+
+#
+
+#
+
+pt/sobre.html Sobre
diff --git a/src/headers/ref.txt b/src/headers/ref.txt
new file mode 100644
index 0000000..ca848a3
--- /dev/null
+++ b/src/headers/ref.txt
@@ -0,0 +1,13 @@
+en/blog/ Blog
+
+en/til/ TIL
+
+en/podcast/ Podcasts
+
+en/screencast/ Screencasts
+
+en/pastebin/ Pastebins
+
+en/slide/ Slides
+
+en/about.html About
diff --git a/src/linkonly-dirs.txt b/src/linkonly-dirs.txt
new file mode 100644
index 0000000..3a038f0
--- /dev/null
+++ b/src/linkonly-dirs.txt
@@ -0,0 +1,5 @@
+src/content/css/
+src/content/favicon/
+src/content/images/
+src/content/resources/
+src/content/static/
diff --git a/src/names/categories/de.txt b/src/names/categories/de.txt
new file mode 100644
index 0000000..36e8f75
--- /dev/null
+++ b/src/names/categories/de.txt
@@ -0,0 +1 @@
+categories
diff --git a/src/names/categories/en.txt b/src/names/categories/en.txt
new file mode 100644
index 0000000..36e8f75
--- /dev/null
+++ b/src/names/categories/en.txt
@@ -0,0 +1 @@
+categories
diff --git a/src/names/categories/eo.txt b/src/names/categories/eo.txt
new file mode 100644
index 0000000..36e8f75
--- /dev/null
+++ b/src/names/categories/eo.txt
@@ -0,0 +1 @@
+categories
diff --git a/src/names/categories/es.txt b/src/names/categories/es.txt
new file mode 100644
index 0000000..36e8f75
--- /dev/null
+++ b/src/names/categories/es.txt
@@ -0,0 +1 @@
+categories
diff --git a/src/names/categories/fr.txt b/src/names/categories/fr.txt
new file mode 100644
index 0000000..36e8f75
--- /dev/null
+++ b/src/names/categories/fr.txt
@@ -0,0 +1 @@
+categories
diff --git a/src/names/categories/pt.txt b/src/names/categories/pt.txt
new file mode 100644
index 0000000..7216072
--- /dev/null
+++ b/src/names/categories/pt.txt
@@ -0,0 +1 @@
+categorias
diff --git a/src/names/categories/ref.txt b/src/names/categories/ref.txt
new file mode 100644
index 0000000..36e8f75
--- /dev/null
+++ b/src/names/categories/ref.txt
@@ -0,0 +1 @@
+categories
diff --git a/src/names/category/de.txt b/src/names/category/de.txt
new file mode 100644
index 0000000..46e72f3
--- /dev/null
+++ b/src/names/category/de.txt
@@ -0,0 +1 @@
+category
diff --git a/src/names/category/en.txt b/src/names/category/en.txt
new file mode 100644
index 0000000..46e72f3
--- /dev/null
+++ b/src/names/category/en.txt
@@ -0,0 +1 @@
+category
diff --git a/src/names/category/eo.txt b/src/names/category/eo.txt
new file mode 100644
index 0000000..46e72f3
--- /dev/null
+++ b/src/names/category/eo.txt
@@ -0,0 +1 @@
+category
diff --git a/src/names/category/es.txt b/src/names/category/es.txt
new file mode 100644
index 0000000..46e72f3
--- /dev/null
+++ b/src/names/category/es.txt
@@ -0,0 +1 @@
+category
diff --git a/src/names/category/fr.txt b/src/names/category/fr.txt
new file mode 100644
index 0000000..46e72f3
--- /dev/null
+++ b/src/names/category/fr.txt
@@ -0,0 +1 @@
+category
diff --git a/src/names/category/pt.txt b/src/names/category/pt.txt
new file mode 100644
index 0000000..ae2c934
--- /dev/null
+++ b/src/names/category/pt.txt
@@ -0,0 +1 @@
+categoria
diff --git a/src/names/category/ref.txt b/src/names/category/ref.txt
new file mode 100644
index 0000000..46e72f3
--- /dev/null
+++ b/src/names/category/ref.txt
@@ -0,0 +1 @@
+category
diff --git a/src/static.conf b/src/static.conf
index 1007780..694f0fd 100644
--- a/src/static.conf
+++ b/src/static.conf
@@ -1,7 +1,8 @@
+export headers_dir=src/headers
+export names_dir=src/names
export root_dir=src/content
-export header_links=src/headers.txt
export list_addr='~euandreh/public-inbox@lists.sr.ht'
-export discussions_url_prefix='https://lists.st.ht/~euandreh/public-inbox?search='
+export discussions_url_prefix='https://lists.sr.ht/~euandreh/public-inbox?search='
export sourcecode_url_prefix="$sourcecode_url/tree"
export author='EuAndreh'
export site_name="EuAndreh's website"