Source for
git clone git://
Log | Files | Refs | README | LICENSE

commit 758985bdb85ec8208c509ae1202b361efdd389cf (patch)
parent 47bc4804445b5c60d12c3fd1cf9fd739b07c5cbb
Author: Alex Karle <>
Date:   Mon, 15 Nov 2021 00:16:38 -0500

gopher/blog: Merge gopher build recipe, announce on blog

So, if you can't tell by the slew of commits leading up to this one, the
gopher commits were *actually* in their own private repo. As discussed
in 009, I decided to merge it with, and this commit
represents that.

Of course, that merge also warrants a post (and the deprecation of So this commit bundles in the phlog and blog
announcements (can you tell which took 1hr+ to write and which took 5m?
:P -- here's to a brave new world of micro-phlogging).

M.gitignore | 6++----
MLINKS | 5++++-
MMakefile | 30++++++++++++++++++++++--------
MORDER | 1+ | 11++++++-----
Mblog.7 | 5+++++
Aburrowing.7 | 113+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dgopher/LICENSE | 21---------------------
Dgopher/Makefile | 27---------------------------
Rjam-tuesday/stats -> gopher/jam-tuesday/stats | 0
Agopher/phlog/009.txt | 21+++++++++++++++++++++
Mgopher/phlog/index.gph | 1+
Mtext-only.7 | 5+++++
Dwelcome.txt | 16----------------
14 files changed, 180 insertions(+), 82 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1,8 +1,6 @@ # generated html from man pages -*.html -*.txt -!jam-tuesday/index.html -!welcome.txt +/*.html +/*.txt # atom feed is generated by ./bin/ atom.xml diff --git a/LINKS b/LINKS @@ -5,4 +5,7 @@ pass.1 newsboat.1 stagit.1 git-daemon.1 -gophernicus.8 +gophernicus.8 +bombadillo.1 +lynx.1 +sacc.1 diff --git a/Makefile b/Makefile @@ -2,7 +2,7 @@ # # a tale of two builds # -# This Makefile builds both (text-only) and +# This Makefile builds both gopher:// (text-only) and # (html) from the same mdoc(7) by leveraging inference # rules. Since this generates a LOT of derived files, it's recommended # to run BSD make and run `make obj` first to get an out-of-tree build. @@ -12,7 +12,7 @@ # build [default] -- generates html and text in obj (OpenBSD) or $PWD # obj -- makes the obj/ directory for out-of-tree build on OpenBSD # clean -- deletes html and text artifacts -# install -- install to $DESTDIR/{www,text} (default: /var/www/htdocs) +# install -- install to $DESTDIR/{www,gopher} (default: /var/www/htdocs) # jams -- regenerate jam-tuesday index and stats files # gmake defines CURDIR, OpenBSD defines .CURDIR -- one should work @@ -23,11 +23,13 @@ DESTDIR = /var/www/htdocs HTML != echo $(DIR)/*.[1-9] | sed 's@$(DIR)/\([^\.]*\)\.[1-9]@\1.html@g' TEXT != echo $(DIR)/*.[1-9] | sed 's@$(DIR)/\([^\.]*\)\.[1-9]@\1.txt@g' SETS != find $(DIR)/jam-tuesday -name '[0-9][0-9][0-9][0-9]-*' +NOTES != find $(DIR)/gopher/notes/all BUILT = $(HTML) \ $(TEXT) \ atom.xml \ - index.html + index.html \ + gopher/notes/index.gph # Top level targets @@ -38,17 +40,27 @@ build: $(BUILT) jams: jam-tuesday/stats jam-tuesday/index.html obj: - mkdir -p obj/jam-tuesday obj/bin + mkdir -p obj/jam-tuesday obj/bin obj/gopher/notes .PHONY: install install: build - install -m 755 -Dd $(DESTDIR)/text/jam-tuesday $(DESTDIR)/www/jam-tuesday - install -m 444 $(SETS) $(DIR)/jam-tuesday/stats $(DESTDIR)/text/jam-tuesday + # HTML to DESTDIR/www + install -m 755 -Dd $(DESTDIR)/www/jam-tuesday install -m 444 $(SETS) $(DIR)/jam-tuesday/index.html $(DESTDIR)/www/jam-tuesday install -m 444 *.html atom.xml $(DIR)/LICENSE $(DIR)/style.css $(DESTDIR)/www - install -m 444 $(DIR)/LICENSE $(DESTDIR)/text + # Text + gopher exclusives to DESTDIR/gopher + cd $(DIR) && pax -rw gopher $(DESTDIR) + pax -rw gopher $(DESTDIR) # for out-of-tree builds + install -m 444 $(SETS) $(DESTDIR)/gopher/jam-tuesday + install -m 444 $(DIR)/LICENSE $(DESTDIR)/gopher for f in *.txt; do \ - install -m 444 $$f $(DESTDIR)/text/$$(grep $$f $(DIR)/ORDER); \ + install -m 444 $$f $(DESTDIR)/gopher/blog/$$(grep $$f $(DIR)/ORDER); \ + done + cp $(DIR)/gopher/bin/* $(DESTDIR)/gopher/code + for d in jam-tuesday blog code; do \ + (cat $(DIR)/gopher/$$d/index.gph; \ + $(DIR)/gopher/bin/dirlist $(DESTDIR)/gopher/$$d)\ + > $(DESTDIR)/gopher/$$d/index.gph; \ done .PHONY: clean @@ -75,6 +87,8 @@ bin/fixlinks: LINKS awk '{ printf " \\\n -e s#", $$1, $$2 } END { printf "\n" }' $(DIR)/LINKS >> $@ chmod +x $@ +gopher/notes/index.gph: $(NOTES) + (cd $(DIR)/gopher/notes && $(DIR)/gopher/bin/notetag) > $@ # Inference rules (*.txt and *.html) $(HTML): bin/ bin/fixlinks diff --git a/ORDER b/ORDER @@ -15,3 +15,4 @@ 110-text-only.txt 111-make-obj.txt 112-use-git.txt +113-burrowing.txt diff --git a/ b/ @@ -15,15 +15,16 @@ On OpenBSD, running `make obj` is recommended before running `make` to leverage the out-of-tree build extension (see the bit about `.OBJDIR` in the man page!). -text. ------ +gopher:// +--------- A pure ascii dump of the [mdoc(7)][mdoc] content of the www site, served -over HTTP, HTTPS, and Gopher (by [httpd(8)][httpd] and -[gophernicus(1)][gophernicus] respectively! +over Gopher by [geomyidae(1)][geomyidae] respectively! Builds via [make(1)][make] at the same time as the HTML. See above for instructions. +Also has gopher-exclusive content! + git. ---- I use a simple setup of git-daemon for anonymous (read-only) downloads, @@ -52,4 +53,4 @@ and [my-old-man(7)][my-old-man]. [git-daemon]: [self-hosted]: [my-old-man]: -[gophernicus]: +[geomyidae]: diff --git a/blog.7 b/blog.7 @@ -16,6 +16,11 @@ For an up to date list of software/hardware I use, see .Sh POSTS .Bl -tag -width "XX/XX" .It 11/21 +.Xr burrowing 7 +- from +.Xr text-only 7 +to gopher-only +.It 11/21 .Xr use-git 7 - non-standard uses of .Xr git 1 diff --git a/burrowing.7 b/burrowing.7 @@ -0,0 +1,113 @@ +.Dd November 15, 2021 +.Dt BURROWING 7 +.Os +.Sh NAME +.Nm burrowing +.Nd from +.Xr text-only 7 +to gopher-only +.Sh DESCRIPTION +This past month, +I've spent a lot of time learning about gopher. +It's truly a fascinating alternative to the world wide web, +not just in the content found there +but also in terms of the protocol itself. +.Pp +As of this writing, I've decided to deprecate +.Lk +in favor of serving that content (and more!) over gopher +instead, exclusively. +.Sh IMPLICATIONS +This shouldn't have much impact on this +.Xr blog 7 . +After all, +.Xr text-only 7 +was an experiment to begin with! +I'll still keep publishing semi-regularly here, +I just don't plan on maintaining a text dump via HTTP. +.Pp +I will, however, start publishing gopher-only content. +There's two main reasons for this: +.Pp +.Bl -enum -compact +.It +I want to see more activity on gopher +.It +Gopher is easier to publish on +.El +.Pp +Admittedly, number 2 is my own doing. +I moved this blog to +.Xr mdoc 7 +willingly +.Xr ( my-old-man 7 ) +to learn the language. +I've found that it slows my raw output, +which, +while fine for longer form pieces, +is a pain for shorter-form thoughts. +No regrets (I learned a ton!), +but shorter-form thoughts do much better in plaintext! +.Pp +The first reason is a theme for this blog: +be the change you want to see. +I would love to see more content on gopher, +so I'm taking the plunge. +.Sh THE PITCH +So, why gopher? +Probably the biggest reason to explore gopher is +the content. +It's a parallel network totally untouched by +commercial interests. +You won't see a single ad. +.Pp +The second reason to try gopher lies in the +protocol itself--gopher has a standardized menu +interface, and individual gopherholes cannot +change the way you interact with them beyond +the standard. +In a world where it seems every bit of the +web's UI has been rewritten in JavaScript (looking +at you, <div>'s that should be <button>'s), +it's wildly refreshing +to just have a predictable menu. +.Pp +So, gopher separates the interaction (menus) +from the content (can be anything, but is usually +plaintext). +I think this is a cool design choice +because it emphasizes what the gopher protocol +is really about: fetching documents. +.Pp +Ultimately, +it's hard to describe and much better experienced. +For a quick dip, +try out a proxy like +.Lk . +For client recommendations, +I'd check out +.Xr lynx 1 , +.Xr sacc 1 , +or +.Xr bombadillo 1 . +Bombadillo has gemini support too, +gemini being another alternative internet protocol +worth checking out. +I'll likely put my stuff up there too, +if time allows. +.Pp +Not sure where to start in your client? +Go to +.Lk gopher:// +of course! :) +.Sh SEE ALSO +.Bl -bullet -compact +.It +.Xr blog 7 +.It +.Lk RFC 1436 (Gopher) +.It +.Lk +.It +.Lk Gemini official site +.El diff --git a/gopher/LICENSE b/gopher/LICENSE @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Alex Karle <> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/gopher/Makefile b/gopher/Makefile @@ -1,27 +0,0 @@ -FILES = about.txt \ - LICENSE \ - index.gph \ - server.txt - -CODE = bin/notetag \ - LICENSE \ - Makefile - -.PHONY: build -build: - cd notes && ../bin/notetag > index.gph - -.PHONY: install -install: build - cd /var/gopher && mkdir -p notes code blog jam-tuesday phlog - install -m 444 phlog/* /var/gopher/phlog/ - install -m 444 $(FILES) /var/gopher - for tag in notes/*/; do \ - mkdir -p /var/gopher/$$tag; \ - install -m 444 $$tag/* /var/gopher/$$tag; \ - done - install -m 444 notes/index.gph /var/gopher/notes - install -m 444 $(CODE) /var/gopher/code - for d in jam-tuesday blog code; do \ - (cat $$d/index.gph; bin/dirlist /var/gopher/$$d) > /var/gopher/$$d/index.gph; \ - done diff --git a/jam-tuesday/stats b/gopher/jam-tuesday/stats diff --git a/gopher/phlog/009.txt b/gopher/phlog/009.txt @@ -0,0 +1,21 @@ +Going Live on the Weblog +------------------------ +Mon Nov 15 00:00:23 EST 2021 + +Tonight I made the decision to merge my phlog repo in with +my repo and announce the phlog on my blog. I +had previously kept the repos separate to make it truly +exclusive (i.e. no git history on the WWW), but that felt +like a pain for not much gain (if anyone is motivated enough +to look at the git history, they've put in more effort than +going to a gopher proxy). + +The announcement was for two reasons: + + 1. Raise awareness of Gopher + 2. Deprecate + +With this gopherhole serving up the same content and more, didn't feel super necessary anymore. + +If anyone's reading this from my blog announcment, welcome! diff --git a/gopher/phlog/index.gph b/gopher/phlog/index.gph @@ -12,6 +12,7 @@ just a collection of thoughts.. +[0|[2021-11-15] Going Live on the Weblog|/phlog/009.txt|server|port] [0|[2021-11-11] Choosing a Phormat pt. 4|/phlog/008.txt|server|port] [0|[2021-11-11] Choosing a Phormat pt. 3|/phlog/007.txt|server|port] [0|[2021-11-10] What's in a RFC?|/phlog/006.txt|server|port] diff --git a/text-only.7 b/text-only.7 @@ -73,6 +73,11 @@ there too. Of course, if you're curious to see how the bits come together, I publish all of the site source at .Lk ! +.Sh UPDATE +As of November 15, 2021, was moved entirely to gopher. +See +.Xr burrowing 7 +for more info. .Sh SEE ALSO .Bl -bullet -compact .It diff --git a/welcome.txt b/welcome.txt @@ -1,16 +0,0 @@ -Welcome to! - -This is an experimental version of my main site ( -in text-only format. For maximum retro effect, I serve up this -directory over HTTP, HTTPS, and Gopher. - -I've been serving txt versions of my mdoc(7) for a while over -Gopher, but decided to formalize the subtree generation and serve -it over HTTP after reading, which you should -totally check out. (aside: I'd like to state that I've been doing -the whole mdoc(7) thing before I knew about and am -not a complete copycat (much respect, great minds think alike and -all that) :) ) - -I hope you enjoy your stay! If you think this is cool, don't -hesitate to reach out: