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
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.