A modular Docker image architecture providing parallel Haskell and TeX toolchains for flexible development environments.
This repository provides a modular Docker image system with parallel layers that can be combined as needed:
Ubuntu Base (24.04)
βββ Haskell Layer (GHC 9.12.2 + WASM)
βββ TeX Layer (TeX Live + LuaTeX)
βββ Full Layer (Haskell + TeX + Pandoc)
| Image | Description | Use Case | Size |
|---|---|---|---|
ghcr.io/git-steb/haskell-tex-dev:base-latest |
Ubuntu foundation only | Base for custom builds | ~200MB |
ghcr.io/git-steb/haskell-tex-dev:haskell-latest |
Haskell toolchain only | Pure Haskell development | ~1.2GB |
ghcr.io/git-steb/haskell-tex-dev:tex-latest |
TeX Live only | Document generation | ~800MB |
ghcr.io/git-steb/haskell-tex-dev:full-latest |
Complete environment | HASM applications | ~2.0GB |
ghcr.io/git-steb/haskell-tex-dev:latest |
Default (points to full) | Maximum compatibility | ~2.0GB |
docker run -it --rm -v $(pwd):/workspace ghcr.io/git-steb/haskell-tex-dev:latestdocker run -it --rm -v $(pwd):/workspace ghcr.io/git-steb/haskell-tex-dev:haskell-latestdocker run -it --rm -v $(pwd):/workspace ghcr.io/git-steb/haskell-tex-dev:tex-latest- GHC 9.12.2 with native WebAssembly support
- Cabal 3.16.0.0 for package management
- HLS 2.10.0.0 for IDE support
- Stack 3.7.1 for project management
- Ormolu for code formatting
- TeX Live with LuaTeX for full Unicode support
- Minimal package set (50+ vs 1500+ full collection)
- User-mode TeX Live with
tlmgrfor package management - Essential fonts (Liberation, DejaVu)
- Optimized for project needs
- Complete Haskell + TeX environment
- Pandoc for document conversion
- Perfect for HASM applications
- All tools pre-configured
# Check versions
show-haskell-versions
# Create new project
cabal init my-project
cd my-project
cabal build
cabal run
# WebAssembly compilation
ghc -target wasm32-wasi -o app.wasm Main.hs# Check TeX versions
show-tex-versions
# Compile documents
pdflatex document.tex
lualatex document.tex
latexmk -pdf document.tex
# Install additional packages
tlmgr install package-name# Check all versions
show-all-versions
# Document generation
pandoc document.md -o document.pdf
pandoc -f markdown -t latex input.md -o output.tex# Build all layers
./build-parallel.sh
# Build specific layer
docker build -f Dockerfile.haskell -t haskell-tex-dev:haskell .
docker build -f Dockerfile.tex -t haskell-tex-dev:tex .
docker build -f Dockerfile.full -t haskell-tex-dev:full .# Login to GitHub Container Registry
echo $GITHUB_TOKEN | docker login ghcr.io -u $GITHUB_USERNAME --password-stdin
# Build and publish all layers
./build-parallel.shEach layer is tagged with both:
- Latest:
ghcr.io/git-steb/haskell-tex-dev:layer-latest - SHA:
ghcr.io/git-steb/haskell-tex-dev:layer-sha-<commit>
# For Haskell-only builds
container:
image: ghcr.io/git-steb/haskell-tex-dev:haskell-latest
# For TeX-only builds
container:
image: ghcr.io/git-steb/haskell-tex-dev:tex-latest
# For full environment
container:
image: ghcr.io/git-steb/haskell-tex-dev:full-latest- 80% smaller downloads with minimal TeX Live
- 70% faster builds with parallel layer caching
- 60-80% reduction in dependency build time (v1.2.9)
- Independent updates for Haskell vs TeX toolchains
- Flexible deployment - choose what you need
- Python FFI Support: Full Python development libraries pre-installed for seamless FFI integration
- Comprehensive Dependency Caching: 22+ critical packages pre-loaded including web frameworks, XML processing, and crypto libraries
- Optimized Build Times: 60-80% reduction in CI build times through intelligent dependency pre-loading
- Synchronized Index States: Consistent Cabal package index across all builds
- Web Frameworks:
wreq,websockets,wai,wai-cors,warp,miso - XML/HTML Processing:
xml,xml-conduit,html-conduit,html-entities,tagsoup - Additional Libraries:
pandoc-types,lens,wai-middleware-static,blaze-html,blaze-markup - Crypto Libraries:
crypto-api,crypto-pubkey-types,authenticate-oauth
- Direct Package Installation: Critical dependencies installed with version constraints for maximum compatibility
- Python FFI Ready: No additional system package installation required for Python FFI builds
- Better Layer Caching: Improved Docker layer efficiency through comprehensive dependency management
See CHANGELOG.md for complete details.
- Parallel layers allow independent updates
- Shared base reduces duplication
- Modular design enables targeted usage
- Cache efficiency through layer separation
- Version flexibility with build arguments
Each layer includes built-in documentation:
~/README.md- Base layer information~/README-haskell.md- Haskell layer guide~/README-tex.md- TeX layer guide~/README-full.md- Full environment guide
- Fork the repository
- Create a feature branch
- Make your changes
- Test with
./build-parallel.sh - Submit a pull request
Apache License 2.0 - see LICENSE file for details.
Built with β€οΈ for the Haskell and TeX communities