https://github.com/the1lab/1lab
A formalised, cross-linked reference resource for mathematics done in Homotopy Type Theory
https://github.com/the1lab/1lab
agda homotopy-type-theory
Last synced: about 1 year ago
JSON representation
A formalised, cross-linked reference resource for mathematics done in Homotopy Type Theory
- Host: GitHub
- URL: https://github.com/the1lab/1lab
- Owner: the1lab
- License: agpl-3.0
- Created: 2021-12-05T20:38:45.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2024-07-19T20:23:22.000Z (almost 2 years ago)
- Last Synced: 2024-07-20T00:53:34.432Z (almost 2 years ago)
- Topics: agda, homotopy-type-theory
- Language: Agda
- Homepage: https://1lab.dev
- Size: 6.11 MB
- Stars: 319
- Watchers: 12
- Forks: 61
- Open Issues: 37
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Citation: CITATION.bib
- Support: support/check.sh
Awesome Lists containing this project
README
[](https://discord.gg/Zp2e8hYsuX)
[](https://github.com/the1lab/1lab/actions/workflows/build.yml)
# [1Lab](https://1lab.dev)
A formalised, cross-linked reference resource for mathematics done in
Homotopy Type Theory. Unlike the HoTT book, the 1lab is not a “linear”
resource: Concepts are presented as a directed graph, with links
indicating dependencies.
# Building
Building the 1Lab is a rather complicated task, which has led to a lot
of homebrew infrastructure being developed for it. We build against a
specific build of Agda (see the `rev` field in
`support/nix/dep/Agda/github.json`), and there are also quite a few
external dependencies (e.g. pdftocairo, katex). The recommended way of
building the 1Lab is using Nix.
As a quick point of reference, `nix-build` will type-check and compile
the entire thing, and copy the necessary assets (TeX Gyre Pagella and
KaTeX's CSS and fonts) to the right locations. The result will be linked
as `./result`, which can then be used to serve a website:
```bash
$ nix-build
$ python -m http.server --directory result
```
Note that using Nix to build the website takes around ~20-30 minutes,
since it will type-check the entire codebase from scratch every time.
For interactive development, `nix-shell` will give you a shell with
everything you need to hack on the 1Lab, including Agda and the
pre-built Shakefile as `1lab-shake`:
```bash
$ 1lab-shake all -j
```
Since `nix-shell` will load the derivation steps as environment
variables, you can use something like this to copy the static assets
into place:
```bash
$ eval "${installPhase}"
$ python -m http.server --directory _build/site
```
To hack on a file continuously, you can use "watch mode", which will
attempt to only check and build the changed file.
```
$ 1lab-shake all -w
```
Additionally, since the validity of the Agda code is generally upheld by
`agda-mode`, you can use `--skip-agda` to only build the prose. Note
that this will disable checking the integrity of link targets, the
translation of `` `ref`{.Agda} `` spans, and the code blocks will be
right ugly.
Our build tools are routinely built for x86_64-linux and uploaded to
Cachix. If you have the Cachix CLI installed, simply run `cachix use
1lab`. Otherwise, add the following to your Nix configuration:
```
substituters = https://1lab.cachix.org
trusted-public-keys = 1lab.cachix.org-1:eYjd9F9RfibulS4OSFBYeaTMxWojPYLyMqgJHDvG1fs=
```
## Directly
If you're feeling brave, you can try to replicate one of the build
environments above. You will need:
- The `cabal-install` package manager. Using `stack` is no longer supported.
- A working LaTeX installation (TeXLive, etc) with the packages
`tikz-cd` (depends on `pgf`), `mathpazo`, `xcolor`, `preview`, and
`standalone` (depends on `varwidth` and `xkeyval`);
- [Poppler] (for `pdftocairo`);
- [`libsass`] (for `sassc`);
- [Node] + required Node modules. Run `npm ci` to install those.
[Poppler]: https://poppler.freedesktop.org/
[Node]: https://nodejs.org/en/
[`libsass`]: https://github.com/sass/sassc
You can then use cabal-install to build and run our specific version of
Agda and our Shakefile:
```bash
$ cabal install Agda
# This will take quite a while!
$ cabal v2-run shake -- -j --skip-agda
# the double dash separates cabal-install's arguments from our
# shakefile's.
```