LaTeX Escapism
Many of my side projects take the shape of over-engineered. They serve as a fun sandbox to go wild, put my mind on a treadmill, try new things, and take maximum control of the outcome. 🏰
This tends to mean every project, no matter how small, has GitHub Actions CI,
lint passes, prettier
-formatted READMEs, dependabot, a locked trunk branch
and PR-oriented merge workflow. There is always some sort of build system;
sometimes Vite, sometimes Bazel, sometimes Cargo, sometimes an
amalgamation of make
and docker
. 🏗️
My LaTeX Résumé
Nowhere is this energy more apparent than the repository that houses my résumé. 🙋
I built my LaTeX résumé from scratch. I did not use a template; I started with
an empty buffer in vim
. There are currently 102 lines of prelude before
\begin{document}
. The résumé uses the scrartcl
document class and content
entries within each \section*{}
are defined using custom environments. Early
versions of the source were built with pdfLaTeX, then later with XeLaTeX. The
current revision is built with LuaLaTeX. 📇
My résumé’s git respository has a build system. make all
invokes make
recursively in a Docker container to invoke latexmk
(which itself invokes
make
for some dynamic \inputA
includes). The PDFs and PNGs generated by this
build process are reproducible. 🪞
The Dockerfile
installs a curated and minimal set of packages required to pull
in a lightweight TeX install. Line 40 regenerates the font cache as part of the
image baking process to speed up the PDF rendering step. 📚
# pregenerate font caches
RUN set -eux; \
luatools --generate; \
mtxrun --script fonts --reload; \
luaotfload-tool --update
The sources run through several layers of linters: check-style
runs on every
commit; custom scripts reject commits which contain non-ASCII characters
(preferring the LaTeX equivalent macros); hadolint
ensures the Dockerfile
follows all of the best practices (except for DL3008
, I don’t have the
patience to pin apt
package versions). ⏳
@dependabot keeps Docker base images current with automatic dependency upgrade PRs. GitHub Actions CI ensures the TeX source builds without warnings on every commit. 🪜
I use GitHub releases with PDF artifacts to track which things end up getting pushed to the web. Releases are tagged by date. 🏷️
The most recent hurdle I overcame was how to create blue underlined hyperlinks. The sources are easy to work with. 😅
why tho
When I work on a side project, I am choosing to enter a box. Being able to exercise this level of control lets me indulge into some escapism, exploration, and for the sake of it engineering. 📦