diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6e44e7a37cfa9d2f18f55ff778af2920b5defb33
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,7 @@
+FROM registry.gitlab.com/lukenaylor/latex/sage-tex-chroma-image:latest
+
+# Add the tree-sitter parser for Rust
+RUN git clone --depth=1 --branch v0.20.4 https://github.com/tree-sitter/tree-sitter-rust.git /root/src/tree-sitter-rust
+# Install the pseudowalls sage package
+RUN sage -pip install pseudowalls --extra-index-url https://gitlab.com/api/v4/projects/43962374/packages/pypi/simple
+
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 2b5fd1445d30d05aeacf5ff9bf0ed450feec4588..d716dae54c0486e31a9e26dcc2d78066d77c5bdc 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,8 +1,7 @@
 // .devcontainer/devcontainer.json
 {
-    "name": "LaTeX&SageTex Devcontainer",
-    "image": "registry.gitlab.com/lukenaylor/latex/sagetex-image:latest",
-    "postCreateCommand": "sage -pip install pseudowalls --extra-index-url https://gitlab.com/api/v4/projects/43962374/packages/pypi/simple",
+    "name": "LaTeX&SageTex&Chromacode Devcontainer",
+    "dockerFile": "./Dockerfile",
     "customizations": {
         "vscode": {
             "settings": {
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 10ef63cc1f749c8b22163596d3e8a3f88e19589e..7e6c76bf408668b59bdd0f86880047f955a018d4 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,13 +2,15 @@ variables:
   GIT_SUBMODULE_STRATEGY: normal
 
 build:
-  image: registry.gitlab.com/lukenaylor/latex/sagetex-image:latest
+  # image: registry.gitlab.com/lukenaylor/latex/sagetex-image:latest
+  image:
+    dockerfile: .devcontainer/Dockerfile
   tags: ["x64"]
   script:
     - echo $SHELL
     - source /root/.bashrc
-    - sage -pip install "pseudowalls==0.0.3" --extra-index-url https://gitlab.com/api/v4/projects/43962374/packages/pypi/simple
-    - make main.pdf || echo make failed
+    - make pretex
+    - latexmk -use-make
   artifacts:
     paths:
       - main.pdf
diff --git a/Makefile b/Makefile
index b64f958b4d07ad53d304cd1c37e965a0fcdb0118..9dc0523b34d5a1afa7912d94cfda0612668a14c0 100644
--- a/Makefile
+++ b/Makefile
@@ -5,13 +5,15 @@ MAINTEXFILE = main.tex
 TEXFILES = ${MAINTEXFILE}
 NOTEBOOKBASENAMES = plots_and_expressions examples characteristic_curves rank_zero_case other_P_choice
 
-main.pdf: ${TEXFILES}  main.sagetex.sout.tmp
+SAGETEXARTIFACT=main.sagetex.sout
+
+main.pdf: ${TEXFILES} ${SAGETEXARTIFACT}
 	latexmk
 
-sage_artifacts: main.sagetex.sout.tmp
+sage_artifacts: ${SAGETEXARTIFACT}
 
 SAGETEXSCRIPT = main.sagetex.sage
-main.sagetex.sout.tmp: ${SAGETEXSCRIPT} notebook_py_libs
+${SAGETEXARTIFACT}: ${SAGETEXSCRIPT} notebook_py_libs
 	PYTHONPATH=./sagetexscripts/ sage ${SAGETEXSCRIPT}
 
 ${SAGETEXSCRIPT}: ${TEXFILES}
@@ -32,8 +34,33 @@ $(foreach _base, $(NOTEBOOKBASENAMES), $(eval $(call NOTEBOOK_TO_LIB_RULE, $(_ba
 
 notebook_py_libs: $(addsuffix .py, $(NOTEBOOKBASENAMES))	
 
+# TEX FILES FROM RUST
+
+define RUST_TO_TEX_RULE
+$(1).tex: $(1).rs
+	chromacode -r -i $(1).rs -o $(1).tex
+endef
+
+RUSTSNIPPETSBASE=tilt.rs/src/tilt_stability/considered_b_for_beta tilt.rs/src/tilt_stability/find_all
+RUSTBASENAMES=$(basename $(wildcard tilt.rs/src/**/*.rs)) ${RUSTSNIPPETSBASE}
+
+$(foreach _base, $(RUSTBASENAMES), $(eval $(call RUST_TO_TEX_RULE, $(_base))))
+
+rust_tex: $(addsuffix .tex, $(RUSTBASENAMES))
+
+# specific snippets of rust
+#
+tilt.rs/src/tilt_stability/considered_b_for_beta.rs: tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.rs
+	sed -n -e '24,36p' $^ > $@
+
+tilt.rs/src/tilt_stability/find_all.rs: tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.rs
+	sed -n -e '79,99p' $^ > $@
+
 # MISCELANEOUS
 
+# Stuff that can be built before ever running latex:
+pretex: rust_tex notebook_py_libs
+
 .PHONY: clean nosage noappendix
 clean:
 	rm -rf **/__pycache__
@@ -43,5 +70,5 @@ clean:
 nosage:
 	latexmk
 
-noappendix: ${TEXFILES}  main.sagetex.sout.tmp
+noappendix: ${TEXFILES} ${SAGETEXARTIFACT}
 	latexmk
diff --git a/content.tex b/content.tex
index fd3925d7037d408115bfdee192e9b8340c199695..5d2c559adfe66eaf03a4b711eb1f07eae4ee8edc 100644
--- a/content.tex
+++ b/content.tex
@@ -1896,18 +1896,9 @@ $v$ has positive rank, that it satisfies $\Delta(v) \geq 0$, and that
 $\beta_{-}(v)$ is rational.
 
 \lstinputlisting[
-	escapeinside={<@}{@>},
-	captionpos=b,
-	frame=single,
-	numbers=left,
-	numberstyle={\scriptsize\ttfamily\color{black!60}},
-	basicstyle={\linespread{0.9}\scriptsize\ttfamily},
-	aboveskip=5mm,
-	firstline=79,
-	lastline=99,
 	caption={\raggedleft\texttt{tilt_stability::left_pseudo_semistabilizers\\::considered_b_for_beta}},
 	label={fig:code:consideredb}
-]{tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.tex}
+]{tilt.rs/src/tilt_stability/considered_b_for_beta.tex}
 
 Take $\beta_{-}(v)=\frac{a_v}{n}$ in simplest terms.
 Iterate over $q = \frac{b}{n} \in [0,\chern_1^{\beta_{-}}(v)]\cap\frac{1}{n}\ZZ$.
@@ -1915,18 +1906,9 @@ The code used to generate the corresponding values for $b$ is shown in figure
 \ref{fig:code:consideredb}.
 
 \lstinputlisting[
-	escapeinside={<@}{@>},
-	captionpos=b,
-	frame=single,
-	numbers=left,
-	numberstyle={\scriptsize\ttfamily\color{black!60}},
-	basicstyle={\linespread{0.9}\scriptsize\ttfamily},
-	aboveskip=5mm,
-	firstline=79,
-	lastline=99,
 	caption={\raggedleft\texttt{tilt_stability::left_pseudo_semistabilizers\\::find_all}},
 	label={fig:code:reducingtoeachb}
-]{tilt.rs/src/tilt_stability/left_pseudo_semistabilizers.tex}
+]{tilt.rs/src/tilt_stability/find_all.tex}
 
 We can therefore reduce the problem of finding solutions to the problem to
 finding the solutions $u$ with each fixed possible $\chern_1^\beta(u)$
diff --git a/main.tex b/main.tex
index 00b82f303796b7a5d7bb28b8aedefaf1d2394428..8e3396e591fd45a8d58c11b3c7b2db4049edd83a 100644
--- a/main.tex
+++ b/main.tex
@@ -4,6 +4,24 @@
 \input{newcommands.tex}
 \input{theoremstyles.tex}
 \input{newunicodes.tex}
+\lstset{
+	escapeinside={<@}{@>},
+  inputencoding=utf8,
+  extendedchars=true,
+	frame=single,
+	basicstyle={\linespread{0.9}\scriptsize\ttfamily},
+  showstringspaces=false,
+  showspaces=false,
+  numbers=left,
+	numberstyle={\scriptsize\ttfamily\color{black!60}},
+  numbersep=9pt,
+	aboveskip=5mm,
+  tabsize=2,
+  breaklines=true,
+  showtabs=false,
+  captionpos=b,
+  literate={β}{{\beta}}1 {μ}{{\mu}}1 {ü}{{\"u}}1 {°}{\dg}1 {ᵇ}{{b}}1 {ₙ}{{n}}1
+}
 
 \usepackage{sagetex}
 
@@ -39,4 +57,4 @@ Practical Methods for Narrowing Down Possible Walls}
 \newpage
 \printbibliography
 
-\end{document}
\ No newline at end of file
+\end{document}
diff --git a/newunicodes.tex b/newunicodes.tex
index 55c3f85f63cc21663d0b8a64c349e11f306b66b7..c2fbf4fe804c06413eed6cf9e6d4d2c0e8538545 100644
--- a/newunicodes.tex
+++ b/newunicodes.tex
@@ -1,7 +1,7 @@
 \newunicodechar{ᵇ}{b}
 \newunicodechar{â‚™}{n}
-\newunicodechar{∈}{\in}
-\newunicodechar{𝜇}{\mu}
-\newunicodechar{â‹…}{\cdot}
+\newunicodechar{∈}{$\in$}
+\newunicodechar{𝜇}{$\mu$}
+\newunicodechar{â‹…}{$\cdot$}
 \newunicodechar{â„š}{$\mathbb{Q}$}
 \newunicodechar{ℤ}{{$\mathbb{Z}$}}
diff --git a/packages.tex b/packages.tex
index 4f8de64c788a98f708dbce2d4de208cb9c8d92b4..825428376419319dbcf86e23a3615b854d926b67 100644
--- a/packages.tex
+++ b/packages.tex
@@ -9,7 +9,7 @@
 \usepackage{mathtools}
 \usepackage[]{breqn}
 \usepackage[nomap]{FiraMono}
-\usepackage[cache=false]{minted}
 \usepackage{newunicodechar}
 \usepackage{multicol}
+\usepackage{listingsutf8}