diff --git a/.gitignore b/.gitignore
index c6345f4..d33e74a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,15 +19,77 @@ dat/ncdu/changes2.log
dat/ncdu/changes2.md
dat/ncdu/man.md
dat/ncdu/man.mdoc
+dat/ncdu/man/1_1.md
+dat/ncdu/man/1_1.mdoc
+dat/ncdu/man/1_10.md
+dat/ncdu/man/1_10.pod
+dat/ncdu/man/1_11.md
+dat/ncdu/man/1_11.pod
+dat/ncdu/man/1_12.md
+dat/ncdu/man/1_12.pod
+dat/ncdu/man/1_13.md
+dat/ncdu/man/1_13.pod
+dat/ncdu/man/1_14.md
+dat/ncdu/man/1_14.pod
+dat/ncdu/man/1_15.md
+dat/ncdu/man/1_15.pod
+dat/ncdu/man/1_15_1.md
+dat/ncdu/man/1_15_1.pod
+dat/ncdu/man/1_16.md
+dat/ncdu/man/1_16.pod
+dat/ncdu/man/1_17.md
+dat/ncdu/man/1_17.pod
+dat/ncdu/man/1_18.md
+dat/ncdu/man/1_18.pod
+dat/ncdu/man/1_19.md
+dat/ncdu/man/1_19.pod
+dat/ncdu/man/1_2.md
+dat/ncdu/man/1_2.mdoc
+dat/ncdu/man/1_20.md
+dat/ncdu/man/1_20.mdoc
+dat/ncdu/man/1_3.md
+dat/ncdu/man/1_3.mdoc
+dat/ncdu/man/1_4.md
+dat/ncdu/man/1_4.mdoc
+dat/ncdu/man/1_5.md
+dat/ncdu/man/1_5.mdoc
+dat/ncdu/man/1_6.md
+dat/ncdu/man/1_6.mdoc
+dat/ncdu/man/1_7.md
+dat/ncdu/man/1_7.mdoc
+dat/ncdu/man/1_8.md
+dat/ncdu/man/1_8.mdoc
+dat/ncdu/man/1_9.md
+dat/ncdu/man/1_9.pod
+dat/ncdu/man/2_0.md
+dat/ncdu/man/2_0.pod
+dat/ncdu/man/2_1.md
+dat/ncdu/man/2_1.pod
+dat/ncdu/man/2_2.md
+dat/ncdu/man/2_2.pod
+dat/ncdu/man/2_3.md
+dat/ncdu/man/2_3.pod
dat/nginx-confgen/changes.log
dat/nginx-confgen/changes.md
dat/nginx-confgen/man.md
dat/nginx-confgen/man.mdoc
+dat/nginx-confgen/man/1_0.md
+dat/nginx-confgen/man/1_0.pod
+dat/nginx-confgen/man/1_1.md
+dat/nginx-confgen/man/1_1.pod
+dat/nginx-confgen/man/1_2.md
+dat/nginx-confgen/man/1_2.pod
+dat/nginx-confgen/man/2.0.md
+dat/nginx-confgen/man/2.0.pod
dat/sqlbin/manual.md
dat/torreas/changes.log
dat/torreas/changes.md
dat/torreas/man.md
dat/torreas/man.mdoc
+dat/torreas/man/0_1.md
+dat/torreas/man/0_1.pod
+dat/torreas/man/0_2.md
+dat/torreas/man/0_2.mdoc
dat/tuwf/changes.log
dat/tuwf/changes.md
dat/tuwf/man.md
@@ -91,17 +153,48 @@ pub/ncdu/changes2.html
pub/ncdu/feed.atom
pub/ncdu/jsonfmt.html
pub/ncdu/man.html
+pub/ncdu/man/1_1.html
+pub/ncdu/man/1_10.html
+pub/ncdu/man/1_11.html
+pub/ncdu/man/1_12.html
+pub/ncdu/man/1_13.html
+pub/ncdu/man/1_14.html
+pub/ncdu/man/1_15.html
+pub/ncdu/man/1_15_1.html
+pub/ncdu/man/1_16.html
+pub/ncdu/man/1_17.html
+pub/ncdu/man/1_18.html
+pub/ncdu/man/1_19.html
+pub/ncdu/man/1_2.html
+pub/ncdu/man/1_20.html
+pub/ncdu/man/1_3.html
+pub/ncdu/man/1_4.html
+pub/ncdu/man/1_5.html
+pub/ncdu/man/1_6.html
+pub/ncdu/man/1_7.html
+pub/ncdu/man/1_8.html
+pub/ncdu/man/1_9.html
+pub/ncdu/man/2_0.html
+pub/ncdu/man/2_1.html
+pub/ncdu/man/2_2.html
+pub/ncdu/man/2_3.html
pub/ncdu/scr.html
pub/nginx-confgen.html
pub/nginx-confgen/changes.html
pub/nginx-confgen/feed.atom
pub/nginx-confgen/man.html
+pub/nginx-confgen/man/1_0.html
+pub/nginx-confgen/man/1_1.html
+pub/nginx-confgen/man/1_2.html
+pub/nginx-confgen/man/2.0.html
pub/sqlbin.html
pub/sqlbin/manual.html
pub/torreas.html
pub/torreas/changes.html
pub/torreas/feed.atom
pub/torreas/man.html
+pub/torreas/man/0_1.html
+pub/torreas/man/0_2.html
pub/tuwf.html
pub/tuwf/changes.html
pub/tuwf/feed.atom
diff --git a/Makefile b/Makefile
index 0aff1d0..7be2feb 100644
--- a/Makefile
+++ b/Makefile
@@ -52,11 +52,40 @@ PAGES=\
"ncdu/changes.log https://g.blicky.net/ncdu.git/plain/ChangeLog?h=master Ncdu 1.x Release History"\
"ncdu/changes2.log https://g.blicky.net/ncdu.git/plain/ChangeLog?h=zig Ncdu 2.x Release History"\
"ncdu/jsonfmt.md"\
- "ncdu/man.mdoc https://g.blicky.net/ncdu.git/plain/ncdu.1?h=zig Ncdu Manual"\
+ "ncdu/man.mdoc https://g.blicky.net/ncdu.git/plain/ncdu.1?h=v2.4 Ncdu 2.4 Manual"\
+ "ncdu/man/2_3.pod https://g.blicky.net/ncdu.git/plain/ncdu.pod?h=v2.3 Ncdu 2.3 Manual"\
+ "ncdu/man/2_2.pod https://g.blicky.net/ncdu.git/plain/ncdu.pod?h=v2.2 Ncdu 2.2 Manual"\
+ "ncdu/man/2_1.pod https://g.blicky.net/ncdu.git/plain/ncdu.pod?h=v2.1 Ncdu 2.1 Manual"\
+ "ncdu/man/2_0.pod https://g.blicky.net/ncdu.git/plain/ncdu.pod?h=v2.0 Ncdu 2.0 Manual"\
+ "ncdu/man/1_20.mdoc https://g.blicky.net/ncdu.git/plain/ncdu.1?h=v1.20 Ncdu 1.20 Manual"\
+ "ncdu/man/1_19.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.19 Ncdu 1.19 Manual"\
+ "ncdu/man/1_18.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.18 Ncdu 1.18 Manual"\
+ "ncdu/man/1_17.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.17 Ncdu 1.17 Manual"\
+ "ncdu/man/1_16.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.16 Ncdu 1.16 Manual"\
+ "ncdu/man/1_15_1.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.15.1 Ncdu 1.15.1 Manual"\
+ "ncdu/man/1_15.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.15 Ncdu 1.15 Manual"\
+ "ncdu/man/1_14.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.14 Ncdu 1.14 Manual"\
+ "ncdu/man/1_13.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.13 Ncdu 1.13 Manual"\
+ "ncdu/man/1_12.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.12 Ncdu 1.12 Manual"\
+ "ncdu/man/1_11.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.11 Ncdu 1.11 Manual"\
+ "ncdu/man/1_10.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.10 Ncdu 1.10 Manual"\
+ "ncdu/man/1_9.pod https://g.blicky.net/ncdu.git/plain/doc/ncdu.pod?h=v1.9 Ncdu 1.9 Manual"\
+ "ncdu/man/1_8.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.8 Ncdu 1.8 Manual"\
+ "ncdu/man/1_7.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.7 Ncdu 1.7 Manual"\
+ "ncdu/man/1_6.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.6 Ncdu 1.6 Manual"\
+ "ncdu/man/1_5.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.5 Ncdu 1.5 Manual"\
+ "ncdu/man/1_4.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.4 Ncdu 1.4 Manual"\
+ "ncdu/man/1_3.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.3 Ncdu 1.3 Manual"\
+ "ncdu/man/1_2.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.2 Ncdu 1.2 Manual"\
+ "ncdu/man/1_1.mdoc https://g.blicky.net/ncdu.git/plain/doc/ncdu.1?h=v1.1 Ncdu 1.1 Manual"\
"ncdu/scr.md"\
"nginx-confgen.md"\
- "nginx-confgen/changes.log https://g.blicky.net/nginx-confgen.git/plain/ChangeLog Nginx-confgen Release History"\
- "nginx-confgen/man.mdoc https://g.blicky.net/nginx-confgen.git/plain/nginx-confgen.1 The nginx-confgen(1) Man Page"\
+ "nginx-confgen/changes.log https://g.blicky.net/nginx-confgen.git/plain/ChangeLog nginx-confgen 2.2 manual"\
+ "nginx-confgen/man.mdoc https://g.blicky.net/nginx-confgen.git/plain/nginx-confgen.1 nginx-confgen 2.1 Manual"\
+ "nginx-confgen/man/2.0.pod https://g.blicky.net/nginx-confgen.git/plain/nginx-confgen.pod?h=2.0 nginx-confgen 2.0 Manual"\
+ "nginx-confgen/man/1_2.pod https://g.blicky.net/nginx-confgen.git/plain/nginx-confgen.pod?h=1.2 nginx-confgen 1.2 Manual"\
+ "nginx-confgen/man/1_1.pod https://g.blicky.net/nginx-confgen.git/plain/nginx-confgen.pod?h=1.1 nginx-confgen 1.1 Manual"\
+ "nginx-confgen/man/1_0.pod https://g.blicky.net/nginx-confgen.git/plain/nginx-confgen.pod?h=1.0 nginx-confgen 1.0 Manual"\
"sqlbin.md"\
"tuwf.md"\
"sqlbin/manual.md https://g.blicky.net/sqlbin.git/plain/manual.md"\
@@ -74,7 +103,9 @@ PAGES=\
"yxml/man.md https://g.blicky.net/yxml.git/plain/yxml.md"\
"torreas.md"\
"torreas/changes.log https://g.blicky.net/torreas.git/plain/ChangeLog Torreas Release History"\
- "torreas/man.mdoc https://g.blicky.net/torreas.git/plain/torreas.1 Torreas Manual"
+ "torreas/man.mdoc https://g.blicky.net/torreas.git/plain/torreas.1 Torreas 0.3 Manual"\
+ "torreas/man/0_2.mdoc https://g.blicky.net/torreas.git/plain/torreas.1?h=0.2 Torreas 0.2 Manual"\
+ "torreas/man/0_1.pod https://g.blicky.net/torreas.git/plain/torreas.pod?h=0.1 Torreas 0.1 Manual"
# Files generated by mkfeed.pl
@@ -161,11 +192,12 @@ dat/download.md: mkdlpage.pl pub/download/*.sha256
./mkdlpage.pl >"$@"
-${HTML_OUT}: pub/%.html: dat/%.md template.html
+${HTML_OUT}: pub/%.html: dat/%.md template.html Makefile
@echo "HTML $*"
@mkdir -p $$(dirname "$@")
@cat "$<" |\
sed -E 's/\[([^]]+)\]\(\/download\/([^\) ]+)\)/\0 ⓘ<\/a>/g' |\
+ ./docversions.pl "$*" ${HTML_OUT} |\
pandoc -f markdown -t html5 --strip-comments --template template.html \
--metadata path1=$$(echo "$*" | sed 's/\/.*//') \
--metadata path2=$$(echo "$*" | sed 's/\//-/' | sed 's/\/.*//') \
diff --git a/dat/contributing.md b/dat/contributing.md
index 6ab4c91..23c7482 100644
--- a/dat/contributing.md
+++ b/dat/contributing.md
@@ -19,22 +19,23 @@ sometimes outright reject a feature if it seems out of scope. It's still good
to have a list of potential features to work on if I feel like making myself
useful, so new ideas are nonetheless appreciated.
-Feel free to send **patches** and **pull requests** for trivial fixes for
+Feel free to send **patches** and **pull requests** for **trivial fixes** for
simple bugs, documentation issues, typos, etc. If the change is trivial to
review and improves the software in a noticeable way, I'm happy to apply it.
Don't bother submitting patches for things that don't noticeably improve the
-software. I don't give a damn about compiler warnings when they don't affect
-the correctness of the code. Slight inconsistencies in code style or typos in
-variable names or comments (i.e. non-user visible parts) don't really need
-fixing, either.
+software. I don't particularly care about compiler warnings when they don't
+affect the correctness of the code, and the churn of patching silly things is
+more likely to introduce new bugs instead. Slight inconsistencies in code style
+or typos in variable names or comments (i.e. non-user visible parts) don't
+really need fixing, either.
-When it comes to patches or pull requests for larger fixes or new features, I
-strongly advise you to get in touch first to discuss your planned changes.
-After all, there's a good chance I already have opinions about it. Generally
-speaking, I have no intention to merge code that I haven't thoroughly reviewed,
-and I enjoy programming much more than I enjoy reviewing other people's code,
-so just throwing patches over the fence and expecting me to merge anything is a
-recipe for disappointment.
+When it comes to patches or pull requests for **larger fixes** or **new
+features**, I strongly advise you to get in touch first to discuss your planned
+changes. After all, there's a good chance I already have opinions about it.
+Generally speaking, I have no intention to merge code that I haven't thoroughly
+reviewed, and I enjoy programming much more than I enjoy reviewing other
+people's code, so just throwing patches over the fence and expecting me to
+merge anything is a recipe for disappointment.
If you use my software in combination with **proprietary software** or a
proprietary OS (like MacOS or Windows), then you're mostly on your own. I write
@@ -42,3 +43,8 @@ free software because I care about user freedom, so I'm not inclined to spend
time and effort improving my code to better work with software that I wouldn't
recommend anyone to use. I may accept the occasional fix if it's simple enough,
but I've no intention to bend over backwards.
+
+I do not accept **donations** at the moment, since it's not worth the tax
+admininstration hassle. Consider donating to [Bits of
+Freedom](https://www.bitsoffreedom.nl/english/) instead.
+(alright, I do have a patreon and subscribestar over at vndb, if you really insist)
diff --git a/dat/ncdc.md b/dat/ncdc.md
index 001aa2b..b86a5af 100644
--- a/dat/ncdc.md
+++ b/dat/ncdc.md
@@ -5,7 +5,7 @@ Ncdc is a lightweight direct connect client with a friendly ncurses interface.
## Get ncdc!
Latest version
-: 1.24.1 ([ncdc-1.24.1.tar.gz](/download/ncdc-1.24.1.tar.gz)
+: 1.24.1 (2024-07-18 - [ncdc-1.24.1.tar.gz](/download/ncdc-1.24.1.tar.gz)
\- [changes](https://dev.yorhel.nl/ncdc/changes))
Convenient static binaries for Linux:
diff --git a/dat/ncdu.md b/dat/ncdu.md
index 7829ad0..08c7b14 100644
--- a/dat/ncdu.md
+++ b/dat/ncdu.md
@@ -17,7 +17,7 @@ Static binaries
[AArch64](/download/ncdu-2.4-linux-aarch64.tar.gz).
Zig version (stable)
-: 2.4 ([ncdu-2.4.tar.gz](/download/ncdu-2.4.tar.gz) - [changes](/ncdu/changes2))
+: 2.4 (2024-04-21 - [ncdu-2.4.tar.gz](/download/ncdu-2.4.tar.gz) - [changes](/ncdu/changes2))
Requires Zig 0.12 or 0.13.
@@ -26,7 +26,7 @@ Zig version (stable)
need a more stable compilation environment.
C version (LTS)
-: 1.20 ([ncdu-1.20.tar.gz](/download/ncdu-1.20.tar.gz) - [changes](/ncdu/changes))
+: 1.20 (2024-04-21 - [ncdu-1.20.tar.gz](/download/ncdu-1.20.tar.gz) - [changes](/ncdu/changes))
Lags a bit behind on the 2.x version in terms of features and performance,
but is still being maintained and perfectly usable.
diff --git a/dat/nginx-confgen.md b/dat/nginx-confgen.md
index 80236d6..0d495e5 100644
--- a/dat/nginx-confgen.md
+++ b/dat/nginx-confgen.md
@@ -41,7 +41,7 @@ See the [manual](/nginx-confgen/man) for more features.
## Download
Latest version
-: 2.1 ([nginx-confgen-2.1.tar.gz](/download/nginx-confgen-2.1.tar.gz) - [changes](/nginx-confgen/changes))
+: 2.1 (2022-04-27 - [nginx-confgen-2.1.tar.gz](/download/nginx-confgen-2.1.tar.gz) - [changes](/nginx-confgen/changes))
Requirements
: A C compiler and a UNIX-like system. Only tested on Linux, but should also
diff --git a/dat/torreas.md b/dat/torreas.md
index a977a01..20c417a 100644
--- a/dat/torreas.md
+++ b/dat/torreas.md
@@ -8,10 +8,10 @@ reconstruct a torrent that you have already downloaded, renamed and archived.
## Download
Latest version
-: 0.3 ([torreas-0.3.tar.gz](/download/torreas-0.3.tar.gz) - [changes](/torreas/changes))
+: 0.3 (2024-04-21 - [torreas-0.3.tar.gz](/download/torreas-0.3.tar.gz) - [changes](/torreas/changes))
Build requirements
-: Zig 0.12
+: Zig 0.12 or 0.13
License
: MIT
diff --git a/docversions.pl b/docversions.pl
new file mode 100755
index 0000000..9a9195f
--- /dev/null
+++ b/docversions.pl
@@ -0,0 +1,36 @@
+#!/usr/bin/perl
+
+# Adds version links to doc pages, assumption:
+#
+# /project/doc <- latest version
+# /project/doc/$x <- older versions, $x must start with a digit and '_' is replaced with a '.' for display.
+#
+use v5.36;
+
+my $VER = qr{[0-9][^/]*};
+my $cur = shift;
+my $base = $cur =~ s{/$VER$}{}r;
+my %pages = map +($_ =~ s{^pub/}{}r =~ s{\.html$}{}r,1), @ARGV;
+my $links = '';
+
+sub num($s) { $s =~ s/([0-9]+)/sprintf '%05d', $1/erg }
+
+my @ver =
+ sort { num($b) cmp num($a) }
+ grep m{^(.+)/($VER)$} && $1 eq $base, keys %pages;
+
+sub lnk($ver) {
+ my $v = $ver eq $base ? 'latest' : $ver =~ s{^.+/($VER)$}{$1}r =~ s/_/./rg;
+ $cur eq $ver ? "**$v**" : "[$v](/$ver)";
+}
+
+$links = 'Version: '.join(' / ', map lnk($_), $base, @ver)."\n\n" if @ver;
+
+my $firstsec = 1;
+while() {
+ if ($firstsec && /^#/) {
+ $firstsec = 0;
+ print $links;
+ }
+ print;
+};
diff --git a/pub/style.css b/pub/style.css
index 3143762..3222410 100644
--- a/pub/style.css
+++ b/pub/style.css
@@ -28,6 +28,8 @@ header p, header p * { font-size: 9px; text-decoration: none; line-height: 1.8em
header p a:hover { text-decoration: underline }
header p b { display: block; margin-top: 10px; margin-bottom: 2px }
+small { font-size: 9px; }
+
@media (min-width: 1200px) {
* { font-size: 16px }
#body { width: 1000px }