That's right; this very website, that you're reading right now, is a Fossil repository.
What?
Fossil is a version control system, similar to Git or CVS. It's designed to be the "one stop shop" of sorts for a software project: code, documentation, bug reports, discussions, etc. Think of it as equivalent to a GitHub repository, what with its Issues and PRs and such alongside a project's source code.
Why?
Previously, I was using Jekyll and generating the site statically. This worked reasonably well, but Jekyll's starting to show its age a bit, and it's a bit inconvenient to have to go chase down a laptop and do various git
and rsync
invocations to publish changes.
Now that my homepage is a Fossil repo, I can just... use Fossil, including its web UI. I could make changes from my phone if I wanted. Fossil's also what I plan to use for my project hosting needs going forward (given the above-listed features and its bidirectional Git compatibility), and using Fossil as a website does a good job of exercising a lot of the less-obvious features and configuration.
Beyond that, though, Fossil's Markdown flavor happens to have some rather nice features, the most exciting (for me) being built-in support for Pikchr (which I've gravitated toward as my diagramming tool of choice). If I want to shove a diagram in a post, it's as easy as whipping up a fenced code block:
```pikchr
$sep = 1.5
thickness = 0.025
L: circle
C: circle at $sep right of L
R: circle at $sep right of C
line from L.c to R.c
line "A SECRET REPORT WITHIN THE GUILD" big big invis from 0.5 below L.c to 0.5 below R.c
```
Which turns into1:
$sep = 1.5 thickness = 0.025 L: circle C: circle at $sep right of L R: circle at $sep right of C line from L.c to R.c line "A SECRET REPORT WITHIN THE GUILD" big big invis from 0.5 below L.c to 0.5 below R.c→ /pikchrshow
Neat, right? No fiddling with extra image files to do that. The footnotes feature is also pretty cool; I used it above, and the definition shows up at the bottom of the page.
How?
First off, I created a new Fossil repo:
fossil new website.fossil
mkdir website; cd website
fossil open ../website.fossil
The repo for my Jekyll code was nearby, so I used that to import each of my existing posts (with commands along the lines of fossil wiki create $POST_NAME -t $YYYYMMDD -M markdown ../blog/_posts/$FILENAME
). Fossil's Markdown dialect doesn't support some of the stuff Jekyll supports (like frontmatter and tables of contents), so I had to edit each post to clean that up. I also attached each posts' images and adjusted their references accordingly.
The rest of my old website's pages I recreated as ordinary wiki pages in Fossil, using the web UI. I could've imported 'em, but they all were long overdue for some rewrites anyway.
I also:
- Removed all permissions from all roles
- Adjusted the
mainmenu
setting to add/remove various links - Added some paths to the
public-pages
setting and added necessary permissions indefault-perms
(or else you wouldn't be able to read this unless you're logged in as me!) - Tweaked the theme a bit to my liking
- Added some URL aliases
Verdict
There are a couple things that are still fairly clunky:
- The "Posts" page is just Fossil's "Timeline" page, except set to only view technotes. This is a bit ugly, since it exposes a bit more of the sausage-making than I'd like.
- Fossil supports CGI-based server extensions, and I can probably use that to create a custom "Posts" page that just lists the posts as such. That's a problem for tomorrow's me :)
- There's a lot of other bits and pieces that are visible but can't be used (unless you're me), like various page submenus having a bunch of buttons that don't work unless you're logged in. Part of this is because the permissions are a bit coarse-grained. At least it's (theoretically) possible to hide 'em with some theme finagling.
All in all, though, I'm happy with the move so far.
- ^ David Lynch's Dune rendition is the best sci-fi movie ever and I will die on this hill.