Sr.ht ex machina
A description of how this site is built.tl;dr: Cryogen + builds.sr.ht + gh pages
A couple days back, I had the itch of getting a personal website. Mainly to stop maintaining a CV in Latex and have an easy reference to it.
There were a couple requirements I had in mind, both from the toolset and maintainability perspectives.
The site needed to be/have:
- Statically generated. We just need to download some HTML
- Markdown editing. Because I write MD all day
- Written in Clojure. Relevant to the next point
- Tweakable
The maintainability aspect had a simple goal: I don't want to fiddle with deployments. If my house catches fire I want to still be able to write about it. At the same time, i don't want to maintain both the source and the generated website. Ideally, my workflow consists of:
- Setup. ONCE. Never come back here.
- Write something and verify nothing breaks on localhost
- Commit and Push the source
- ??
- Profit
Static site generator
I soon figured Cryogen was an ideal candidate meeting all the requirements. Besides setting up a custom markdown command to get tables compile the same way org-mode writes them, the experience was pretty much out-of-the-box.
I took some time after getting the first version of the post out to get rid of a couple things. These have nothing to do with Cryogen itself but with its theme template.
- Goodbye Google (fonts). Not a fan of tracking.
Helveticais a nice default - The only script running is
highlightjsin order to spice up code blocks - All assets were downloaded and are served by the site
These changes prevent the browser from reaching out elsewhere when loading the page.
Automating deployments: remy.rojas.cz
The generated page is hosted on Github thanks to pages using a custom domain. The solution is free[TM] and too simple to resist. The site's source is instead hosted on Sourcehut and uses its Builds deployment platform.
The build script pulls both projects, builds the sources, copy/pastes the resulting page, and pushes to Github.
image: archlinux
packages:
- clojure
- leiningen
- pandoc
sources:
- git@git.sr.ht:~popo/blog
- git@github.com:remyrd/remyrd.github.io
secrets:
- dd63135f-599a-40f2-aad1-2a4e1fbc5d2c
tasks:
- setup: |
git config --global user.name "Remy Rojas"
git config --global user.email "remy@rojas.cz"
- build: |
cd blog
lein run
- update-github: |
ssh-keyscan github.com >> ~/.ssh/known_hosts
cd remyrd.github.io
git rm -rf .
cp -r ../blog/public/* .
git add *
git commit -am "job $JOB_ID"
git pushAfter registering an ssh key in github and letting builds.sr.ht use it through secrets, we can effectively forget about ever touching Github again. In 25 lines of yaml.
Note to self: would be interesting to slurp the actual .build.yml file into the content at compile time in case it becomes outdated.