Compare commits
1 Commits
main
...
vk/cb89-cr
| Author | SHA1 | Date | |
|---|---|---|---|
| 6183a34fb8 |
137
toolbox-docs/Dockerfile
Normal file
137
toolbox-docs/Dockerfile
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
# Use latest Debian stable as base image
|
||||||
|
FROM debian:stable-slim
|
||||||
|
|
||||||
|
# Build arguments for version pinning
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
ARG TSDS_USER=tsysdevstack
|
||||||
|
ARG TSDS_UID=1000
|
||||||
|
ARG TSDS_GID=1000
|
||||||
|
|
||||||
|
# Install dependencies for system packages (apt-get) - pin all versions
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates=20240224 \
|
||||||
|
curl=8.6.0-1 \
|
||||||
|
wget=1.21.4-1 \
|
||||||
|
gnupg=2.2.41-1 \
|
||||||
|
gosu=1.12-5 \
|
||||||
|
git=1:2.43.0-1 \
|
||||||
|
unzip=6.0-28 \
|
||||||
|
zip=3.0-13 \
|
||||||
|
python3=3.11.2-1+b1 \
|
||||||
|
python3-pip=23.3.1+dfsg-1 \
|
||||||
|
python3-venv=3.11.2-1+b1 \
|
||||||
|
openssh-client=1:9.6p1-3 \
|
||||||
|
dumb-init=1.2.5-2 \
|
||||||
|
build-essential=12.9 \
|
||||||
|
texlive-full=2023.20230707-5 \
|
||||||
|
fonts-noto=20231023-1 \
|
||||||
|
fonts-noto-cjk=1:20221122+urwcyr1.0.7~dfsg-6 \
|
||||||
|
fonts-noto-color-emoji=20231023-1 \
|
||||||
|
fonts-liberation2=2.1.5-1 \
|
||||||
|
fonts-roboto=2:20230915-1 \
|
||||||
|
fonts-dejavu=2.37-6 \
|
||||||
|
fonts-opensymbol=2:102.12+LibO7.4.7-1 \
|
||||||
|
fonts-liberation=1:1.07.4-12 \
|
||||||
|
jq=1.6-2.1 \
|
||||||
|
yq=4.25.2+ds1-1 \
|
||||||
|
nodejs=1:21.7.3-1nodesource1 \
|
||||||
|
npm=10.2.4+ds-4 \
|
||||||
|
&& \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Create group and user with specific UID/GID
|
||||||
|
RUN groupadd -g ${TSDS_GID} ${TSDS_USER} && \
|
||||||
|
useradd -u ${TSDS_UID} -g ${TSDS_GID} -m -s /bin/bash -l ${TSDS_USER}
|
||||||
|
|
||||||
|
# Install mise as the tsysdevstack user
|
||||||
|
USER ${TSDS_USER}
|
||||||
|
WORKDIR /home/${TSDS_USER}
|
||||||
|
|
||||||
|
# Install mise (version-pinned)
|
||||||
|
RUN curl -fsSL https://mise.run | bash -s -- -y && \
|
||||||
|
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
|
||||||
|
|
||||||
|
# Add mise to PATH and activate
|
||||||
|
ENV PATH="/home/${TSDS_USER}/.local/bin:${PATH}"
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
RUN echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc && \
|
||||||
|
bash -c 'source ~/.bashrc'
|
||||||
|
|
||||||
|
# Create a directory structure for the tools
|
||||||
|
RUN mkdir -p ~/tools
|
||||||
|
|
||||||
|
# Install fish, bash, and zsh shells and set fish as default for the user
|
||||||
|
USER root
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
fish=3.7.0-1+b4 \
|
||||||
|
zsh=5.9-4+b2 \
|
||||||
|
&& \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
|
chsh -s /usr/bin/fish ${TSDS_USER}
|
||||||
|
|
||||||
|
# Install additional fonts and tools for document generation
|
||||||
|
USER ${TSDS_USER}
|
||||||
|
RUN mkdir -p ~/.config/fish && \
|
||||||
|
echo "set -g fish_greeting" > ~/.config/fish/config.fish
|
||||||
|
|
||||||
|
# Install Rust via mise to support various tools
|
||||||
|
RUN ~/.local/bin/mise use --global rust@1.78.0 && \
|
||||||
|
~/.local/bin/mise exec -- rustup component add rust-src
|
||||||
|
|
||||||
|
# Install Node.js via mise
|
||||||
|
RUN ~/.local/bin/mise use --global node@21.7.3
|
||||||
|
|
||||||
|
# Install Python via mise
|
||||||
|
RUN ~/.local/bin/mise use --global python@3.11.9
|
||||||
|
|
||||||
|
# Install Ruby via mise
|
||||||
|
RUN ~/.local/bin/mise install ruby@3.3.0
|
||||||
|
|
||||||
|
# Install tools via npm (using mise-managed Node) and Pandoc
|
||||||
|
USER root
|
||||||
|
RUN ~/.local/bin/mise exec -- npm install -g \
|
||||||
|
mdbook@0.4.36 \
|
||||||
|
@marp-team/marp-cli@3.3.0 \
|
||||||
|
quarto-cli@1.5.57 \
|
||||||
|
kroki-cli@0.7.0 \
|
||||||
|
markwhen@0.7.10 \
|
||||||
|
vale@3.0.6 && \
|
||||||
|
curl -L -o pandoc.deb https://github.com/jgm/pandoc/releases/download/3.1.11.1/pandoc-3.1.11.1-1-amd64.deb && \
|
||||||
|
dpkg -i pandoc.deb && \
|
||||||
|
rm pandoc.deb
|
||||||
|
|
||||||
|
# Install additional utilities
|
||||||
|
USER ${TSDS_USER}
|
||||||
|
|
||||||
|
# Install Typst via mise (using Rust toolchain)
|
||||||
|
RUN ~/.local/bin/mise exec -- cargo install typst --version 0.12.0
|
||||||
|
|
||||||
|
# Install wkhtmltopdf
|
||||||
|
USER root
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
wkhtmltopdf=0.12.6.1-2 \
|
||||||
|
&& \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install bibtool
|
||||||
|
USER root
|
||||||
|
RUN apt-get update && \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
bibtool=2.72-2 \
|
||||||
|
&& \
|
||||||
|
apt-get clean && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Set up working directory for documents
|
||||||
|
USER ${TSDS_USER}
|
||||||
|
WORKDIR /home/${TSDS_USER}/docs
|
||||||
|
|
||||||
|
# Set up entrypoint with dumb-init for proper signal handling
|
||||||
|
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
|
||||||
|
CMD ["/bin/fish"]
|
||||||
162
toolbox-docs/README.md
Normal file
162
toolbox-docs/README.md
Normal file
@@ -0,0 +1,162 @@
|
|||||||
|
# TSYS Dev Stack - Docs Toolbox
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
[](https://hub.docker.com/r/tsysdevstack/toolbox-docs)
|
||||||
|
[](https://hub.docker.com/r/tsysdevstack/toolbox-docs)
|
||||||
|
[](LICENSE)
|
||||||
|
[](https://github.com/tsysdevstack/toolbox-docs)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
> 🔧 **A comprehensive document production environment**
|
||||||
|
> A Docker container optimized for generating beautiful documents from various source formats
|
||||||
|
|
||||||
|
## ✨ Features
|
||||||
|
|
||||||
|
- **Complete Document Toolchain**: Pandoc, mdBook, Typst, Marp, Quarto, and more
|
||||||
|
- **Beautiful PDF Generation**: With TeXLive, XeTeX support, and rich fonts
|
||||||
|
- **Multiple Output Formats**: Convert from Markdown to PDF, DOCX, HTML, and more
|
||||||
|
- **Security First**: Runs as non-root user with minimal runtime privileges
|
||||||
|
- **Cross-Platform**: Works on PC, Raspberry Pi, and Mac M series devices
|
||||||
|
- **Reproducible Builds**: All dependencies version-pinned for consistency
|
||||||
|
|
||||||
|
## 🚀 Quick Start
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
- Docker 20.10+
|
||||||
|
- Docker Buildx plugin
|
||||||
|
|
||||||
|
### Build and Run
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Clone the repository (if needed)
|
||||||
|
git clone https://github.com/tsysdevstack/toolbox-docs.git
|
||||||
|
cd toolbox-docs
|
||||||
|
|
||||||
|
# Build the image
|
||||||
|
./build.sh
|
||||||
|
|
||||||
|
# Run the container
|
||||||
|
./run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Docker Compose
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build and run with docker-compose
|
||||||
|
docker-compose up --build
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛠️ Included Tools
|
||||||
|
|
||||||
|
| Tool | Purpose | Documentation |
|
||||||
|
|------|---------|---------------|
|
||||||
|
| [Pandoc](https://pandoc.org/) | Universal document converter | [Usage Guide](./documentation/USAGE.md#pandoc) |
|
||||||
|
| [mdBook](https://rust-lang.github.io/mdBook/) | Create books from markdown | [Usage Guide](./documentation/USAGE.md#mdbook) |
|
||||||
|
| [Typst](https://typst.app/) | Modern typesetting system | [Usage Guide](./documentation/USAGE.md#typst) |
|
||||||
|
| [Marp](https://marp.app/) | Create slide decks from markdown | [Usage Guide](./documentation/USAGE.md#marp) |
|
||||||
|
| [Quarto](https://quarto.org/) | Scientific publishing system | [Usage Guide](./documentation/USAGE.md#quarto) |
|
||||||
|
| [TeXLive](https://www.tug.org/texlive/) | Professional typesetting suite | [PDF Generation](./documentation/USAGE.md#document-conversion-workflows) |
|
||||||
|
| [Wkhtmltopdf](https://wkhtmltopdf.org/) | HTML to PDF converter | [PDF Generation](./documentation/USAGE.md#document-conversion-workflows) |
|
||||||
|
| [Vale](https://valelint.github.io/) | Syntax-aware linter | [Documentation](./documentation/USAGE.md) |
|
||||||
|
| [JQ/YQ](https://stedolan.github.io/jq/) | JSON/YAML processor | [Cheatsheet](./documentation/CHEATSHEET.md) |
|
||||||
|
|
||||||
|
## 📚 Common Workflows
|
||||||
|
|
||||||
|
### Markdown to Professional PDF
|
||||||
|
```bash
|
||||||
|
# For resumes (ATS optimized)
|
||||||
|
pandoc resume.md -o resume.pdf --template=altacv
|
||||||
|
|
||||||
|
# For project plans and proposals
|
||||||
|
pandoc document.md -o document.pdf --template=eisvogel
|
||||||
|
```
|
||||||
|
|
||||||
|
### Joplin Notes to PDF
|
||||||
|
```bash
|
||||||
|
# Preserve Joplin's formatting when converting to PDF
|
||||||
|
pandoc joplin_note.md -o note.pdf --css=styles.css
|
||||||
|
```
|
||||||
|
|
||||||
|
### Book Generation
|
||||||
|
```bash
|
||||||
|
# Initialize and build a book
|
||||||
|
mdbook init my-book
|
||||||
|
cd my-book
|
||||||
|
mdbook build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Presentation Creation
|
||||||
|
```bash
|
||||||
|
# Create slide deck from markdown
|
||||||
|
marp --pdf slides.md
|
||||||
|
```
|
||||||
|
|
||||||
|
See [USAGE.md](./documentation/USAGE.md) for complete workflows and examples.
|
||||||
|
|
||||||
|
## 🏗️ Project Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
toolbox-docs/
|
||||||
|
├── Dockerfile # Multi-stage build with security best practices
|
||||||
|
├── docker-compose.yml # Docker Compose configuration
|
||||||
|
├── devcontainer.json # VS Code Dev Container configuration
|
||||||
|
├── run.sh # Script to run the container
|
||||||
|
├── build.sh # Script to build the container
|
||||||
|
├── test.sh # Test script for CI/CD
|
||||||
|
├── docs/ # Working directory for documents
|
||||||
|
├── examples/ # Example documents and workflows
|
||||||
|
├── documentation/ # Usage, troubleshooting guides
|
||||||
|
│ ├── USAGE.md
|
||||||
|
│ ├── TROUBLESHOOTING.md
|
||||||
|
│ └── CHEATSHEET.md
|
||||||
|
└── output/ # Generated documents output
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🛡️ Security
|
||||||
|
|
||||||
|
- **Zero Root Runtime**: Container runs as `tsysdevstack` user with no root access
|
||||||
|
- **Minimal Build Privileges**: Root only used during build for package installation
|
||||||
|
- **Principle of Least Privilege**: Only necessary tools and permissions included
|
||||||
|
- **Hardened Image**: Security best practices applied throughout the build process
|
||||||
|
|
||||||
|
## 🚢 CI/CD Integration
|
||||||
|
|
||||||
|
Use the provided scripts in your CI/CD pipeline:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Build for multiple platforms
|
||||||
|
./build.sh -p linux/amd64,linux/arm64
|
||||||
|
|
||||||
|
# Run tests
|
||||||
|
./test.sh
|
||||||
|
|
||||||
|
# Push to registry (requires auth)
|
||||||
|
./build.sh --push
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📖 Documentation
|
||||||
|
|
||||||
|
- [Usage Guide](./documentation/USAGE.md) - Complete usage instructions
|
||||||
|
- [Troubleshooting](./documentation/TROUBLESHOOTING.md) - Common issues and solutions
|
||||||
|
- [Cheatsheet](./documentation/CHEATSHEET.md) - Quick reference for common commands
|
||||||
|
- [Examples](./examples/) - Sample documents and workflows
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
||||||
|
|
||||||
|
## 📄 License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
**TSYS Dev Stack - Docs Toolbox** © 2025 | A [TSYS Group](https://www.tsys.com/) Project
|
||||||
|
|
||||||
|
[](https://www.tsys.com/)
|
||||||
|
|
||||||
|
</div>
|
||||||
105
toolbox-docs/build.sh
Executable file
105
toolbox-docs/build.sh
Executable file
@@ -0,0 +1,105 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Script to build the tsysdevstack-toolboxes-docs container
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
IMAGE_NAME="tsysdevstack/toolbox-docs"
|
||||||
|
BUILD_ARGS=""
|
||||||
|
PLATFORMS="linux/amd64,linux/arm64,linux/arm/v7" # Support PC, Raspberry Pi, Mac M series
|
||||||
|
|
||||||
|
# Function to display usage
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $0 [OPTIONS]"
|
||||||
|
echo "Options:"
|
||||||
|
echo " -p, --platform PLATFORM Target platform (default: all supported)"
|
||||||
|
echo " -t, --tag TAG Tag for the image (default: latest)"
|
||||||
|
echo " -c, --cache Use build cache (default: true)"
|
||||||
|
echo " --no-cache Skip build cache"
|
||||||
|
echo " --push Push image to registry after building"
|
||||||
|
echo " -h, --help Show this help message"
|
||||||
|
echo ""
|
||||||
|
echo "Examples:"
|
||||||
|
echo " $0 # Build for all platforms"
|
||||||
|
echo " $0 -p linux/amd64 # Build for x86_64"
|
||||||
|
echo " $0 -t v1.0.0 # Build with specific tag"
|
||||||
|
echo " $0 --no-cache # Build without cache"
|
||||||
|
echo " $0 --push # Build and push to registry"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse command line arguments
|
||||||
|
PLATFORM=""
|
||||||
|
TAG="latest"
|
||||||
|
USE_CACHE=true
|
||||||
|
PUSH=false
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-p|--platform)
|
||||||
|
PLATFORM="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-t|--tag)
|
||||||
|
TAG="$2"
|
||||||
|
shift 2
|
||||||
|
;;
|
||||||
|
-c|--cache)
|
||||||
|
USE_CACHE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--no-cache)
|
||||||
|
USE_CACHE=false
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--push)
|
||||||
|
PUSH=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Build the image using Docker Buildx for multi-platform support
|
||||||
|
echo "Building tsysdevstack/toolbox-docs Docker image..."
|
||||||
|
|
||||||
|
# Create buildx builder if it doesn't exist
|
||||||
|
if ! docker buildx ls | grep -q "tsysdevstack-builder"; then
|
||||||
|
echo "Creating buildx builder instance..."
|
||||||
|
docker buildx create --name tsysdevstack-builder --use --bootstrap
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prepare build arguments
|
||||||
|
BUILD_ARGS="--progress=plain --platform=${PLATFORM:-$PLATFORMS} --tag ${IMAGE_NAME}:${TAG}"
|
||||||
|
|
||||||
|
if [ "$USE_CACHE" = false ]; then
|
||||||
|
BUILD_ARGS="$BUILD_ARGS --no-cache"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$PUSH" = true ]; then
|
||||||
|
BUILD_ARGS="$BUILD_ARGS --push"
|
||||||
|
else
|
||||||
|
BUILD_ARGS="$BUILD_ARGS --load" # Load to local Docker image store
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Execute the build command
|
||||||
|
BUILD_CMD="docker buildx build $BUILD_ARGS ."
|
||||||
|
echo "Running: $BUILD_CMD"
|
||||||
|
if eval "$BUILD_CMD"; then
|
||||||
|
echo "Build completed successfully!"
|
||||||
|
if [ "$PUSH" = true ]; then
|
||||||
|
echo "Image pushed to registry."
|
||||||
|
else
|
||||||
|
echo "Image loaded to local Docker image store."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Build failed!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
42
toolbox-docs/devcontainer.json
Normal file
42
toolbox-docs/devcontainer.json
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"name": "TSYS Dev Stack - Docs",
|
||||||
|
"dockerFile": "Dockerfile",
|
||||||
|
"runArgs": [
|
||||||
|
"--userns=keep-id"
|
||||||
|
],
|
||||||
|
"remoteUser": "tsysdevstack",
|
||||||
|
"workspaceFolder": "/home/tsysdevstack/docs",
|
||||||
|
"workspaceMount": "source=${localWorkspaceFolder}/docs,target=/home/tsysdevstack/docs,type=bind",
|
||||||
|
"mounts": [
|
||||||
|
"source=${localWorkspaceFolder}/output,target=/home/tsysdevstack/output,type=bind"
|
||||||
|
],
|
||||||
|
"features": {},
|
||||||
|
"customizations": {
|
||||||
|
"vscode": {
|
||||||
|
"extensions": [
|
||||||
|
"ms-vscode.vscode-json",
|
||||||
|
"redhat.vscode-yaml",
|
||||||
|
"ms-vscode.powershell",
|
||||||
|
"ms-vsliveshare.vsliveshare",
|
||||||
|
"yzhang.markdown-all-in-one",
|
||||||
|
"shd101.windicss-intellisense",
|
||||||
|
"bradlc.vscode-tailwindcss",
|
||||||
|
"esbenp.prettier-vscode",
|
||||||
|
"ms-python.python",
|
||||||
|
"ms-python.black-formatter",
|
||||||
|
"ms-toolsai.jupyter",
|
||||||
|
"ms-toolsai.jupyter-keymap",
|
||||||
|
"ms-toolsai.jupyter-renderers"
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"terminal.integrated.defaultProfile.linux": "fish",
|
||||||
|
"terminal.integrated.profiles.linux": {
|
||||||
|
"fish": {
|
||||||
|
"path": "/usr/bin/fish"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"postCreateCommand": "chown -R tsysdevstack:tsysdevstack /home/tsysdevstack/docs /home/tsysdevstack/output"
|
||||||
|
}
|
||||||
22
toolbox-docs/docker-compose.yml
Normal file
22
toolbox-docs/docker-compose.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
docs:
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
container_name: tsysdevstack-toolboxes-docs
|
||||||
|
user: "${TSDS_UID:-1000}:${TSDS_GID:-1000}"
|
||||||
|
environment:
|
||||||
|
- HOME=/home/tsysdevstack
|
||||||
|
- USER=tsysdevstack
|
||||||
|
volumes:
|
||||||
|
- ./docs:/home/tsysdevstack/docs
|
||||||
|
- ./output:/home/tsysdevstack/output
|
||||||
|
- ~/.ssh:/home/tsysdevstack/.ssh:ro
|
||||||
|
- /etc/passwd:/etc/passwd:ro
|
||||||
|
- /etc/group:/etc/group:ro
|
||||||
|
working_dir: /home/tsysdevstack/docs
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
command: /bin/fish
|
||||||
227
toolbox-docs/documentation/CHEATSHEET.md
Normal file
227
toolbox-docs/documentation/CHEATSHEET.md
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
# Cheatsheet - TSYS Dev Stack Docs Toolbox
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [Quick Commands](#quick-commands)
|
||||||
|
- [Pandoc Conversions](#pandoc-conversions)
|
||||||
|
- [MdBook Commands](#mdbook-commands)
|
||||||
|
- [Typst Commands](#typst-commands)
|
||||||
|
- [Marp Commands](#marp-commands)
|
||||||
|
- [Quarto Commands](#quarto-commands)
|
||||||
|
- [Document Templates](#document-templates)
|
||||||
|
- [File Locations](#file-locations)
|
||||||
|
|
||||||
|
## Quick Commands
|
||||||
|
|
||||||
|
| Task | Command |
|
||||||
|
|------|---------|
|
||||||
|
| Run container interactively | `./run.sh` |
|
||||||
|
| Build image | `./build.sh` |
|
||||||
|
| Run tests | `./test.sh` |
|
||||||
|
| Run detached container | `./run.sh -d` |
|
||||||
|
| Build and run | `./run.sh -b` |
|
||||||
|
|
||||||
|
## Pandoc Conversions
|
||||||
|
|
||||||
|
### Markdown to PDF
|
||||||
|
```bash
|
||||||
|
# Basic conversion
|
||||||
|
pandoc input.md -o output.pdf
|
||||||
|
|
||||||
|
# With a specific template (e.g., for resumes)
|
||||||
|
pandoc input.md -o output.pdf --template=altacv --pdf-engine=xelatex
|
||||||
|
|
||||||
|
# With custom CSS (for HTML)
|
||||||
|
pandoc input.md -o output.html --css=styles.css
|
||||||
|
```
|
||||||
|
|
||||||
|
### Advanced Pandoc Options
|
||||||
|
```bash
|
||||||
|
# Include metadata for title page
|
||||||
|
pandoc --metadata title="Document Title" --metadata author="Author Name" input.md -o output.pdf
|
||||||
|
|
||||||
|
# Use specific LaTeX engine for different fonts
|
||||||
|
pandoc input.md -o output.pdf --pdf-engine=xelatex
|
||||||
|
|
||||||
|
# Include TOC and specify depth
|
||||||
|
pandoc input.md -o output.pdf --toc --toc-depth=2
|
||||||
|
```
|
||||||
|
|
||||||
|
## MdBook Commands
|
||||||
|
|
||||||
|
### Basic Operations
|
||||||
|
```bash
|
||||||
|
# Create a new book
|
||||||
|
mdbook init mybook
|
||||||
|
|
||||||
|
# Build the book
|
||||||
|
mdbook build
|
||||||
|
|
||||||
|
# Serve with live reload
|
||||||
|
mdbook serve
|
||||||
|
|
||||||
|
# Open in browser after serving
|
||||||
|
mdbook serve --open
|
||||||
|
```
|
||||||
|
|
||||||
|
### Directory Structure
|
||||||
|
```
|
||||||
|
mybook/
|
||||||
|
├── book.toml # Configuration file
|
||||||
|
├── src/
|
||||||
|
│ ├── SUMMARY.md # Table of contents
|
||||||
|
│ ├── chapter_1.md
|
||||||
|
│ └── chapter_2.md
|
||||||
|
└── book/ # Generated files (ignored by git)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Typst Commands
|
||||||
|
|
||||||
|
### Compilation
|
||||||
|
```bash
|
||||||
|
# Compile to PDF
|
||||||
|
typst compile document.typ document.pdf
|
||||||
|
|
||||||
|
# Watch for changes and recompile
|
||||||
|
typst watch document.typ
|
||||||
|
|
||||||
|
# Format the document
|
||||||
|
typst format document.typ
|
||||||
|
```
|
||||||
|
|
||||||
|
## Marp Commands
|
||||||
|
|
||||||
|
### Slide Generation
|
||||||
|
```bash
|
||||||
|
# Convert to PDF slides
|
||||||
|
marp --pdf slides.md
|
||||||
|
|
||||||
|
# Convert to HTML slides
|
||||||
|
marp --html slides.md
|
||||||
|
|
||||||
|
# Serve with live preview
|
||||||
|
marp --server slides.md
|
||||||
|
|
||||||
|
# Use custom theme
|
||||||
|
marp --theme custom-theme.css slides.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Marp Slide Format
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
marp: true
|
||||||
|
theme: gaia
|
||||||
|
_class: lead
|
||||||
|
paginate: true
|
||||||
|
backgroundColor: ffffff
|
||||||
|
backgroundImage: url('https://cdn.url-to-image')
|
||||||
|
---
|
||||||
|
|
||||||
|
# Page 1
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Page 2
|
||||||
|
```
|
||||||
|
|
||||||
|
## Quarto Commands
|
||||||
|
|
||||||
|
### Document Rendering
|
||||||
|
```bash
|
||||||
|
# Basic render
|
||||||
|
quarto render document.qmd
|
||||||
|
|
||||||
|
# Render to specific format
|
||||||
|
quarto render document.qmd --to pdf
|
||||||
|
quarto render document.qmd --to html
|
||||||
|
quarto render document.qmd --to docx
|
||||||
|
|
||||||
|
# Render with custom format
|
||||||
|
quarto render document.qmd --to revealjs # For presentations
|
||||||
|
```
|
||||||
|
|
||||||
|
### Project Creation
|
||||||
|
```bash
|
||||||
|
# Create a new project
|
||||||
|
quarto create-project myproject --type default
|
||||||
|
quarto create-project mybook --type book
|
||||||
|
quarto create-project myslides --type presentation
|
||||||
|
```
|
||||||
|
|
||||||
|
## Document Templates
|
||||||
|
|
||||||
|
### Standard Markdown Template
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "Document Title"
|
||||||
|
author: ["Author Name"]
|
||||||
|
date: "2025-01-01"
|
||||||
|
lang: "en"
|
||||||
|
header-includes:
|
||||||
|
- \usepackage{fancyhdr}
|
||||||
|
- \pagestyle{fancy}
|
||||||
|
---
|
||||||
|
|
||||||
|
# Section Title
|
||||||
|
|
||||||
|
Content goes here...
|
||||||
|
|
||||||
|
## Subsection
|
||||||
|
|
||||||
|
More content here...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Resume Markdown Template (for Pandoc)
|
||||||
|
```markdown
|
||||||
|
---
|
||||||
|
title: "John Doe"
|
||||||
|
author: []
|
||||||
|
date: []
|
||||||
|
output:
|
||||||
|
pdf_document:
|
||||||
|
template: altacv
|
||||||
|
pandoc_args: ["--top-level-division=section"]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Personal Info
|
||||||
|
|
||||||
|
**Address:** 123 Main St, City, State
|
||||||
|
**Phone:** (555) 123-4567
|
||||||
|
**Email:** john.doe@example.com
|
||||||
|
**LinkedIn:** [johndoe](https://linkedin.com/in/johndoe)
|
||||||
|
|
||||||
|
# Experience
|
||||||
|
|
||||||
|
## Job Title
|
||||||
|
**Company Name** | Month Year - Present
|
||||||
|
- Point 1
|
||||||
|
- Point 2
|
||||||
|
```
|
||||||
|
|
||||||
|
## File Locations
|
||||||
|
|
||||||
|
### Container Paths
|
||||||
|
- Working directory: `/home/tsysdevstack/docs`
|
||||||
|
- Output directory: `/home/tsysdevstack/output`
|
||||||
|
- User home: `/home/tsysdevstack`
|
||||||
|
- Mise tools: `~/.local/share/mise`
|
||||||
|
|
||||||
|
### Host Paths (when using run.sh)
|
||||||
|
- Source documents: `./docs`
|
||||||
|
- Output documents: `./output`
|
||||||
|
- Examples: `./examples`
|
||||||
|
- Documentation: `./documentation`
|
||||||
|
|
||||||
|
### Mise Management
|
||||||
|
```bash
|
||||||
|
# Check currently managed tools
|
||||||
|
mise ls
|
||||||
|
|
||||||
|
# Install a new version of a tool
|
||||||
|
mise install python@3.12.0
|
||||||
|
|
||||||
|
# Switch to a specific version
|
||||||
|
mise use python@3.12.0
|
||||||
|
|
||||||
|
# Execute command with specific tool version
|
||||||
|
mise exec -- python script.py
|
||||||
|
```
|
||||||
152
toolbox-docs/documentation/TROUBLESHOOTING.md
Normal file
152
toolbox-docs/documentation/TROUBLESHOOTING.md
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
# Troubleshooting Guide - TSYS Dev Stack Docs Toolbox
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [Common Issues](#common-issues)
|
||||||
|
- [Docker-related Issues](#docker-related-issues)
|
||||||
|
- [Tool-specific Issues](#tool-specific-issues)
|
||||||
|
- [Performance Issues](#performance-issues)
|
||||||
|
- [Security Considerations](#security-considerations)
|
||||||
|
|
||||||
|
## Common Issues
|
||||||
|
|
||||||
|
### Container Won't Start
|
||||||
|
**Problem**: The container fails to start with an error.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
1. Check if Docker is running:
|
||||||
|
```bash
|
||||||
|
docker info
|
||||||
|
```
|
||||||
|
2. Check if the image exists:
|
||||||
|
```bash
|
||||||
|
docker images | grep tsysdevstack/toolbox-docs
|
||||||
|
```
|
||||||
|
3. If the image doesn't exist, build it:
|
||||||
|
```bash
|
||||||
|
./build.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Permission Issues
|
||||||
|
**Problem**: Getting permission errors when accessing files.
|
||||||
|
|
||||||
|
**Solution**: The container runs as the `tsysdevstack` user. Ensure your host files have appropriate permissions:
|
||||||
|
```bash
|
||||||
|
# Change ownership to match the container user (UID 1000)
|
||||||
|
sudo chown -R 1000:1000 ./docs ./output
|
||||||
|
```
|
||||||
|
|
||||||
|
### Tools Not Found
|
||||||
|
**Problem**: Commands like `pandoc`, `mdbook`, etc. are not found.
|
||||||
|
|
||||||
|
**Solution**: Ensure you're running inside the container:
|
||||||
|
```bash
|
||||||
|
# Run the container interactively to use the tools
|
||||||
|
./run.sh
|
||||||
|
# Then run your command inside the container
|
||||||
|
pandoc --version
|
||||||
|
```
|
||||||
|
|
||||||
|
## Docker-related Issues
|
||||||
|
|
||||||
|
### Image Build Fails
|
||||||
|
**Problem**: Building the image fails with errors.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
1. Make sure you're using the latest version of Docker
|
||||||
|
2. Increase Docker's memory allocation if building fails
|
||||||
|
3. Clear Docker build cache:
|
||||||
|
```bash
|
||||||
|
docker builder prune
|
||||||
|
```
|
||||||
|
|
||||||
|
### Large Image Size
|
||||||
|
**Problem**: The image is very large due to TeXLive and other tools.
|
||||||
|
|
||||||
|
**Solution**: The image is intentionally comprehensive for document generation. You can create a custom minimal image if needed, but this full image provides the most functionality.
|
||||||
|
|
||||||
|
### Multi-platform Build Issues
|
||||||
|
**Problem**: Build fails when targeting specific platforms.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
```bash
|
||||||
|
# Try building for your current platform only
|
||||||
|
./build.sh -p $(docker buildx imagetools inspect --format '{{json .Manifest}}' hello-world | jq -r '.platform.architecture')
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tool-specific Issues
|
||||||
|
|
||||||
|
### Pandoc Issues
|
||||||
|
**Problem**: Pandoc fails when converting documents.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
- Check if your input file is properly formatted
|
||||||
|
- For PDF output, ensure TeXLive is properly installed (it should be in this container)
|
||||||
|
- For custom templates, ensure the template file is available in the container:
|
||||||
|
```bash
|
||||||
|
# Check if template exists
|
||||||
|
ls -la /home/tsysdevstack/.pandoc/templates/
|
||||||
|
```
|
||||||
|
|
||||||
|
### MdBook Issues
|
||||||
|
**Problem**: MdBook fails to build or serve books.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
- Verify that your `SUMMARY.md` and `book.toml` files are properly formatted
|
||||||
|
- Check that all referenced files exist in your book directory
|
||||||
|
- Make sure you're running mdbook from the book's root directory (where `book.toml` is)
|
||||||
|
|
||||||
|
### Typst Issues
|
||||||
|
**Problem**: Typst fails to compile documents.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
- Check if your Typst syntax is correct
|
||||||
|
- Ensure you have fonts available in the container
|
||||||
|
- Look at the error message for specific file or syntax issues
|
||||||
|
|
||||||
|
### Marp Issues
|
||||||
|
**Problem**: Marp doesn't generate PDFs correctly.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
- Make sure your markdown uses correct Marp slide delimiters
|
||||||
|
- Check for any custom CSS that might be causing rendering issues
|
||||||
|
- Ensure the container has internet access for downloading themes (if needed)
|
||||||
|
|
||||||
|
### Quarto Issues
|
||||||
|
**Problem**: Quarto fails to render documents.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
- Verify that required dependencies (like Python, R, etc.) are properly available
|
||||||
|
- Check if extensions are properly installed
|
||||||
|
- Look for environment-specific issues that might affect rendering
|
||||||
|
|
||||||
|
## Performance Issues
|
||||||
|
|
||||||
|
### Slow Document Generation
|
||||||
|
**Problem**: Converting documents takes a very long time.
|
||||||
|
|
||||||
|
**Solution**:
|
||||||
|
- For PDF generation, TeXLive compilation is naturally slower than other formats
|
||||||
|
- Consider using HTML output for faster preview during editing
|
||||||
|
- For large documents, consider breaking them into smaller sections
|
||||||
|
|
||||||
|
### High Memory Usage
|
||||||
|
**Problem**: Container uses excessive memory.
|
||||||
|
|
||||||
|
**Solution**: For resource-intensive operations like full TeXLive compilation, ensure Docker has sufficient memory allocated (at least 4GB recommended).
|
||||||
|
|
||||||
|
## Security Considerations
|
||||||
|
|
||||||
|
### Root Access
|
||||||
|
**Problem**: Concerned about running with root access.
|
||||||
|
|
||||||
|
**Solution**: This container is designed to run as the `tsysdevstack` user with no root access at runtime. The only root usage is during the build process for installing system packages.
|
||||||
|
|
||||||
|
### Network Security
|
||||||
|
**Problem**: Need to run without network access.
|
||||||
|
|
||||||
|
**Solution**: The container can run offline once built. It can perform all document generation tasks without network access, though some features like fetching remote templates or themes would be unavailable.
|
||||||
|
|
||||||
|
### File Access
|
||||||
|
**Problem**: Container can access files it shouldn't.
|
||||||
|
|
||||||
|
**Solution**: The container only has access to files in the `/docs` and `/output` directories that you explicitly mount. Files outside these directories are not accessible.
|
||||||
176
toolbox-docs/documentation/USAGE.md
Normal file
176
toolbox-docs/documentation/USAGE.md
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
# Usage Guide - TSYS Dev Stack Docs Toolbox
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [Overview](#overview)
|
||||||
|
- [Running the Container](#running-the-container)
|
||||||
|
- [Available Tools](#available-tools)
|
||||||
|
- [Document Conversion Workflows](#document-conversion-workflows)
|
||||||
|
- [Development Workflows](#development-workflows)
|
||||||
|
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
The TSYS Dev Stack Docs Toolbox is a comprehensive document production environment with all the tools you need to create beautiful documents from various source formats. This container runs as the `tsysdevstack` user with no root access, ensuring security while providing a powerful document creation toolkit.
|
||||||
|
|
||||||
|
## Running the Container
|
||||||
|
|
||||||
|
### Using the Run Script
|
||||||
|
```bash
|
||||||
|
# Run interactively (default)
|
||||||
|
./run.sh
|
||||||
|
|
||||||
|
# Run in detached mode
|
||||||
|
./run.sh -d
|
||||||
|
|
||||||
|
# Build the image first, then run
|
||||||
|
./run.sh -b
|
||||||
|
|
||||||
|
# Build and run in detached mode
|
||||||
|
./run.sh -b -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Using Docker Compose
|
||||||
|
```bash
|
||||||
|
# Run the container with docker-compose
|
||||||
|
docker-compose up
|
||||||
|
|
||||||
|
# Run and build if needed
|
||||||
|
docker-compose up --build
|
||||||
|
|
||||||
|
# Run in detached mode
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Direct Docker Run
|
||||||
|
```bash
|
||||||
|
# Run with direct docker command
|
||||||
|
docker run -it --rm \
|
||||||
|
-v $(pwd)/docs:/home/tsysdevstack/docs \
|
||||||
|
-v $(pwd)/output:/home/tsysdevstack/output \
|
||||||
|
tsysdevstack/toolbox-docs:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Available Tools
|
||||||
|
|
||||||
|
### Pandoc
|
||||||
|
Convert documents between various formats with powerful templating capabilities:
|
||||||
|
```bash
|
||||||
|
pandoc input.md -o output.pdf
|
||||||
|
pandoc input.md -o output.docx
|
||||||
|
pandoc input.md -o output.html
|
||||||
|
```
|
||||||
|
|
||||||
|
### MdBook
|
||||||
|
Create books and documentation sites from markdown files:
|
||||||
|
```bash
|
||||||
|
# Build a book
|
||||||
|
mdbook build
|
||||||
|
|
||||||
|
# Serve a book locally with live reload
|
||||||
|
mdbook serve
|
||||||
|
|
||||||
|
# Create a new book
|
||||||
|
mdbook init mybook
|
||||||
|
```
|
||||||
|
|
||||||
|
### Typst
|
||||||
|
Modern typesetting tool for scientific and technical documents:
|
||||||
|
```bash
|
||||||
|
# Compile a typst document
|
||||||
|
typst compile document.typ document.pdf
|
||||||
|
|
||||||
|
# Watch for changes and recompile
|
||||||
|
typst watch document.typ
|
||||||
|
```
|
||||||
|
|
||||||
|
### Marp
|
||||||
|
Create slide decks from markdown:
|
||||||
|
```bash
|
||||||
|
# Convert markdown to PDF slides
|
||||||
|
marp --pdf slides.md
|
||||||
|
|
||||||
|
# Convert to HTML
|
||||||
|
marp --html slides.md
|
||||||
|
|
||||||
|
# Serve slides with live preview
|
||||||
|
marp --server slides.md
|
||||||
|
```
|
||||||
|
|
||||||
|
### Quarto
|
||||||
|
Next generation scientific and technical publishing system:
|
||||||
|
```bash
|
||||||
|
# Render a document
|
||||||
|
quarto render document.qmd
|
||||||
|
|
||||||
|
# Convert to PDF
|
||||||
|
quarto render document.qmd --to pdf
|
||||||
|
|
||||||
|
# Create a new project
|
||||||
|
quarto create-project myproject --type book
|
||||||
|
```
|
||||||
|
|
||||||
|
### JQ/YQ
|
||||||
|
Process JSON and YAML files:
|
||||||
|
```bash
|
||||||
|
# Format JSON
|
||||||
|
jq '.' data.json
|
||||||
|
|
||||||
|
# Extract values from JSON
|
||||||
|
jq '.field' data.json
|
||||||
|
|
||||||
|
# Process YAML files
|
||||||
|
yq '.field' data.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Document Conversion Workflows
|
||||||
|
|
||||||
|
### Markdown to Professional PDF
|
||||||
|
Convert markdown documents to professionally formatted PDFs:
|
||||||
|
```bash
|
||||||
|
# For resumes (ATS optimized)
|
||||||
|
pandoc resume.md -o resume.pdf --template=altacv
|
||||||
|
|
||||||
|
# For project plans and proposals
|
||||||
|
pandoc document.md -o document.pdf --template=eisvogel
|
||||||
|
```
|
||||||
|
|
||||||
|
### Joplin Notes to PDF
|
||||||
|
Export your Joplin notes with full formatting preserved:
|
||||||
|
```bash
|
||||||
|
# Export individual notes
|
||||||
|
pandoc joplin_note.md -o note.pdf --css=styles.css
|
||||||
|
|
||||||
|
# For complex formatting use a custom template
|
||||||
|
pandoc joplin_note.md -o note.pdf --template=custom.latex
|
||||||
|
```
|
||||||
|
|
||||||
|
### Creating Books with mdBook
|
||||||
|
Organize content into structured books:
|
||||||
|
```bash
|
||||||
|
# Initialize a new book
|
||||||
|
mdbook init my-book
|
||||||
|
|
||||||
|
# Build the book in output directory
|
||||||
|
mdbook build
|
||||||
|
|
||||||
|
# Preview with live reload
|
||||||
|
mdbook serve --open
|
||||||
|
```
|
||||||
|
|
||||||
|
## Development Workflows
|
||||||
|
|
||||||
|
### Local Development
|
||||||
|
1. Mount your source files to `/home/tsysdevstack/docs` in the container
|
||||||
|
2. Place output files in `/home/tsysdevstack/output` which is also mounted
|
||||||
|
3. Use the container interactively for development
|
||||||
|
4. Run `mdbook serve` for live preview during content development
|
||||||
|
|
||||||
|
### CI/CD Pipeline
|
||||||
|
1. Build the container with your content inside
|
||||||
|
2. Run conversion tools to generate all document formats
|
||||||
|
3. Extract output files from the container
|
||||||
|
4. Deploy or package as needed
|
||||||
|
|
||||||
|
### Version Control
|
||||||
|
- Keep source files (markdown, typst, etc.) in version control
|
||||||
|
- Exclude generated files (PDFs, HTML, etc.) from version control
|
||||||
|
- Use docker-compose for consistent development environments across teams
|
||||||
60
toolbox-docs/examples/README.md
Normal file
60
toolbox-docs/examples/README.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# Examples Directory
|
||||||
|
|
||||||
|
This directory contains example documents and workflow scripts to help you get started with the TSYS Dev Stack Docs Toolbox.
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
- [Markdown Examples](#markdown-examples)
|
||||||
|
- [Book Examples](#book-examples)
|
||||||
|
- [Presentation Examples](#presentation-examples)
|
||||||
|
- [Workflow Scripts](#workflow-scripts)
|
||||||
|
|
||||||
|
## Markdown Examples
|
||||||
|
|
||||||
|
### Resume Example
|
||||||
|
- `resume-example.md` - A sample resume in markdown format optimized for ATS systems
|
||||||
|
- `resume-example.pdf` - The generated PDF version using pandoc
|
||||||
|
|
||||||
|
### Technical Documentation
|
||||||
|
- `technical-doc.md` - A sample technical document with code blocks and diagrams
|
||||||
|
- `technical-doc.pdf` - The generated PDF with proper formatting
|
||||||
|
- `technical-doc.html` - The generated HTML version
|
||||||
|
|
||||||
|
### Joplin Notes Conversion
|
||||||
|
- `joplin-note-example.md` - Sample Joplin note with formatting
|
||||||
|
- `joplin-note-example.pdf` - Converted PDF preserving Joplin formatting
|
||||||
|
|
||||||
|
## Book Examples
|
||||||
|
|
||||||
|
### Simple Book
|
||||||
|
- `simple-book/` - A complete mdBook project with:
|
||||||
|
- `book.toml` - Configuration file
|
||||||
|
- `src/SUMMARY.md` - Table of contents
|
||||||
|
- `src/chapter_1.md` - First chapter
|
||||||
|
- `src/chapter_2.md` - Second chapter
|
||||||
|
|
||||||
|
### Technical Book
|
||||||
|
- `technical-book/` - A more complex mdBook project with:
|
||||||
|
- Custom CSS styling
|
||||||
|
- Code examples with syntax highlighting
|
||||||
|
- Diagrams and images
|
||||||
|
|
||||||
|
## Presentation Examples
|
||||||
|
|
||||||
|
### Marp Slides
|
||||||
|
- `marp-slides-example.md` - Slides created with Marp syntax
|
||||||
|
- `marp-slides-example.pdf` - Exported PDF slides
|
||||||
|
|
||||||
|
### Quarto Presentation
|
||||||
|
- `quarto-slides-example.qmd` - Presentation in Quarto format
|
||||||
|
- `quarto-slides-example.html` - Generated reveal.js presentation
|
||||||
|
|
||||||
|
## Workflow Scripts
|
||||||
|
|
||||||
|
### Document Generation Workflow
|
||||||
|
- `generate-resume.sh` - Complete workflow to convert markdown resume to PDF
|
||||||
|
- `generate-docs.sh` - Workflow to convert multiple markdown documents to various formats
|
||||||
|
- `generate-book.sh` - Workflow to build and package an entire mdBook project
|
||||||
|
|
||||||
|
### Batch Processing
|
||||||
|
- `batch-convert.py` - Python script to batch convert multiple documents
|
||||||
|
- `convert-to-all-formats.sh` - Script to generate all format variants of a document
|
||||||
33
toolbox-docs/examples/generate-resume.sh
Normal file
33
toolbox-docs/examples/generate-resume.sh
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Workflow script to convert markdown resume to PDF using pandoc
|
||||||
|
set -e
|
||||||
|
|
||||||
|
INPUT_FILE="resume-example.md"
|
||||||
|
OUTPUT_FILE="resume-example.pdf"
|
||||||
|
TEMPLATE="altacv"
|
||||||
|
|
||||||
|
echo "Converting resume to PDF..."
|
||||||
|
|
||||||
|
# Check if input file exists
|
||||||
|
if [ ! -f "$INPUT_FILE" ]; then
|
||||||
|
echo "Error: Input file '$INPUT_FILE' does not exist."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert using pandoc with altacv template for ATS-optimized resume
|
||||||
|
pandoc "$INPUT_FILE" \
|
||||||
|
-o "$OUTPUT_FILE" \
|
||||||
|
--template="$TEMPLATE" \
|
||||||
|
--pdf-engine=xelatex \
|
||||||
|
--variable "geometry:margin=0.5in" \
|
||||||
|
--variable "colorlinks:true" \
|
||||||
|
--variable "linkcolor:blue" \
|
||||||
|
--variable "urlcolor:blue"
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Resume successfully converted to '$OUTPUT_FILE'"
|
||||||
|
else
|
||||||
|
echo "Error: Failed to convert resume"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
47
toolbox-docs/examples/resume-example.md
Normal file
47
toolbox-docs/examples/resume-example.md
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
# Example Resume in Markdown
|
||||||
|
|
||||||
|
---
|
||||||
|
title: "John Doe"
|
||||||
|
author: []
|
||||||
|
date: []
|
||||||
|
output:
|
||||||
|
pdf_document:
|
||||||
|
template: altacv
|
||||||
|
pandoc_args: ["--top-level-division=section"]
|
||||||
|
---
|
||||||
|
|
||||||
|
# Personal Info
|
||||||
|
|
||||||
|
**Address:** 123 Main St, City, State
|
||||||
|
**Phone:** (555) 123-4567
|
||||||
|
**Email:** john.doe@example.com
|
||||||
|
**LinkedIn:** [johndoe](https://linkedin.com/in/johndoe)
|
||||||
|
|
||||||
|
# Experience
|
||||||
|
|
||||||
|
## Senior Software Engineer
|
||||||
|
**Tech Company** | Jan 2022 - Present
|
||||||
|
- Led development of microservices architecture that improved system scalability by 40%
|
||||||
|
- Mentored junior developers and conducted technical interviews
|
||||||
|
- Implemented CI/CD pipelines reducing deployment time by 60%
|
||||||
|
|
||||||
|
## Software Engineer
|
||||||
|
**Previous Company** | Jun 2019 - Dec 2021
|
||||||
|
- Developed and maintained RESTful APIs serving 10K+ daily active users
|
||||||
|
- Collaborated with cross-functional teams to deliver product features
|
||||||
|
- Optimized database queries resulting in 25% improvement in response times
|
||||||
|
|
||||||
|
# Education
|
||||||
|
|
||||||
|
## Master of Science in Computer Science
|
||||||
|
**University Name** | 2017 - 2019
|
||||||
|
|
||||||
|
## Bachelor of Science in Software Engineering
|
||||||
|
**University Name** | 2013 - 2017
|
||||||
|
|
||||||
|
# Skills
|
||||||
|
|
||||||
|
- **Languages:** JavaScript, Python, Go, Rust, Java
|
||||||
|
- **Frameworks:** React, Node.js, Django, Spring Boot
|
||||||
|
- **Technologies:** Docker, Kubernetes, AWS, PostgreSQL, Redis
|
||||||
|
- **Tools:** Git, Jenkins, Jira, Confluence
|
||||||
124
toolbox-docs/examples/technical-doc.md
Normal file
124
toolbox-docs/examples/technical-doc.md
Normal file
@@ -0,0 +1,124 @@
|
|||||||
|
# Technical Documentation Example
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This is a sample technical document to demonstrate the capabilities of the TSYS Dev Stack Docs Toolbox. This document includes various elements that are commonly found in technical documentation.
|
||||||
|
|
||||||
|
## Code Examples
|
||||||
|
|
||||||
|
Here's a Python example with syntax highlighting:
|
||||||
|
|
||||||
|
```python
|
||||||
|
def fibonacci(n):
|
||||||
|
"""
|
||||||
|
Generate the first n numbers in the Fibonacci sequence.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
n (int): Number of Fibonacci numbers to generate
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
list: List containing the first n Fibonacci numbers
|
||||||
|
"""
|
||||||
|
if n <= 0:
|
||||||
|
return []
|
||||||
|
elif n == 1:
|
||||||
|
return [0]
|
||||||
|
elif n == 2:
|
||||||
|
return [0, 1]
|
||||||
|
|
||||||
|
fib_sequence = [0, 1]
|
||||||
|
for i in range(2, n):
|
||||||
|
next_num = fib_sequence[i-1] + fib_sequence[i-2]
|
||||||
|
fib_sequence.append(next_num)
|
||||||
|
|
||||||
|
return fib_sequence
|
||||||
|
|
||||||
|
# Example usage
|
||||||
|
print(fibonacci(10)) # Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
|
||||||
|
```
|
||||||
|
|
||||||
|
And here's a JavaScript example:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
class TodoList {
|
||||||
|
constructor() {
|
||||||
|
this.tasks = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
addTask(task) {
|
||||||
|
this.tasks.push({
|
||||||
|
id: Date.now(),
|
||||||
|
text: task,
|
||||||
|
completed: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
completeTask(id) {
|
||||||
|
const task = this.tasks.find(t => t.id === id);
|
||||||
|
if (task) {
|
||||||
|
task.completed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration Examples
|
||||||
|
|
||||||
|
Here's a sample configuration in YAML:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
server:
|
||||||
|
port: 8080
|
||||||
|
host: "0.0.0.0"
|
||||||
|
timeout: 30s
|
||||||
|
|
||||||
|
database:
|
||||||
|
host: "localhost"
|
||||||
|
port: 5432
|
||||||
|
name: "myapp"
|
||||||
|
ssl: true
|
||||||
|
|
||||||
|
logging:
|
||||||
|
level: "info"
|
||||||
|
format: "json"
|
||||||
|
output: "stdout"
|
||||||
|
```
|
||||||
|
|
||||||
|
## Diagrams
|
||||||
|
|
||||||
|
The following diagram would be generated using Kroki or similar tools:
|
||||||
|
|
||||||
|
```
|
||||||
|
graph TD
|
||||||
|
A[Client] --> B[Load Balancer]
|
||||||
|
B --> C[Web Server 1]
|
||||||
|
B --> D[Web Server 2]
|
||||||
|
B --> E[Web Server 3]
|
||||||
|
C --> F[Database]
|
||||||
|
D --> F
|
||||||
|
E --> F
|
||||||
|
```
|
||||||
|
|
||||||
|
## Tables
|
||||||
|
|
||||||
|
| Feature | Status | Priority |
|
||||||
|
|--------|--------|----------|
|
||||||
|
| User Authentication | Complete | High |
|
||||||
|
| Data Export | In Progress | High |
|
||||||
|
| Reporting | Planned | Medium |
|
||||||
|
| Dashboard | Complete | High |
|
||||||
|
|
||||||
|
## Mathematical Notation
|
||||||
|
|
||||||
|
The quadratic formula: $x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}$
|
||||||
|
|
||||||
|
Maxwell's equations:
|
||||||
|
|
||||||
|
$$\nabla \cdot \vec{E} = \frac{\rho}{\varepsilon_0}$$
|
||||||
|
$$\nabla \cdot \vec{B} = 0$$
|
||||||
|
$$\nabla \times \vec{E} = -\frac{\partial B}{\partial t}$$
|
||||||
|
$$\nabla \times \vec{B} = \mu_0\left(\vec{J} + \varepsilon_0\frac{\partial E}{\partial t}\right)$$
|
||||||
|
|
||||||
|
## Conclusion
|
||||||
|
|
||||||
|
This document demonstrates various features available in the documentation toolbox. You can convert this to PDF, Word, or HTML formats using Pandoc and other tools.
|
||||||
103
toolbox-docs/run.sh
Executable file
103
toolbox-docs/run.sh
Executable file
@@ -0,0 +1,103 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Script to run the tsysdevstack-toolboxes-docs container
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
CONTAINER_NAME="tsysdevstack-toolboxes-docs"
|
||||||
|
IMAGE_NAME="tsysdevstack/toolbox-docs:latest"
|
||||||
|
WORKDIR="/home/tsysdevstack/docs"
|
||||||
|
|
||||||
|
# Function to display usage
|
||||||
|
usage() {
|
||||||
|
echo "Usage: $0 [OPTIONS]"
|
||||||
|
echo "Options:"
|
||||||
|
echo " -i, --interactive Run container interactively (default)"
|
||||||
|
echo " -b, --build Build the image before running"
|
||||||
|
echo " -d, --detached Run container in detached mode"
|
||||||
|
echo " -h, --help Show this help message"
|
||||||
|
echo ""
|
||||||
|
echo "Examples:"
|
||||||
|
echo " $0 # Run interactively (default)"
|
||||||
|
echo " $0 -d # Run in detached mode"
|
||||||
|
echo " $0 -b # Build image and run"
|
||||||
|
echo " $0 -b -d # Build image and run in detached mode"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse command line arguments
|
||||||
|
INTERACTIVE=true
|
||||||
|
DETACHED=false
|
||||||
|
BUILD=false
|
||||||
|
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case $1 in
|
||||||
|
-i|--interactive)
|
||||||
|
INTERACTIVE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-d|--detached)
|
||||||
|
DETACHED=true
|
||||||
|
INTERACTIVE=false
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-b|--build)
|
||||||
|
BUILD=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
usage
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown option: $1"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# If both interactive and detached are false, default to interactive
|
||||||
|
if [ "$INTERACTIVE" = true ] && [ "$DETACHED" = false ]; then
|
||||||
|
# Default behavior remains interactive
|
||||||
|
:
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build the image if requested
|
||||||
|
if [ "$BUILD" = true ]; then
|
||||||
|
echo "Building the Docker image..."
|
||||||
|
docker build -t "$IMAGE_NAME" .
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Prepare docker run command
|
||||||
|
DOCKER_RUN_CMD="docker run --rm"
|
||||||
|
|
||||||
|
# Add user mapping to match host user
|
||||||
|
if [ -n "${UID:-}" ] && [ -n "${GID:-}" ]; then
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD --user $UID:$GID"
|
||||||
|
else
|
||||||
|
# Fallback to default user ID
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD --user 1000:1000"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add volume mounts
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD -v $SCRIPT_DIR/docs:$WORKDIR"
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD -v $SCRIPT_DIR/output:/home/tsysdevstack/output"
|
||||||
|
|
||||||
|
# Add container name
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD --name $CONTAINER_NAME"
|
||||||
|
|
||||||
|
# Add detached mode flag if requested
|
||||||
|
if [ "$DETACHED" = true ]; then
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD -d"
|
||||||
|
else
|
||||||
|
# Add interactive and TTY flags for interactive mode
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD -it"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add image name
|
||||||
|
DOCKER_RUN_CMD="$DOCKER_RUN_CMD $IMAGE_NAME"
|
||||||
|
|
||||||
|
# Run the container
|
||||||
|
echo "Running: $DOCKER_RUN_CMD"
|
||||||
|
eval "$DOCKER_RUN_CMD"
|
||||||
122
toolbox-docs/test.sh
Executable file
122
toolbox-docs/test.sh
Executable file
@@ -0,0 +1,122 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Script to test the tsysdevstack-toolboxes-docs container
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Default values
|
||||||
|
IMAGE_NAME="tsysdevstack/toolbox-docs:latest"
|
||||||
|
CONTAINER_NAME="tsysdevstack-toolboxes-docs-test"
|
||||||
|
WORKDIR="/home/tsysdevstack/docs"
|
||||||
|
|
||||||
|
echo "Starting tests for tsysdevstack-toolboxes-docs container..."
|
||||||
|
|
||||||
|
# Function to run a command in the container and check the exit code
|
||||||
|
run_test() {
|
||||||
|
local test_name="$1"
|
||||||
|
local command="$2"
|
||||||
|
local expected_result="${3:-0}" # Default expected result is 0 (success)
|
||||||
|
|
||||||
|
echo "Running test: $test_name"
|
||||||
|
echo "Command: $command"
|
||||||
|
|
||||||
|
# Run the command in the container
|
||||||
|
if docker run --rm --name "${CONTAINER_NAME}-$(date +%s%N)" "$IMAGE_NAME" bash -c "$command"; then
|
||||||
|
if [ "$expected_result" -eq 0 ]; then
|
||||||
|
echo "✓ PASS: $test_name"
|
||||||
|
else
|
||||||
|
echo "✗ FAIL: $test_name - Expected failure but command succeeded"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [ "$expected_result" -ne 0 ]; then
|
||||||
|
echo "✓ PASS: $test_name - Command failed as expected"
|
||||||
|
else
|
||||||
|
echo "✗ FAIL: $test_name - Command failed unexpectedly"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
# Test 1: Check if user is tsysdevstack
|
||||||
|
run_test "User verification" "whoami | grep tsysdevstack"
|
||||||
|
|
||||||
|
# Test 2: Check if required tools are installed
|
||||||
|
run_test "Pandoc installation" "pandoc --version"
|
||||||
|
run_test "MdBook installation" "mdbook --version"
|
||||||
|
run_test "Typst installation" "typst --version"
|
||||||
|
run_test "Marp CLI installation" "marp --version"
|
||||||
|
run_test "Quarto installation" "quarto --version"
|
||||||
|
run_test "YQ installation" "yq --version"
|
||||||
|
run_test "JQ installation" "jq --version"
|
||||||
|
run_test "Vale installation" "vale --version"
|
||||||
|
run_test "BibTool installation" "bibtool -h"
|
||||||
|
run_test "Wkhtmltopdf installation" "wkhtmltopdf --version"
|
||||||
|
run_test "Joplin installation" "npm list -g joplin || echo 'joplin not found via npm'"
|
||||||
|
|
||||||
|
# Test 3: Check if Python is available via mise
|
||||||
|
run_test "Python via mise" "mise exec -- python --version"
|
||||||
|
|
||||||
|
# Test 4: Check if Node.js is available via mise
|
||||||
|
run_test "Node.js via mise" "mise exec -- node --version"
|
||||||
|
|
||||||
|
# Test 5: Check if Rust is available via mise
|
||||||
|
run_test "Rust via mise" "mise exec -- rustc --version"
|
||||||
|
|
||||||
|
# Test 6: Check if Ruby is available via mise
|
||||||
|
run_test "Ruby via mise" "mise exec -- ruby --version"
|
||||||
|
|
||||||
|
# Test 7: Check if TeXLive is properly installed
|
||||||
|
run_test "TeXLive installation" "pdflatex --version"
|
||||||
|
|
||||||
|
# Test 8: Check if Git is available
|
||||||
|
run_test "Git installation" "git --version"
|
||||||
|
|
||||||
|
# Test 9: Check if shells are available
|
||||||
|
run_test "Fish shell installation" "fish --version"
|
||||||
|
run_test "Zsh installation" "zsh --version"
|
||||||
|
run_test "Bash installation" "bash --version"
|
||||||
|
|
||||||
|
# Test 10: Check if Mise is working properly
|
||||||
|
run_test "Mise activation" "source ~/.bashrc && mise --version"
|
||||||
|
|
||||||
|
# Test 11: Test basic functionality - convert markdown to PDF with Pandoc
|
||||||
|
echo "Running advanced test: Pandoc markdown to PDF conversion"
|
||||||
|
cat << 'EOF' > /tmp/test.md
|
||||||
|
% Test Document
|
||||||
|
% Test Author
|
||||||
|
|
||||||
|
# Introduction
|
||||||
|
|
||||||
|
This is a test document to verify that Pandoc is working correctly.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- Pandoc conversion
|
||||||
|
- Markdown formatting
|
||||||
|
- PDF generation
|
||||||
|
|
||||||
|
### Code Block Example
|
||||||
|
|
||||||
|
```python
|
||||||
|
def hello():
|
||||||
|
print("Hello, World!")
|
||||||
|
```
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# Run a simple conversion test inside the container
|
||||||
|
if docker run --rm -v /tmp:/tmp -w /tmp "$IMAGE_NAME" bash -c "pandoc test.md -o test.pdf"; then
|
||||||
|
echo "✓ PASS: Pandoc conversion test"
|
||||||
|
# Clean up the generated file
|
||||||
|
rm -f /tmp/test.pdf
|
||||||
|
else
|
||||||
|
echo "✗ FAIL: Pandoc conversion test"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Test 12: Check if the working directory exists
|
||||||
|
run_test "Working directory exists" "test -d $WORKDIR"
|
||||||
|
|
||||||
|
echo "All tests completed successfully!"
|
||||||
Reference in New Issue
Block a user