Youwen Wu
3cc1b22abb
Flake lock file updates: • Updated input 'flake-parts': 'github:hercules-ci/flake-parts/3d04084d54bedc3d6b8b736c70ef449225c361b1?narHash=sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0%3D' (2024-10-01) → 'github:hercules-ci/flake-parts/506278e768c2a08bec68eb62932193e341f55c90?narHash=sha256-hgmguH29K2fvs9szpq2r3pz2/8cJd2LPS%2Bb4tfNFCwE%3D' (2024-11-01) • Updated input 'flake-parts/nixpkgs-lib': ' |
||
---|---|---|
2024 | ||
.gitignore | ||
LICENSE | ||
README.md |
alexandria, an archive
of all of my digitized work and notes. Want to steal my stuff? This is where you do it.
Please note, all of my work is licensed under CC-BY-NC-ND
4.0 (that's the
Creative Commons Attribution-Noncommercial-Noderivatives 4.0 license), with one
exception. The Nix source code that helps provide the document compilation
infrastructure is free and unencumbered software released into the public
domain. This includes all of the files in ./2024/nix
as well as any files
ending in .nix
generally. See more details in the source code
README.
I (and the license) do not grant permission for my work being passed off as someone else's (perhaps for the purpose of plagiarism). Obviously this does not extend to the Nix source code, which is in the public domain.
Typst compilation infrastructure
This repository contains a sophisticated system for reproducibly compiling Typst documents using Nix, the purely functional package manager. Typst is a modern typesetting system aiming to replace the venerable LaTeX system.
Within the 2024 directory, an ongoing experiment is taking place to
create a monorepo organization structure for a large amount of Typst documents.
Some custom Nix infrastructure has been created to provide a similar package
interface to the familiar nixpkgs
package repository. Instead of building
programs, however, it builds documents. Review the flake
for more information.
Since the flake in [2024] provides a package set, you can use the nix search
command on it to discover documents just like nixpkgs
. Try:
nix search "git+https://code.youwen.dev/youwen5/alexandria?dir=2024" digression
You can compile any document in this repository yourself very easily! Simply run:
nix build 'git+https://code.youwen.dev/youwen5/alexandria?dir=2024#digression-linear-algebra'
The builds are managed by the amazing typix project. It helps provide a hermetically sealed build environment, which means that all dependencies of the documents are specified, including fonts, commonly forgotten due to being installed systemwide. Also, the build process clones down a copy of the entire Typst package repository, version locked in flake.lock. This means that packages are also guaranteed to be reproducible and available.
Compilation creates a result
that points to the compiled PDF in the Nix
store. Currently, the file is not marked as a PDF with a .pdf
file extension,
but one should be able to easily cp
the file from the Nix store into another
directory with a proper file name. Work is ongoing to make this as smooth as
possible.
Goal of the experiment
The end goal is to produce an easy-to-use infrastructure for creating personal repositories of Typst documents. LaTeX documents could feasibly be supported as well in the repository with some refactoring, but this is not a priority as the I am not currently using LaTeX.
All of the work is sectioned into a 2024
directory for two reasons.
Firstly, since all of the documents in the repository depend on the nixpkgs
and typst
specified in the central flake.nix
, breaking changes may require
refactoring and maintenance of old documents. This is how nixpkgs
works, but
these repositories host documents, not software. Thus, I have opted to
organize the tree in such way that each year should be its own standalone
repository. This means that a year's worth of documents can be frozen in time
at the end to ensure that all of the existing documents will be able to
reproducible compile in the future without any maintenance, as the nixpkgs
and typst
versions will be frozen in time.
Secondly, this will encourage further development each year to incrementally improve the infrastructure.
Eventually, if the experiment is successful, I may decide to create a standardized library or repository template for people to use.