Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git
# ########################################################################
#
# Copyright 2022 White Magic Software, Ltd.
#
# Creates a container image that can run ConTeXt to typeset documents.
#
# ########################################################################
FROM alpine:latest

LABEL org.opencontainers.image.description Configures a typesetting system.

ENV ENV="/etc/profile"
ENV PROFILE=/etc/profile

ENV INSTALL_DIR=/opt
ENV SOURCE_DIR=/root/source
ENV TARGET_DIR=/root/target
ENV IMAGES_DIR=/root/images
ENV THEMES_DIR=/root/themes
ENV CACHES_DIR=/root/caches
ENV FONTS_DIR=/usr/share/fonts/user
ENV DOWNLOAD_DIR=/root

ENV CONTEXT_HOME=$INSTALL_DIR/context
ENV CONTEXT_ARCH=linuxmusl-64

# ########################################################################
#
# Download all required dependencies
#
# ########################################################################
WORKDIR $DOWNLOAD_DIR

# Define font list to avoid duplication
ENV FONTS_LIST="andada-pro archivo-narrow arimo carlito courier-prime \
  inconsolata inter libre-baskerville libre-franklin niconne nunito \
  open-sans-emoji pt-mono pt-sans pt-serif roboto roboto-mono source-serif-4 \
  snickles tw-kai underwood"

# Download fonts
RUN mkdir -p "$FONTS_DIR" && \
  for font in $FONTS_LIST; do \
    wget "https://fonts.keenwrite.com/download/${font}.zip"; \
  done

# Typesetting software
ADD "http://lmtx.pragma-ade.nl/install-lmtx/context-${CONTEXT_ARCH}.zip" "context.zip"

# ########################################################################
#
# Install components, modules, configure system, remove unnecessary files
#
# ########################################################################
WORKDIR $CONTEXT_HOME

RUN \
  apk update && \
  apk add -t py3-cssselect && \
  apk add -t py3-lxml && \
  apk add -t py3-numpy && \
  apk --update --no-cache \
    add ca-certificates curl fontconfig rsync

RUN apk --update --no-cache add inkscape

RUN \
  mkdir -p \
    "$FONTS_DIR" \
    "$INSTALL_DIR" \
    "$TARGET_DIR" \
    "$SOURCE_DIR" \
    "$THEMES_DIR" \
    "$IMAGES_DIR" \
    "$CACHES_DIR" && \
  echo "export CONTEXT_HOME=\"$CONTEXT_HOME\"" >> $PROFILE && \
  echo "export PATH=\"\$PATH:\$CONTEXT_HOME/tex/texmf-$CONTEXT_ARCH/bin\"" >> $PROFILE && \
  echo "export OSFONTDIR=\"/usr/share/fonts//\"" >> $PROFILE && \
  echo "PS1='\\u@typesetter:\\w\\$ '" >> $PROFILE && \
  unzip -d $CONTEXT_HOME $DOWNLOAD_DIR/context.zip && \
  for font in $FONTS_LIST; do \
    unzip -j -o -d $FONTS_DIR "$DOWNLOAD_DIR/${font}.zip" '*.ttf' '*.otf'; \
  done && \
  fc-cache -f -v && \
  sh install.sh && \
  rm -rf \
    "modules" \
    "/var/cache" \
    "/usr/share/icons" \
    "/opt/context/tex/texmf-context/source" \
    $DOWNLOAD_DIR/*.zip \
    $CONTEXT_HOME/tex/texmf-modules/doc \
    $CONTEXT_HOME/tex/texmf-context/doc && \
  mkdir -p $CONTEXT_HOME/tex/texmf-fonts/tex/context/user && \
  ln -s $CONTEXT_HOME/tex/texmf-fonts/tex/context/user $HOME/.fonts && \
  source $PROFILE && \
  mtxrun --generate && \
  find \
    /usr/share/inkscape \
    -type f -not -iname \*.xml -exec rm {} \; && \
  find \
    $CONTEXT_HOME \
    -type f \
      \( -iname \*.pdf -o -iname \*.txt -o -iname \*.log \) \
    -exec rm {} \;

# ########################################################################
#
# Ensure login goes to the target directory. ConTeXt prefers to export to
# the current working directory.
#
# ########################################################################
WORKDIR $TARGET_DIR