A fully reproducible Markdown presentation environment
I often present technical topics at work, but I've never liked PowerPoint, Google Slides, and similar tools. As a Nix enthusiast and a Kubernetes/DevOps lead, it always feels clumsy to rely on WYSIWYG editors. It's not code, it’s not reproducible: it’s a liability.
I found Marp a few years back and immediately adopted it to write and generate my slides. But I found myself constantly copying assets, snippets, and themes back and forth between presentations. And ultimately, without a pinned toolchain, it still wasn't truly reproducible across machines and time.
To solve this once and for all, I put together Marp Deck Directory during my time off. It's a public template that combines Marp with the absolute guarantees of Nix flakes to store all your slide decks/assets and guarantee you can generate them identically 5 years from now.
GitHub Repo: nicolas-goudry/marp-deck-directory
Live Demo (built via GH Actions): nicolas-goudry.github.io/marp-deck-directory
A few Nix-specific technical details of how it works under the hood:
- Dynamic Discovery & Path Rewriting: A single core derivation discovers decks under
slides/and builds HTML, PDFs, and PNG covers. It handles path rewriting dynamically so you can seamlessly mix global assets (/assets) and deck-specific local assets without breaking local dev previews. - Offline Emojis: Because Nix builds run without network access, I built a small derivation to vendor Twemoji assets locally during the build step.
- The PDF Sandbox Hack: Normal Chromium sandboxing fails inside Nix builds. I created a wrapper around the Brave browser to pass
--no-sandbox. Why Brave? Because standard Chromium isn't natively available onaarch64-darwin, and headless Firefox currently struggles on Darwin (plus it renders Marp differently than Chromium). Brave was the safest cross-platform bet.
Oh, one last thing! The template comes bundled with Catppuccin themes for Marp, which I built specifically for this project and is currently in the process of becoming an official Catppuccin port.
I'd love to get feedback from anyone else doing "presentations as code". Let me know what you think!