burrow: Static Gopherhole Generator

Demo of gopherdashboard being used

You may have heard of static site generators. You may even have heard of the Gopher Protocol. But have you heard of a static gopherhole generator?

burrow creates gopherholes for you. It has a lot of features to do so. It’s so good, in my opinion, I’m considering expanding the output to websites as well, or at least abstracting-out some of its library components.

Here’s my gopherhole, which I built with burrow:

Some highlights:

The example:

Serving/Docker Setup

I made a Docker setup for spacecookie. It was nice working with the author of Spacecookie on this project, and I think others!

I even made a setup/branch specific to burrow, which makes it easy to simply push a commit and the server rebuilds the gopherhole for you!.

I think these setups were made originally around serving a Gopherhole via Tor so I’ll suggest some modifications.

Using the burrow setup (no Tor)

I had to tweak the Docker spacecookie burrow setup a bit to get it to play nice.

Using nonstandard ports.

Firewall for the gopherhole service:

sudo ufw allow 7071/tcp comment 'gopherhole (docker)'

Firewall for git/ssh, my rule makes is for only accessing via local network or my VPN:

sudo ufw allow from 192.168.1.0/24 to any port 2222 proto tcp comment 'gopherhole (docker) git ssh'
sudo ufw allow from 10.1.0.0/24 to any port 2222 proto tcp comment 'gopherhole (docker) git ssh'

also making it listen ssh different port! – only allow from localnet ufw. had to edit docker expose, i also had to add this to dockerfile, modifying so this section looks like this (the sed command)

RUN apt-get install -y openssh-server
RUN sed -i '/^#Port 22/c\Port 2222' /etc/ssh/sshd_config
RUN service ssh start


This is in my ~/.ssh/config (192.168.1.100 is the IP of my server, although I realize now I want to modify this now to also specify the IP on the VPN too, if possible):

Host gopherhole
    HostName 192.168.1.100
    Port 2222
        User git
        IdentityFile ~/.ssh/id_rsa_hgopher

I modified make run (Makefile):

docker run -d --restart=always --net servicenet --hostname=spacecookie -p 2222:2222 -p 7071:7071 --ip=172.18.0.68 spacecookie

Port forward on router, then it should all work.

Try to git push to the server IP hosting the docker container and also make sure you port forward and you should be able to access…

Example image

This is an example of a gopherhole generated with burrow, as rendered by my software waffle:

burrow-generated gopherhole in waffle

The burrow repository (hopefully) has an example of a gopherhole that can be built with burrow.

Example fonts

Here are some fonts that I and others have made for burrow:

Story of development

I think I started developing this piece of software before AI started being something I leaned heavily on in my development process. I think the code is very clean, well organized/architectured, and well researched.

Using abstract and advanced Haskell features

In this project I feel like I used very abstract and advanced Haskell features.

Here I will talk about the language extensions and documentation practices…

How I made my own markdown parser?

Markdown parsing

Coming back to this project after a while

  • Needed to pin versions
  • Trying to get nix working
  • GHC versions…
  • cabal freeze, lock.nix
  • Removed depend marked as broken by nixpkgs, with code generated by ai