Compare commits
No commits in common. "develop" and "master" have entirely different histories.
35 changed files with 4727 additions and 2602 deletions
|
@ -3,7 +3,3 @@ examples
|
||||||
exercises
|
exercises
|
||||||
node_modules
|
node_modules
|
||||||
.drone.yml
|
.drone.yml
|
||||||
docs/*.md
|
|
||||||
docs/**/*.md
|
|
||||||
slides/*.md
|
|
||||||
slides/**/*.md
|
|
||||||
|
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -16,6 +16,3 @@ tmp*
|
||||||
\.vagrant
|
\.vagrant
|
||||||
vendor/bundle
|
vendor/bundle
|
||||||
*.zip
|
*.zip
|
||||||
mkdocs.yml
|
|
||||||
.aider*
|
|
||||||
.env
|
|
||||||
|
|
|
@ -5,10 +5,8 @@ build: theme.css
|
||||||
|
|
||||||
%.css: %.scss
|
%.css: %.scss
|
||||||
cd .. \
|
cd .. \
|
||||||
&& npx sass --no-error-css --no-source-map --style=expanded .marp/$<:.marp/$@ \
|
&& npx node-sass --output-style compressed .marp/$< > .marp/$@ \
|
||||||
|| ( rm -f .marp/$@ && exit 1 )
|
|| ( rm -f .marp/$@ && exit 1 )
|
||||||
|
|
||||||
.PHONY: build
|
.PHONY: build
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -f theme.css
|
|
||||||
|
|
|
@ -7,12 +7,10 @@ $tertiaryColor: #241c1c;
|
||||||
$textColor: #111111;
|
$textColor: #111111;
|
||||||
|
|
||||||
body {
|
body {
|
||||||
/*
|
|
||||||
--primary-color: $primaryColor;
|
--primary-color: $primaryColor;
|
||||||
--secondary-color: $secondaryColor;
|
--secondary-color: $secondaryColor;
|
||||||
--tertiary-color: $tertiaryColor;
|
--tertiary-color: $tertiaryColor;
|
||||||
--text-color: $textColor;
|
--text-color: $textColor;
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
section {
|
section {
|
||||||
|
@ -259,28 +257,3 @@ p img:only-child[alt*="center"] {
|
||||||
margin-right: auto;
|
margin-right: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
section {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
section > h2:nth-child(2),
|
|
||||||
section > h3:nth-child(2),
|
|
||||||
section > h4:nth-child(2),
|
|
||||||
section > h5:nth-child(2),
|
|
||||||
section > h6:nth-child(2),
|
|
||||||
section > p:nth-child(2),
|
|
||||||
section > bc-row:nth-child(2),
|
|
||||||
section > ul:nth-child(2) > li:first-child > p {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
section bc-footer {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 80px;
|
|
||||||
}
|
|
||||||
|
|
||||||
section bc-footer *:last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
217
Makefile
217
Makefile
|
@ -16,55 +16,53 @@ CACHE_DIR=_cache
|
||||||
|
|
||||||
## Internal directories
|
## Internal directories
|
||||||
CACHE_SLIDES_DIR=$(CACHE_DIR)/slides
|
CACHE_SLIDES_DIR=$(CACHE_DIR)/slides
|
||||||
CACHE_DOCS_DIR=$(CACHE_DIR)/docs
|
|
||||||
|
|
||||||
## Output directories
|
## Output directories
|
||||||
BUILD_SLIDES_DIR=$(BUILD_DIR)/slides
|
BUILD_SLIDES_DIR=$(BUILD_DIR)/slides
|
||||||
BUILD_DOCS_DIR=$(BUILD_DIR)/docs
|
BUILD_DOCS_DIR=$(BUILD_DIR)/docs
|
||||||
BUILD_IMAGES_DIR=images
|
BUILD_IMAGES_DIR=images
|
||||||
|
|
||||||
BUILD_VERSION := v$(shell date "+%Y%m%d-%H%M")
|
BUILD_VERSION=v$(shell date "+%Y%m%d-%H%M")
|
||||||
|
|
||||||
## Ports
|
## Ports
|
||||||
DOCS_PORT=5100
|
DOCS_PORT=5100
|
||||||
SLIDES_PORT=5200
|
SLIDES_PORT=5200
|
||||||
|
|
||||||
## Find .md slides
|
## Find .md slides
|
||||||
SLIDES_MDPP := $(shell find -L $(SLIDES_DIR) -regextype sed \( -name '*.mdpp' ! -regex '.*/_.*' \))
|
SLIDES_MDPP=$(shell find -L $(SLIDES_DIR) -regextype sed \( -name '*.mdpp' ! -regex '.*/_.*' \))
|
||||||
SLIDES_MDPP_MD := $(patsubst $(SLIDES_DIR)/%.mdpp,$(CACHE_SLIDES_DIR)/%.mdpp.md,$(SLIDES_MDPP))
|
SLIDES_MDPP_MD=$(patsubst $(SLIDES_DIR)/%.mdpp,$(CACHE_SLIDES_DIR)/%.mdpp.md,$(SLIDES_MDPP))
|
||||||
SLIDES_MDPP_MD_PDF := $(patsubst $(CACHE_SLIDES_DIR)/%.mdpp.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_MDPP_MD))
|
SLIDES_MDPP_MD_PDF=$(patsubst $(CACHE_SLIDES_DIR)/%.mdpp.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_MDPP_MD))
|
||||||
SLIDES_MDPP_MD_PPTX := $(patsubst $(CACHE_SLIDES_DIR)/%.mdpp.md,$(BUILD_SLIDES_DIR)/%.pptx,$(SLIDES_MDPP_MD))
|
SLIDES_MDPP_MD_PPTX=$(patsubst $(CACHE_SLIDES_DIR)/%.mdpp.md,$(BUILD_SLIDES_DIR)/%.pptx,$(SLIDES_MDPP_MD))
|
||||||
|
|
||||||
SLIDES_MD := $(shell find -L $(SLIDES_DIR) -regextype sed \( -name '*.md' ! -regex '.*/_.*' \)) $(SLIDES_MDPP_MD)
|
SLIDES_MD=$(shell find -L $(SLIDES_DIR) -regextype sed \( -name '*.md' ! -regex '.*/_.*' \)) $(SLIDES_MDPP_MD)
|
||||||
SLIDES_MD_PDF := $(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_MD))
|
SLIDES_MD_PDF=$(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pdf,$(SLIDES_MD))
|
||||||
SLIDES_MD_PPTX := $(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pptx,$(SLIDES_MD))
|
SLIDES_MD_PPTX=$(patsubst $(SLIDES_DIR)/%.md,$(BUILD_SLIDES_DIR)/%.pptx,$(SLIDES_MD))
|
||||||
|
|
||||||
SLIDES_MD_ALL := $(SLIDES_MDPP_MD) $(SLIDES_MD) $(SLIDES_DIR)/autoslide.md
|
SLIDES_MD_ALL=$(SLIDES_MDPP_MD) $(SLIDES_MD) $(SLIDES_DIR)/autoslide.md
|
||||||
SLIDES_PDF_ALL := $(SLIDES_MDPP_MD_PDF) $(SLIDES_MD_PDF) $(BUILD_SLIDES_DIR)/autoslide.pdf
|
SLIDES_PDF_ALL=$(SLIDES_MDPP_MD_PDF) $(SLIDES_MD_PDF) $(BUILD_SLIDES_DIR)/autoslide.pdf
|
||||||
SLIDES_PPTX_ALL := $(SLIDES_MDPP_MD_PPTX) $(SLIDES_MD_PPTX) $(BUILD_SLIDES_DIR)/autoslide.pptx
|
SLIDES_PPTX_ALL=$(SLIDES_MDPP_MD_PPTX) $(SLIDES_MD_PPTX) $(BUILD_SLIDES_DIR)/autoslide.pptx
|
||||||
|
|
||||||
DOCS_MD=$(shell find -L $(DOCS_DIR) -regextype sed \( -name '*.md' ! -regex '.*/_.*' \))
|
DOCS_MD=$(shell find -L $(DOCS_DIR) -regextype sed \( -name '*.md' ! -regex '.*/_.*' \))
|
||||||
|
|
||||||
## Find .uml graphs
|
## Find .uml graphs
|
||||||
DOCS_IMAGES_UML := $(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.uml' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_UML=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.uml' ! -regex '.*/_.*' \))
|
||||||
DOCS_IMAGES_UML_SVG := $(patsubst $(IMAGES_DIR)/%.uml,$(BUILD_IMAGES_DIR)/%.uml.svg,$(DOCS_IMAGES_UML))
|
DOCS_IMAGES_UML_SVG=$(patsubst $(IMAGES_DIR)/%.uml,$(BUILD_IMAGES_DIR)/%.uml.svg,$(DOCS_IMAGES_UML))
|
||||||
|
|
||||||
## Find .dot graphs
|
## Find .dot graphs
|
||||||
DOCS_IMAGES_DOT := $(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.dot' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_DOT=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.dot' ! -regex '.*/_.*' \))
|
||||||
DOCS_IMAGES_DOT_SVG := $(patsubst $(IMAGES_DIR)/%.dot,$(BUILD_IMAGES_DIR)/%.dot.svg,$(DOCS_IMAGES_DOT))
|
DOCS_IMAGES_DOT_SVG=$(patsubst $(IMAGES_DIR)/%.dot,$(BUILD_IMAGES_DIR)/%.dot.svg,$(DOCS_IMAGES_DOT))
|
||||||
|
|
||||||
## Find .circo graphs
|
## Find .circo graphs
|
||||||
DOCS_IMAGES_CIRCO := $(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.circo' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_CIRCO=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.circo' ! -regex '.*/_.*' \))
|
||||||
DOCS_IMAGES_CIRCO_SVG := $(patsubst $(IMAGES_DIR)/%.circo,$(BUILD_IMAGES_DIR)/%.circo.svg,$(DOCS_IMAGES_CIRCO))
|
DOCS_IMAGES_CIRCO_SVG=$(patsubst $(IMAGES_DIR)/%.circo,$(BUILD_IMAGES_DIR)/%.circo.svg,$(DOCS_IMAGES_CIRCO))
|
||||||
|
|
||||||
## Find .ora images
|
## Find .ora images
|
||||||
DOCS_IMAGES_ORA := $(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.ora' ! -regex '.*/_.*' \))
|
DOCS_IMAGES_ORA=$(shell find -L $(IMAGES_DIR) -regextype sed \( -name '*.ora' ! -regex '.*/_.*' \))
|
||||||
DOCS_IMAGES_ORA_PNG := $(patsubst $(IMAGES_DIR)/%.ora,$(BUILD_IMAGES_DIR)/%.ora.png,$(DOCS_IMAGES_ORA))
|
DOCS_IMAGES_ORA_PNG=$(patsubst $(IMAGES_DIR)/%.ora,$(BUILD_IMAGES_DIR)/%.ora.png,$(DOCS_IMAGES_ORA))
|
||||||
|
|
||||||
## Merge all lists
|
## Merge all lists
|
||||||
DOCS_IMAGES_SVG := $(DOCS_IMAGES_DOT_SVG) $(DOCS_IMAGES_CIRCO_SVG) $(DOCS_IMAGES_UML_SVG)
|
DOCS_IMAGES_SVG=$(DOCS_IMAGES_DOT_SVG) $(DOCS_IMAGES_CIRCO_SVG) $(DOCS_IMAGES_UML_SVG)
|
||||||
DOCS_IMAGES_PNG := $(DOCS_IMAGES_ORA_PNG)
|
DOCS_IMAGES_PNG=$(DOCS_IMAGES_ORA_PNG)
|
||||||
export
|
|
||||||
|
|
||||||
all: help
|
all: help
|
||||||
|
|
||||||
|
@ -72,8 +70,17 @@ all: help
|
||||||
## Install prerequisites
|
## Install prerequisites
|
||||||
##
|
##
|
||||||
|
|
||||||
.PHONY: prepare
|
prepare: prepare-slides prepare-docs ## install prerequisites
|
||||||
prepare:
|
|
||||||
|
prepare-slides: ## install prerequisites for PDF slides only
|
||||||
|
npm install
|
||||||
|
npm rebuild node-sass
|
||||||
|
npx browserslist@latest --update-db
|
||||||
|
|
||||||
|
prepare-docs: ## install prerequisites for static docs site only
|
||||||
|
pipenv install
|
||||||
|
|
||||||
|
.PHONY: prepare prepare-slides prepare-docs
|
||||||
|
|
||||||
images: $(DOCS_IMAGES_SVG) $(DOCS_IMAGES_PNG) ## build images
|
images: $(DOCS_IMAGES_SVG) $(DOCS_IMAGES_PNG) ## build images
|
||||||
@echo "Source:"
|
@echo "Source:"
|
||||||
|
@ -108,13 +115,87 @@ $(CACHE_SLIDES_DIR)/%.mdpp.md: $(SLIDES_DIR)/%.mdpp
|
||||||
m4 -d -I$(SLIDES_DIR) -I$(CACHE_SLIDES_DIR) $< > $@ \
|
m4 -d -I$(SLIDES_DIR) -I$(CACHE_SLIDES_DIR) $< > $@ \
|
||||||
|| ( rm -f $@ && exit 1 )
|
|| ( rm -f $@ && exit 1 )
|
||||||
|
|
||||||
|
.marp/theme.css:
|
||||||
|
cd .marp && $(MAKE) theme.css
|
||||||
|
|
||||||
watch: ## run development server
|
watch: ## run development server
|
||||||
$(MAKE) autoslide
|
$(MAKE) autoslide
|
||||||
pipenv run honcho start
|
pipenv run honcho start
|
||||||
|
|
||||||
serve: watch
|
autoslide: $(SLIDES_DIR)/autoslide.md | $(BUILD_SLIDES_DIR)
|
||||||
|
|
||||||
.PHONY: watch serve
|
$(SLIDES_DIR)/autoslide.md: $(DOCS_MD)
|
||||||
|
find -L $(DOCS_DIR) -regextype sed \( -regex '.*/[0-9][^/]*\.md' ! -regex '.*/_.*' \) -print0 \
|
||||||
|
| sort -z \
|
||||||
|
| xargs -0 sed '/^---$$/,/^---$$/d' \
|
||||||
|
> $(SLIDES_DIR)/autoslide.md
|
||||||
|
|
||||||
|
watch-autoslide-internal:
|
||||||
|
# FIXME: use watchexec instead
|
||||||
|
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
|
||||||
|
sleep 0.25 ; \
|
||||||
|
$(MAKE) autoslide ; \
|
||||||
|
done
|
||||||
|
|
||||||
|
watch-tocupdate-internal:
|
||||||
|
# FIXME: use watchexec instead
|
||||||
|
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
|
||||||
|
sleep 2 ; \
|
||||||
|
$(MAKE) images ; \
|
||||||
|
done
|
||||||
|
|
||||||
|
watch-docs-internal:
|
||||||
|
pipenv run mkdocs serve --dev-addr 0.0.0.0:$(DOCS_PORT)
|
||||||
|
|
||||||
|
watch-slides-internal: .marp/theme.css
|
||||||
|
PORT=$(SLIDES_PORT) \
|
||||||
|
npx marp \
|
||||||
|
--allow-local-files \
|
||||||
|
--engine $$(pwd)/.marp/engine.js \
|
||||||
|
--html \
|
||||||
|
--theme $$(pwd)/.marp/theme.css \
|
||||||
|
-w $(SLIDES_DIR) \
|
||||||
|
-s
|
||||||
|
|
||||||
|
watch-slides: ## run development server for PDF slides
|
||||||
|
pipenv run honcho start slides autoslide
|
||||||
|
|
||||||
|
watch-docs: ## run development server for static docs site
|
||||||
|
pipenv run honcho start docs toc
|
||||||
|
|
||||||
|
serve: watch
|
||||||
|
serve-slides: watch-slides
|
||||||
|
serve-docs: watch-docs
|
||||||
|
|
||||||
|
.PHONY: watch watch-slides watch-docs watch-slides-internal watch-docs-internal serve serve-docs serve-slides
|
||||||
|
|
||||||
|
|
||||||
|
$(BUILD_SLIDES_DIR)/%.pdf: $(CACHE_SLIDES_DIR)/%.mdpp.md | $(BUILD_SLIDES_DIR) .marp/theme.css
|
||||||
|
npx marp --allow-local-files \
|
||||||
|
--engine $$(pwd)/.marp/engine.js \
|
||||||
|
--html \
|
||||||
|
--theme $$(pwd)/.marp/theme.css \
|
||||||
|
$< \
|
||||||
|
-o $@
|
||||||
|
|
||||||
|
$(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
|
||||||
|
npx marp --allow-local-files \
|
||||||
|
--engine $$(pwd)/.marp/engine.js \
|
||||||
|
--html \
|
||||||
|
--theme $$(pwd)/.marp/theme.css \
|
||||||
|
$< \
|
||||||
|
-o $@
|
||||||
|
|
||||||
|
$(BUILD_SLIDES_DIR)/%.pptx: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
|
||||||
|
npx marp --allow-local-files \
|
||||||
|
--engine $$(pwd)/.marp/engine.js \
|
||||||
|
--html \
|
||||||
|
--theme $$(pwd)/.marp/theme.css \
|
||||||
|
$< \
|
||||||
|
-o $@
|
||||||
|
|
||||||
|
$(BUILD_SLIDES_DIR):
|
||||||
|
mkdir -p $(BUILD_SLIDES_DIR)
|
||||||
|
|
||||||
##
|
##
|
||||||
## Build final documents
|
## Build final documents
|
||||||
|
@ -125,11 +206,45 @@ serve: watch
|
||||||
|
|
||||||
build: build-pdf build-html ## build all documents as PDF and HTML files
|
build: build-pdf build-html ## build all documents as PDF and HTML files
|
||||||
|
|
||||||
build-pptx: ## build both docs and slides as PPTX files
|
build-pptx: build-slides-pptx ## build slides as PPTX files
|
||||||
build-html: ## build both docs and slides as HTML files
|
|
||||||
build-pdf: ## build both docs and slides as PDF files
|
|
||||||
|
|
||||||
.PHONY: build
|
build-pdf: build-docs-pdf build-slides-pdf ## build both docs and slides as PDF files
|
||||||
|
|
||||||
|
build-html: build-docs-html build-slides-html ## build both docs and slides as HTML files
|
||||||
|
|
||||||
|
build-docs: build-docs-pdf build-docs-html ## build only docs as PDF and HTML
|
||||||
|
|
||||||
|
build-slides: build-slides-pdf build-slides-html ## build only slides as PDF and HTML
|
||||||
|
|
||||||
|
build-slides-pptx: $(SLIDES_PPTX_ALL) $(SLIDES_MD_ALL) ## build PPTX slides only
|
||||||
|
|
||||||
|
build-slides-pdf: $(SLIDES_PDF_ALL) $(SLIDES_MD_ALL) ## build PDF slides only
|
||||||
|
|
||||||
|
build-slides-html: $(SLIDES_HTML_ALL) ## build HTML slides only
|
||||||
|
|
||||||
|
merge-slides: $(SLIDES_MDPP_MD) $(SLIDES_MD_ALL)
|
||||||
|
|
||||||
|
build-docs-pdf: ## build pdf docs only
|
||||||
|
mkdir -p $(BUILD_DOCS_DIR)
|
||||||
|
rm -f $(BUILD_DOCS_DIR)/combined.pdf
|
||||||
|
PYTHONUTF8=1 \
|
||||||
|
ENABLE_PDF_EXPORT=1 \
|
||||||
|
pipenv run mkdocs build \
|
||||||
|
--site-dir $(BUILD_DOCS_DIR)
|
||||||
|
pdftk \
|
||||||
|
$$(find -L $(BUILD_DOCS_DIR) -name *.pdf -not -name index.pdf |sort ) \
|
||||||
|
cat output $(BUILD_DOCS_DIR)/docs.pdf
|
||||||
|
|
||||||
|
build-docs-html: ## build static docs site only
|
||||||
|
mkdir -p $(BUILD_DOCS_DIR)
|
||||||
|
pipenv run mkdocs build \
|
||||||
|
--site-dir $(BUILD_DOCS_DIR)
|
||||||
|
|
||||||
|
.PHONY: build build-slides
|
||||||
|
|
||||||
|
deploy-docs: ## deploy static docs site to github
|
||||||
|
git push $(DEPLOY_REPO)
|
||||||
|
pipenv run mkdocs gh-deploy $(DEPLOY_OPTS)
|
||||||
|
|
||||||
help: ## print this help
|
help: ## print this help
|
||||||
@echo "Usage: make <target>"
|
@echo "Usage: make <target>"
|
||||||
|
@ -140,7 +255,7 @@ help: ## print this help
|
||||||
/^[a-zA-Z_-]+:.*?## / \
|
/^[a-zA-Z_-]+:.*?## / \
|
||||||
{ sub("\\\\n",sprintf("\n%22c"," "), $$2); \
|
{ sub("\\\\n",sprintf("\n%22c"," "), $$2); \
|
||||||
printf("\033[36m%-20s\033[0m %s\n", $$1, $$2); \
|
printf("\033[36m%-20s\033[0m %s\n", $$1, $$2); \
|
||||||
}' $(MAKEFILE_LIST) | sort
|
}' $(MAKEFILE_LIST)
|
||||||
@echo ""
|
@echo ""
|
||||||
|
|
||||||
|
|
||||||
|
@ -148,14 +263,36 @@ help: ## print this help
|
||||||
## Clean
|
## Clean
|
||||||
##
|
##
|
||||||
|
|
||||||
clean: # remove generated documents
|
clean: clean-slides clean-docs # remove generated documents
|
||||||
|
|
||||||
.PHONY: clean
|
clean-slides:
|
||||||
|
rm -fr $(BUILD_SLIDES_DIR) # remove generated PDF slides
|
||||||
|
|
||||||
include tasks/docs.mk
|
clean-docs:
|
||||||
include tasks/slides.mk
|
rm -fr $(BUILD_DOCS_DIR) # remove generated static docs site
|
||||||
include tasks/docker.mk
|
|
||||||
include tasks/utils.mk
|
|
||||||
include tasks/images.mk
|
|
||||||
include tasks/shell.mk
|
|
||||||
|
|
||||||
|
.PHONY: clean clean-slides clean-docs
|
||||||
|
|
||||||
|
##
|
||||||
|
## Utilities
|
||||||
|
##
|
||||||
|
|
||||||
|
fixme:
|
||||||
|
@egrep --color -rni '(fixme)' $(DOCS_DIR) $(SLIDES_DIR)
|
||||||
|
|
||||||
|
.PHONY: fixme
|
||||||
|
|
||||||
|
docker-build: ## build docker image
|
||||||
|
docker build \
|
||||||
|
--file docker/Dockerfile \
|
||||||
|
--tag glenux/docmachine:$(BUILD_VERSION) \
|
||||||
|
.
|
||||||
|
docker tag \
|
||||||
|
glenux/docmachine:$(BUILD_VERSION) \
|
||||||
|
glenux/docmachine:latest
|
||||||
|
|
||||||
|
docker-push: ## push docker image
|
||||||
|
env docker push glenux/docmachine:latest
|
||||||
|
|
||||||
|
docker-pull: ## download docker image
|
||||||
|
env docker pull glenux/docmachine:latest
|
||||||
|
|
1253
Pipfile.lock
generated
1253
Pipfile.lock
generated
File diff suppressed because it is too large
Load diff
10
Procfile
10
Procfile
|
@ -1,7 +1,5 @@
|
||||||
# src-docs: make sync-docs-internal
|
docs: make watch-docs-internal
|
||||||
# src-slides: make sync-slides-internal
|
slides: make watch-slides-internal
|
||||||
src-autoslide: make watch-autoslide-internal
|
toc: make watch-tocupdate-internal
|
||||||
watch-docs: make watch-docs-internal
|
autoslide: make watch-autoslide-internal
|
||||||
watch-slides: make watch-slides-internal
|
|
||||||
watch-toc: make watch-tocupdate-internal
|
|
||||||
# proxy: caddy
|
# proxy: caddy
|
||||||
|
|
|
@ -2,34 +2,14 @@
|
||||||
version: "3.4"
|
version: "3.4"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
# app:
|
app:
|
||||||
# build:
|
|
||||||
# context: .
|
|
||||||
# dockerfile: docker/Dockerfile
|
|
||||||
# image: glenux/teaching-boilerplate
|
|
||||||
# environment: {}
|
|
||||||
# ports:
|
|
||||||
# - 5100:5100
|
|
||||||
# - 5200:5200
|
|
||||||
|
|
||||||
slides:
|
|
||||||
build:
|
build:
|
||||||
context: .
|
context: .
|
||||||
dockerfile: docker/Dockerfile.slides
|
dockerfile: docker/Dockerfile
|
||||||
image: glenux/docmachine-slides:latest
|
image: glenux/teaching-boilerplate
|
||||||
environment: {}
|
|
||||||
ports:
|
|
||||||
- 5200:5200
|
|
||||||
|
|
||||||
docs:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: docker/Dockerfile.docs
|
|
||||||
image: glenux/docmachine-docs:latest
|
|
||||||
environment: {}
|
environment: {}
|
||||||
ports:
|
ports:
|
||||||
- 5100:5100
|
- 5100:5100
|
||||||
|
- 5200:5200
|
||||||
# proxy:
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
FROM node:18-bookworm-slim
|
FROM node:18-bookworm-slim
|
||||||
LABEL maintainer="Glenn ROLLAND glenux@glenux.net"
|
LABEL maintainer="Glenn ROLLAND glenux@glenux.net"
|
||||||
|
|
||||||
ENV DOCMACHINE_DOCS_ENABLE=1
|
|
||||||
ENV DOCMACHINE_SLIDES_ENABLE=1
|
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends python3 python3-pip python-is-python3 pipenv \
|
&& apt-get install -y --no-install-recommends python3 python3-pip pipenv \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
||||||
&& truncate -s 0 /var/log/*log
|
&& truncate -s 0 /var/log/*log
|
||||||
|
@ -19,7 +16,7 @@ RUN apt-get update \
|
||||||
|
|
||||||
# Tools for building pdfs
|
# Tools for building pdfs
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y --no-install-recommends make m4 chromium pandoc ghc libghc-pandoc-dev lmodern texlive texlive-xetex texlive-fonts-extra texlive-fonts-recommended librsvg2-bin fonts-noto-mono \
|
&& apt-get install -y --no-install-recommends make pdftk m4 chromium \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
||||||
&& truncate -s 0 /var/log/*log
|
&& truncate -s 0 /var/log/*log
|
||||||
|
@ -27,7 +24,7 @@ RUN apt-get update \
|
||||||
# External tools
|
# External tools
|
||||||
# yq => manage YML
|
# yq => manage YML
|
||||||
RUN curl -sSL -o /usr/local/bin/yq \
|
RUN curl -sSL -o /usr/local/bin/yq \
|
||||||
https://github.com/mikefarah/yq/releases/download/v4.44.6/yq_linux_amd64 \
|
https://github.com/mikefarah/yq/releases/download/v4.18.1/yq_linux_amd64 \
|
||||||
&& chmod +x /usr/local/bin/yq
|
&& chmod +x /usr/local/bin/yq
|
||||||
|
|
||||||
COPY . /app
|
COPY . /app
|
||||||
|
@ -39,7 +36,8 @@ ENV LANG=C.UTF-8 \
|
||||||
PIPENV_HIDE_EMOJIS=1 \
|
PIPENV_HIDE_EMOJIS=1 \
|
||||||
PIPENV_VENV_IN_PROJECT=1
|
PIPENV_VENV_IN_PROJECT=1
|
||||||
|
|
||||||
RUN make prepare SYSTEM_INSTALL=1
|
RUN ln -sf python3 /usr/bin/python \
|
||||||
|
&& make prepare SYSTEM_INSTALL=1
|
||||||
|
|
||||||
ENTRYPOINT ["/app/docker/entrypoint.sh"]
|
ENTRYPOINT ["/app/docker/entrypoint.sh"]
|
||||||
CMD ["watch"]
|
CMD ["watch"]
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
FROM node:18-bookworm-slim
|
|
||||||
LABEL maintainer="Glenn ROLLAND glenux@glenux.net"
|
|
||||||
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y --no-install-recommends python3 python3-pip pipenv python3-pypandoc \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
|
||||||
&& truncate -s 0 /var/log/*log
|
|
||||||
|
|
||||||
# Tools for running the common parts
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y --no-install-recommends make build-essential inotify-tools gosu unzip curl rsync \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
|
||||||
&& truncate -s 0 /var/log/*log
|
|
||||||
|
|
||||||
# Tools for building pdfs
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y --no-install-recommends make m4 chromium pandoc ghc libghc-pandoc-dev lmodern texlive-latex-recommended texlive-latex-base texlive-latex-extra \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
|
||||||
&& truncate -s 0 /var/log/*log
|
|
||||||
|
|
||||||
# External tools
|
|
||||||
# yq => manage YML
|
|
||||||
RUN curl -sSL -o /usr/local/bin/yq \
|
|
||||||
https://github.com/mikefarah/yq/releases/download/v4.44.6/yq_linux_amd64 \
|
|
||||||
&& chmod +x /usr/local/bin/yq
|
|
||||||
|
|
||||||
COPY . /app
|
|
||||||
COPY .marp /app/.marp
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
ENV LANG=C.UTF-8 \
|
|
||||||
LC_ALL=C.UTF-8 \
|
|
||||||
PIPENV_HIDE_EMOJIS=1 \
|
|
||||||
PIPENV_VENV_IN_PROJECT=1
|
|
||||||
|
|
||||||
RUN ln -sf python3 /usr/bin/python \
|
|
||||||
&& make prepare SYSTEM_INSTALL=1
|
|
||||||
|
|
||||||
ENTRYPOINT ["/app/docker/entrypoint.sh"]
|
|
||||||
CMD ["watch"]
|
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
FROM node:18-bookworm-slim
|
|
||||||
LABEL maintainer="Glenn ROLLAND glenux@glenux.net"
|
|
||||||
|
|
||||||
# RUN apt-get update \
|
|
||||||
# && apt-get install -y --no-install-recommends python3 python3-pip pipenv python3-pypandoc \
|
|
||||||
# && apt-get clean \
|
|
||||||
# && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
|
||||||
# && truncate -s 0 /var/log/*log
|
|
||||||
|
|
||||||
# # Tools for running the common parts
|
|
||||||
# RUN apt-get update \
|
|
||||||
# && apt-get install -y --no-install-recommends make build-essential inotify-tools gosu unzip curl rsync \
|
|
||||||
# && apt-get clean \
|
|
||||||
# && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
|
||||||
# && truncate -s 0 /var/log/*log
|
|
||||||
|
|
||||||
# Tools for building pdfs
|
|
||||||
RUN apt-get update \
|
|
||||||
&& apt-get install -y --no-install-recommends make m4 chromium \
|
|
||||||
&& apt-get clean \
|
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
|
|
||||||
&& truncate -s 0 /var/log/*log
|
|
||||||
|
|
||||||
# External tools
|
|
||||||
# yq => manage YML
|
|
||||||
RUN curl -sSL -o /usr/local/bin/yq \
|
|
||||||
https://github.com/mikefarah/yq/releases/download/v4.44.6/yq_linux_amd64 \
|
|
||||||
&& chmod +x /usr/local/bin/yq
|
|
||||||
|
|
||||||
COPY . /app
|
|
||||||
COPY .marp /app/.marp
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
ENV LANG=C.UTF-8 \
|
|
||||||
LC_ALL=C.UTF-8 \
|
|
||||||
PIPENV_HIDE_EMOJIS=1 \
|
|
||||||
PIPENV_VENV_IN_PROJECT=1
|
|
||||||
|
|
||||||
RUN ln -sf /usr/bin/python3 /usr/bin/python \
|
|
||||||
&& make prepare SYSTEM_INSTALL=1
|
|
||||||
|
|
||||||
ENTRYPOINT ["/app/docker/entrypoint.sh"]
|
|
||||||
CMD ["watch"]
|
|
||||||
|
|
|
@ -6,43 +6,32 @@ set -e
|
||||||
ARGS="$*"
|
ARGS="$*"
|
||||||
echo "Arguments: $ARGS"
|
echo "Arguments: $ARGS"
|
||||||
|
|
||||||
EXT_UID="${EXT_UID:-999}"
|
EXT_UID=${EXT_UID:-999}
|
||||||
EXT_GID="${EXT_GID:-999}"
|
EXT_GID=${EXT_GID:-999}
|
||||||
DOCMACHINE_DOCS_ENABLE="${DOCMACHINE_DOCS_ENABLE:-1}"
|
|
||||||
DOCMACHINE_SLIDES_ENABLE="${DOCMACHINE_SLIDES_ENABLE:-1}"
|
|
||||||
|
|
||||||
gx_workdir_prepare() {
|
# Create missing directories
|
||||||
# Create missing directories
|
mkdir -p _cache
|
||||||
mkdir -p _cache
|
mkdir -p _build
|
||||||
mkdir -p _build
|
mkdir -p .marp
|
||||||
if [ "$DOCMACHINE_SLIDES_ENABLE" = "1" ]; then
|
mkdir -p /home/appuser
|
||||||
mkdir -p .marp
|
|
||||||
fi
|
|
||||||
mkdir -p /home/appuser
|
|
||||||
}
|
|
||||||
|
|
||||||
gx_users_prepare() {
|
# Create user with given ID if needed
|
||||||
# Create user with given ID if needed
|
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/group ; then
|
||||||
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/group ; then
|
|
||||||
groupadd -g "$EXT_GID" appuser
|
groupadd -g "$EXT_GID" appuser
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Create group with given ID if needed
|
# Create group with given ID if needed
|
||||||
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/passwd ; then
|
if ! grep -q "^[^:]*:[^:]*:$EXT_UID:" /etc/passwd ; then
|
||||||
useradd -r -u "$EXT_UID" -g appuser appuser
|
useradd -r -u "$EXT_UID" -g appuser appuser
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# echo "Setting permissions to $EXT_UID:$EXT_GID"
|
chown -R "$EXT_UID:$EXT_GID" _cache
|
||||||
# chown -R "$EXT_UID:$EXT_GID" _cache
|
chown -R "$EXT_UID:$EXT_GID" _build
|
||||||
# chown -R "$EXT_UID:$EXT_GID" _build
|
chown -R "$EXT_UID:$EXT_GID" .marp
|
||||||
# chown -R "$EXT_UID:$EXT_GID" .marp
|
chown -R "$EXT_UID:$EXT_GID" /home/appuser
|
||||||
# chown -R "$EXT_UID:$EXT_GID" /home/appuser
|
|
||||||
# chown -R "$EXT_UID:$EXT_GID" slides
|
|
||||||
# chown -R "$EXT_UID:$EXT_GID" docs
|
|
||||||
}
|
|
||||||
|
|
||||||
gx_docs_configure() {
|
|
||||||
# Patch mkdocs configuration
|
# Patch mkdocs configuration
|
||||||
|
# set -x
|
||||||
if [ -f mkdocs-patch.yml ]; then
|
if [ -f mkdocs-patch.yml ]; then
|
||||||
# patch reference mkdocs with user-provided options
|
# patch reference mkdocs with user-provided options
|
||||||
yq eval-all '. as $item ireduce ({}; . * $item)' \
|
yq eval-all '. as $item ireduce ({}; . * $item)' \
|
||||||
|
@ -53,20 +42,10 @@ else
|
||||||
# use reference mkdocs only (no options)
|
# use reference mkdocs only (no options)
|
||||||
ln -s mkdocs-source.yml mkdocs.yml
|
ln -s mkdocs-source.yml mkdocs.yml
|
||||||
fi
|
fi
|
||||||
}
|
# set +x
|
||||||
|
|
||||||
##
|
if [ "$1" = "shell" ]; then
|
||||||
## Main
|
|
||||||
##
|
|
||||||
gx_workdir_prepare
|
|
||||||
gx_users_prepare
|
|
||||||
if [ "$DOCMACHINE_DOCS_ENABLE" = "1" ]; then
|
|
||||||
gx_docs_configure
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$1" = "supershell" ]; then
|
|
||||||
exec bash
|
exec bash
|
||||||
else
|
else
|
||||||
# exec gosu "$EXT_UID:$EXT_GID" make "$@"
|
exec gosu "$EXT_UID:$EXT_GID" make "$@"
|
||||||
exec make "$@"
|
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -8,16 +8,6 @@ hr {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
h1[bc-docs-hidden]
|
|
||||||
h2[bc-docs-hidden]
|
|
||||||
h3[bc-docs-hidden]
|
|
||||||
h4[bc-docs-hidden]
|
|
||||||
h5[bc-docs-hidden]
|
|
||||||
h6[bc-docs-hidden] {
|
|
||||||
display: none;
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
@page {
|
@page {
|
||||||
size: a4 portrait;
|
size: a4 portrait;
|
||||||
margin: 25mm 10mm 25mm 10mm;
|
margin: 25mm 10mm 25mm 10mm;
|
||||||
|
@ -28,7 +18,7 @@ h6[bc-docs-hidden] {
|
||||||
|
|
||||||
@top-left {
|
@top-left {
|
||||||
font-size: 70%;
|
font-size: 70%;
|
||||||
content: 'Formation'; /* « Cloud & Enjeux »'; */
|
content: 'Formation « Cloud & Enjeux »';
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@top-center {
|
@top-center {
|
37
images/sample-mindmap.uml
Normal file
37
images/sample-mindmap.uml
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
|
||||||
|
@startmindmap
|
||||||
|
|
||||||
|
<style>
|
||||||
|
node {
|
||||||
|
Shadowing 0.0
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
* Types d'utilisateurs
|
||||||
|
|
||||||
|
right side
|
||||||
|
|
||||||
|
** Chercheurs d'emploi
|
||||||
|
***[#FFCCCC] FIXME: clarifier les sous-types\nd'apres les réponses au questionnaire
|
||||||
|
** Structure d'accompagnement
|
||||||
|
*** Responsable d'accompagnement
|
||||||
|
*** Chargé d'accompagnement
|
||||||
|
****_ Conseiller·e d'orientation
|
||||||
|
****_ Coach
|
||||||
|
****_ Mentor ou expert·e
|
||||||
|
****_ Parrain ou marraine
|
||||||
|
****_ Animateur·trice
|
||||||
|
****_ Révélateur de talent\nou facilitateur·trice
|
||||||
|
****_ Influenceur·se
|
||||||
|
****[#FFCCCC] FIXME: sont-ils équivalents ?
|
||||||
|
|
||||||
|
** TousTesPossibles\n LesCollectifsEmploi
|
||||||
|
*** Animateur·trice réseau
|
||||||
|
***[#FFCCCC] FIXME: Modérateur
|
||||||
|
****_ Inter structures ?
|
||||||
|
****_ Intra structures ?
|
||||||
|
*** Administrateur·trice plate-forme (si centralisé)
|
||||||
|
** Pole Emploi
|
||||||
|
*** Conseiller d'orientation
|
||||||
|
*** Directeur structure
|
||||||
|
@endmindmap
|
|
@ -57,7 +57,6 @@ extra_javascript:
|
||||||
markdown_extensions:
|
markdown_extensions:
|
||||||
- footnotes
|
- footnotes
|
||||||
- admonition
|
- admonition
|
||||||
# - md_in_html
|
|
||||||
- toc:
|
- toc:
|
||||||
permalink: '#'
|
permalink: '#'
|
||||||
|
|
||||||
|
|
36
overlay.sh
36
overlay.sh
|
@ -1,36 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
UID=$(id -u)
|
|
||||||
GID=$(id -g)
|
|
||||||
CURDIR=$(pwd)
|
|
||||||
|
|
||||||
set -u
|
|
||||||
set -e
|
|
||||||
|
|
||||||
echo "Umounting merge directory if it is mounted"
|
|
||||||
if mount | grep -q "${CURDIR}.merge"; then
|
|
||||||
sudo umount -lf "${CURDIR}.merge"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# echo "Removing old upper directory"
|
|
||||||
# sudo rm -rf "${CURDIR}.upper"
|
|
||||||
|
|
||||||
echo "Creating directories"
|
|
||||||
sudo mkdir -p "${CURDIR}.upper"
|
|
||||||
sudo mkdir -p "${CURDIR}.workdir"
|
|
||||||
sudo mkdir -p "${CURDIR}.merge"
|
|
||||||
|
|
||||||
echo "Setting permissions"
|
|
||||||
sudo chown "$UID:$GID" "${CURDIR}.upper"
|
|
||||||
sudo chown "$UID:$GID" "${CURDIR}.workdir"
|
|
||||||
sudo chown "$UID:$GID" "${CURDIR}.merge"
|
|
||||||
|
|
||||||
echo "Mounting filesystem"
|
|
||||||
sudo mount -t overlay \
|
|
||||||
-o "lowerdir=${CURDIR},upperdir=${CURDIR}.upper,workdir=${CURDIR}.workdir" \
|
|
||||||
overlay \
|
|
||||||
"${CURDIR}.merge"
|
|
||||||
|
|
||||||
echo "Running shell"
|
|
||||||
cd "${CURDIR}.merge" || exit 1
|
|
||||||
exec $SHELL
|
|
4965
package-lock.json
generated
4965
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -12,11 +12,11 @@
|
||||||
"author": "",
|
"author": "",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@marp-team/marp-cli": "^1.4.1",
|
"@marp-team/marp-cli": "^3.4.0",
|
||||||
"@marp-team/marp-core": "^3.9.0",
|
"@marp-team/marp-core": "^3.9.0",
|
||||||
"foreman": "^3.0.1",
|
"foreman": "^3.0.1",
|
||||||
"markdown-it-footnote": "^3.0.2",
|
"markdown-it-footnote": "^3.0.2",
|
||||||
"markdown-it-highlight-lines": "^1.0.2",
|
"markdown-it-highlight-lines": "^1.0.2",
|
||||||
"sass": "^1.79.3"
|
"node-sass": "^7.0.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
# vim: set ft=make :
|
|
||||||
|
|
||||||
docker-build: ## build docker image
|
|
||||||
docker build \
|
|
||||||
--file docker/Dockerfile \
|
|
||||||
--tag glenux/docmachine:$(BUILD_VERSION) \
|
|
||||||
--output type=docker \
|
|
||||||
.
|
|
||||||
docker tag \
|
|
||||||
glenux/docmachine:$(BUILD_VERSION) \
|
|
||||||
glenux/docmachine:latest
|
|
||||||
|
|
||||||
docker-save:
|
|
||||||
env docker save glenux/docmachine:latest > ~/.cache/docmachine/image.tar
|
|
||||||
|
|
||||||
docker-push: ## push docker image
|
|
||||||
env docker push glenux/docmachine:latest
|
|
||||||
|
|
||||||
docker-pull: ## download docker image
|
|
||||||
env docker pull glenux/docmachine:latest
|
|
|
@ -1,66 +0,0 @@
|
||||||
# vim: set ft=make :
|
|
||||||
|
|
||||||
|
|
||||||
prepare-docs: ## install prerequisites for static docs site only
|
|
||||||
pipenv install
|
|
||||||
|
|
||||||
.PHONY: prepare-docs
|
|
||||||
prepare: prepare-docs
|
|
||||||
|
|
||||||
.PHONY: sync-docs-internal
|
|
||||||
sync-docs-internal:
|
|
||||||
@>&2 echo "ERROR: not implemented"
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
.PHONY: clean-docs
|
|
||||||
clean-docs: ## remove generated static docs site
|
|
||||||
rm -fr $(BUILD_DOCS_DIR)
|
|
||||||
|
|
||||||
.PHONY: clean-docs
|
|
||||||
clean: clean-docs
|
|
||||||
|
|
||||||
build-docs-pdf: ## build pdf docs only
|
|
||||||
mkdir -p $(BUILD_DOCS_DIR)
|
|
||||||
mkdir -p $(CACHE_DOCS_DIR)
|
|
||||||
rm -f $(BUILD_DOCS_DIR)/docs.pdf
|
|
||||||
./utils/docs/build_combined.sh $(DOCS_DIR) $(CACHE_DOCS_DIR)/combined.md
|
|
||||||
./utils/docs/build_metadata.sh mkdocs.yml $(CACHE_DOCS_DIR)/metadata.yml
|
|
||||||
./utils/docs/build_pdf.py $(CACHE_DOCS_DIR)/metadata.yml $(CACHE_DOCS_DIR)/combined.md $(BUILD_DOCS_DIR)/docs.pdf
|
|
||||||
# rm -f $(BUILD_DOCS_DIR)/combined.pdf
|
|
||||||
# PYTHONUTF8=1 \
|
|
||||||
# ENABLE_PDF_EXPORT=1 \
|
|
||||||
# pipenv run mkdocs build \
|
|
||||||
# --site-dir $(BUILD_DOCS_DIR)
|
|
||||||
# pdftk \
|
|
||||||
# $$(find -L $(BUILD_DOCS_DIR) -name *.pdf -not -name index.pdf |sort ) \
|
|
||||||
# cat output $(BUILD_DOCS_DIR)/docs.pdf
|
|
||||||
|
|
||||||
.PHONY: build-docs-pdf
|
|
||||||
build-docs: build-docs-pdf
|
|
||||||
|
|
||||||
.PHONY: build-docs-html
|
|
||||||
build-docs-html: ## build static docs site only
|
|
||||||
mkdir -p $(BUILD_DOCS_DIR)
|
|
||||||
pipenv run mkdocs build \
|
|
||||||
--site-dir $(BUILD_DOCS_DIR)
|
|
||||||
|
|
||||||
build-docs: build-docs-html
|
|
||||||
|
|
||||||
build: build-docs
|
|
||||||
|
|
||||||
.PHONY: watch-docs-internal
|
|
||||||
watch-docs-internal:
|
|
||||||
pipenv run mkdocs serve --dev-addr 0.0.0.0:$(DOCS_PORT)
|
|
||||||
|
|
||||||
.PHONY: watch-docs
|
|
||||||
watch-docs: ## run development server for static docs site
|
|
||||||
pipenv run honcho start watch-docs watch-toc
|
|
||||||
|
|
||||||
build-pdf: build-docs-pdf ## build docs as PDF files
|
|
||||||
build-html: build-docs-html ## build docs as HTML files
|
|
||||||
build-docs: build-docs-pdf build-docs-html ## build only docs as PDF and HTML
|
|
||||||
|
|
||||||
.PHONY: serve-docs
|
|
||||||
serve-docs: watch-docs
|
|
||||||
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
|
|
||||||
.PHONY: supershell
|
|
||||||
supershell: shell
|
|
||||||
|
|
||||||
.PHONY: shell
|
|
||||||
shell:
|
|
||||||
@echo "Running shell..."
|
|
||||||
@bash
|
|
||||||
|
|
116
tasks/slides.mk
116
tasks/slides.mk
|
@ -1,116 +0,0 @@
|
||||||
|
|
||||||
.PHONY: clean-slides
|
|
||||||
clean-slides:
|
|
||||||
rm -fr $(BUILD_SLIDES_DIR) # remove generated PDF slides
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean: clean-slides
|
|
||||||
|
|
||||||
.PHONY: watch-slides-internal
|
|
||||||
watch-slides-internal: .marp/theme.css
|
|
||||||
PORT=$(SLIDES_PORT) \
|
|
||||||
npx marp \
|
|
||||||
--allow-local-files \
|
|
||||||
--engine $$(pwd)/.marp/engine.js \
|
|
||||||
--html \
|
|
||||||
--theme $$(pwd)/.marp/theme.css \
|
|
||||||
-w $(SLIDES_DIR) \
|
|
||||||
-s
|
|
||||||
# --theme-set glenux
|
|
||||||
|
|
||||||
.PHONY: watch-slides serve-slides
|
|
||||||
watch-slides: ## run development server for PDF slides
|
|
||||||
pipenv run honcho start watch-slides src-autoslide
|
|
||||||
|
|
||||||
.PHONY: prepare
|
|
||||||
prepare: prepare-slides
|
|
||||||
|
|
||||||
.PHONY: prepare-slides
|
|
||||||
prepare-slides: ## install prerequisites for PDF slides only
|
|
||||||
npm install
|
|
||||||
npm rebuild node-sass
|
|
||||||
npx browserslist@latest --update-db
|
|
||||||
|
|
||||||
|
|
||||||
$(BUILD_SLIDES_DIR)/%.pdf: $(CACHE_SLIDES_DIR)/%.mdpp.md | $(BUILD_SLIDES_DIR) .marp/theme.css
|
|
||||||
npx marp --allow-local-files \
|
|
||||||
--engine $$(pwd)/.marp/engine.js \
|
|
||||||
--html \
|
|
||||||
--theme $$(pwd)/.marp/theme.css \
|
|
||||||
$< \
|
|
||||||
-o $@
|
|
||||||
|
|
||||||
$(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
|
|
||||||
npx marp --allow-local-files \
|
|
||||||
--engine $$(pwd)/.marp/engine.js \
|
|
||||||
--html \
|
|
||||||
--theme $$(pwd)/.marp/theme.css \
|
|
||||||
$< \
|
|
||||||
-o $@
|
|
||||||
|
|
||||||
$(BUILD_SLIDES_DIR)/%.pptx: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
|
|
||||||
npx marp --allow-local-files \
|
|
||||||
--engine $$(pwd)/.marp/engine.js \
|
|
||||||
--html \
|
|
||||||
--theme $$(pwd)/.marp/theme.css \
|
|
||||||
$< \
|
|
||||||
-o $@
|
|
||||||
|
|
||||||
.marp/theme.css:
|
|
||||||
cd .marp && $(MAKE) theme.css
|
|
||||||
|
|
||||||
$(BUILD_SLIDES_DIR):
|
|
||||||
mkdir -p $(BUILD_SLIDES_DIR)
|
|
||||||
|
|
||||||
.PHONY: build-slides
|
|
||||||
build-slides: build-slides-pdf build-slides-html ## build only slides as PDF and HTML
|
|
||||||
|
|
||||||
.PHONY: build-slides-pptx
|
|
||||||
build-slides-pptx: $(SLIDES_PPTX_ALL) $(SLIDES_MD_ALL) ## build PPTX slides only
|
|
||||||
|
|
||||||
.PHONY: build-slides-pdf
|
|
||||||
build-slides-pdf: $(SLIDES_PDF_ALL) $(SLIDES_MD_ALL) ## build PDF slides only
|
|
||||||
|
|
||||||
.PHONY: build-slides-html
|
|
||||||
build-slides-html: $(SLIDES_HTML_ALL) ## build HTML slides only
|
|
||||||
|
|
||||||
.PHONY: merge-slides
|
|
||||||
merge-slides: $(SLIDES_MDPP_MD) $(SLIDES_MD_ALL)
|
|
||||||
|
|
||||||
.PHONY: watch-slides
|
|
||||||
serve-slides: watch-slides
|
|
||||||
|
|
||||||
.PHONY: autoslide
|
|
||||||
autoslide: $(SLIDES_DIR)/autoslide.md | $(BUILD_SLIDES_DIR)
|
|
||||||
|
|
||||||
$(SLIDES_DIR)/autoslide.md: $(DOCS_MD)
|
|
||||||
find -L $(DOCS_DIR) -regextype sed \( -regex '.*/[0-9][^/]*\.md' ! -regex '.*/_.*' \) -print0 \
|
|
||||||
| sort -z \
|
|
||||||
| xargs -0 sed '/^---$$/,/^---$$/d' \
|
|
||||||
> $(SLIDES_DIR)/autoslide.md
|
|
||||||
|
|
||||||
.PHONY: watch-autoslide-internal
|
|
||||||
watch-autoslide-internal:
|
|
||||||
# FIXME: use watchexec instead
|
|
||||||
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
|
|
||||||
sleep 0.25 ; \
|
|
||||||
$(MAKE) autoslide ; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: watch-tocupdate-internal
|
|
||||||
watch-tocupdate-internal:
|
|
||||||
# FIXME: use watchexec instead
|
|
||||||
while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
|
|
||||||
sleep 2 ; \
|
|
||||||
$(MAKE) images ; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: build-slides-pdf
|
|
||||||
build-pdf: build-slides-pdf ## build slides as PDF files
|
|
||||||
|
|
||||||
.PHONY: build-slides-html
|
|
||||||
build-html: build-slides-html ## build slides as HTML files
|
|
||||||
|
|
||||||
.PHONY: build-slides-pptx
|
|
||||||
build-pptx: build-slides-pptx ## build slides as PPTX files
|
|
||||||
|
|
|
@ -1,13 +0,0 @@
|
||||||
# vim: set ft=make :
|
|
||||||
|
|
||||||
##
|
|
||||||
## Utilities
|
|
||||||
##
|
|
||||||
|
|
||||||
fixme:
|
|
||||||
@egrep --color -rni '(fixme)' $(DOCS_DIR) $(SLIDES_DIR)
|
|
||||||
|
|
||||||
debug:
|
|
||||||
echo $(PWD)
|
|
||||||
|
|
||||||
.PHONY: fixme
|
|
|
@ -1,7 +0,0 @@
|
||||||
% blockquote.tex
|
|
||||||
% Stylish blockquote setup
|
|
||||||
\usepackage{tcolorbox} % Load the tcolorbox package for creating colored boxes
|
|
||||||
% Define a new tcolorbox environment named 'myquote' with specified colors
|
|
||||||
\newtcolorbox{myquote}{colback=red!5!white, colframe=red!75!black}
|
|
||||||
% Redefine the standard 'quote' environment to use 'myquote'
|
|
||||||
\renewenvironment{quote}{\begin{myquote}}{\end{myquote}}
|
|
|
@ -1,27 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -ue
|
|
||||||
|
|
||||||
INPUT_DIR="$1"
|
|
||||||
OUTPUT_FILE="$2"
|
|
||||||
|
|
||||||
gx_usage() {
|
|
||||||
echo "Usage: $0 <input_dir> <output_file>"
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -z "$INPUT_DIR" ]; then
|
|
||||||
gx_usage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ -z "$OUTPUT_FILE" ]; then
|
|
||||||
gx_usage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
find -L "$INPUT_DIR" -regextype sed \( -regex '.*/[0-9][^/]*\.md' ! -regex '.*/_.*' \) -print0 \
|
|
||||||
| sort -z \
|
|
||||||
| xargs -0 -iFILE cat FILE \
|
|
||||||
| sed -e 's/^\s*----\s*$//' -e 's,\[\](.*/images/,[](./images/,' \
|
|
||||||
> "$OUTPUT_FILE"
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -ue
|
|
||||||
|
|
||||||
MKDOCS_YML_FILE="${1:-}"
|
|
||||||
OUTPUT_FILE="${2:-}"
|
|
||||||
|
|
||||||
gx_usage() {
|
|
||||||
echo "Usage: $0 <mkdocs_yml_file> <output_file>"
|
|
||||||
echo ""
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ -z "$MKDOCS_YML_FILE" ]; then
|
|
||||||
gx_usage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "$OUTPUT_FILE" ]; then
|
|
||||||
gx_usage
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
TITLE="$(yq -r '.site_name' < "$MKDOCS_YML_FILE")"
|
|
||||||
AUTHOR="$(yq -r '.site_author' < "$MKDOCS_YML_FILE")"
|
|
||||||
|
|
||||||
cat > "$OUTPUT_FILE" <<-MARK
|
|
||||||
---
|
|
||||||
title: Formation
|
|
||||||
subtitle: "$TITLE"
|
|
||||||
author: "$AUTHOR"
|
|
||||||
date: \today
|
|
||||||
MARK
|
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# Usage: ./build.py INPUT_DIR OUTPUT_FILE
|
|
||||||
|
|
||||||
import os
|
|
||||||
# import re
|
|
||||||
import sys
|
|
||||||
import pypandoc
|
|
||||||
|
|
||||||
|
|
||||||
def gx_usage():
|
|
||||||
"""Show usage"""
|
|
||||||
print(f"Usage: {sys.argv[0]} METADATA_FILE INPUT_FILE OUTPUT_FILE")
|
|
||||||
print()
|
|
||||||
|
|
||||||
|
|
||||||
if len(sys.argv) != 4:
|
|
||||||
gx_usage()
|
|
||||||
|
|
||||||
metadata_file = sys.argv[1]
|
|
||||||
if not os.path.exists(metadata_file):
|
|
||||||
print(f"Metadata file not found: {metadata_file}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
input_file = sys.argv[2]
|
|
||||||
if not os.path.exists(input_file):
|
|
||||||
print(f"Input file not found: {input_file}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Get second
|
|
||||||
output_file = sys.argv[3]
|
|
||||||
if os.path.exists(output_file):
|
|
||||||
print(f"Output file already exists: {output_file}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
print(f"Metadata: {metadata_file}")
|
|
||||||
print(f"Input: {input_file}")
|
|
||||||
print(f"Output: {output_file}")
|
|
||||||
|
|
||||||
# Build the pandoc options as a string
|
|
||||||
pandoc_cmd = [
|
|
||||||
"--verbose",
|
|
||||||
"--toc",
|
|
||||||
"--number-sections",
|
|
||||||
"--include-in-header", "utils/docs/main.tex",
|
|
||||||
"--metadata-file", metadata_file,
|
|
||||||
# "-V", "linkcolor:blue",
|
|
||||||
# "-V", "geometry:a4paper",
|
|
||||||
# "-V", "geometry:margin=1.8cm",
|
|
||||||
"-V", "mainfont=DejaVu Serif",
|
|
||||||
"-V", "monofont=Noto Sans Mono",
|
|
||||||
"--pdf-engine=xelatex",
|
|
||||||
"--resource-path=utils/docs",
|
|
||||||
"--filter=./utils/docs/filter-nobg.hs",
|
|
||||||
]
|
|
||||||
|
|
||||||
# from glob import glob
|
|
||||||
# input_files = [os.path.join(dp, f) for dp, dn, filenames in os.walk(input_dir) for f in filenames if re.search(r'^[0-9].*\.md$', f)]
|
|
||||||
# input_files.sort()
|
|
||||||
|
|
||||||
# Convert all markdown files in the chapters/ subdirectory.
|
|
||||||
pypandoc.convert_file(
|
|
||||||
input_file,
|
|
||||||
"pdf",
|
|
||||||
outputfile=output_file,
|
|
||||||
extra_args=pandoc_cmd,
|
|
||||||
)
|
|
||||||
|
|
||||||
print(f"Conversion completed. Output saved to: {output_file}")
|
|
||||||
|
|
||||||
#
|
|
|
@ -1,89 +0,0 @@
|
||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# Usage: ./build.py INPUT_DIR OUTPUT_FILE
|
|
||||||
|
|
||||||
# import re
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
def gx_usage():
|
|
||||||
"""Show usage"""
|
|
||||||
print(f"Usage: {sys.argv[0]} METADATA_FILE INPUT_FILE OUTPUT_FILE")
|
|
||||||
print()
|
|
||||||
|
|
||||||
|
|
||||||
def run_process_with_params(command_params):
|
|
||||||
"""
|
|
||||||
Runs a process with parameters provided in the command_params list.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
- command_params (list): List of parameters to run the process.
|
|
||||||
The first item in the list should be the command (executable).
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
# Run the process using subprocess.run (Python 3.5+)
|
|
||||||
result = subprocess.run(command_params, check=True, text=True, capture_output=True)
|
|
||||||
|
|
||||||
# If the process ran successfully, print the output
|
|
||||||
print("Process output:", result.stdout)
|
|
||||||
print("Process error output (if any):", result.stderr)
|
|
||||||
except subprocess.CalledProcessError as e:
|
|
||||||
print(f"An error occurred while running the process: {e}")
|
|
||||||
print("Error Output:", e.stderr)
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Unexpected error: {e}")
|
|
||||||
|
|
||||||
# Example usage
|
|
||||||
if __name__ == "__main__":
|
|
||||||
# Define the parameters for the command
|
|
||||||
# Example: Running `ls -l /home` on a Unix-like system
|
|
||||||
if len(sys.argv) != 4:
|
|
||||||
gx_usage()
|
|
||||||
|
|
||||||
metadata_file = sys.argv[1]
|
|
||||||
if not os.path.exists(metadata_file):
|
|
||||||
print(f"Metadata file not found: {metadata_file}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
input_file = sys.argv[2]
|
|
||||||
if not os.path.exists(input_file):
|
|
||||||
print(f"Input file not found: {input_file}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Get second
|
|
||||||
output_file = sys.argv[3]
|
|
||||||
if os.path.exists(output_file):
|
|
||||||
print(f"Output file already exists: {output_file}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# Build the pandoc options as a string
|
|
||||||
pandoc_cmd = [
|
|
||||||
"pandoc",
|
|
||||||
"--verbose",
|
|
||||||
"--toc",
|
|
||||||
"--number-sections",
|
|
||||||
"--include-in-header", "utils/docs/main.tex",
|
|
||||||
"--metadata-file", metadata_file,
|
|
||||||
# "-V", "linkcolor:blue",
|
|
||||||
# "-V", "geometry:a4paper",
|
|
||||||
# "-V", "geometry:margin=1.8cm",
|
|
||||||
"-V", "mainfont=DejaVu Serif",
|
|
||||||
"-V", "monofont=Noto Sans Mono",
|
|
||||||
"--pdf-engine=xelatex",
|
|
||||||
"--resource-path=utils/docs",
|
|
||||||
"--filter=./utils/docs/filter-nobg.hs",
|
|
||||||
"-f", "markdown",
|
|
||||||
"-t", "pdf",
|
|
||||||
"-o", output_file,
|
|
||||||
input_file
|
|
||||||
]
|
|
||||||
|
|
||||||
print(f"Metadata: {metadata_file}")
|
|
||||||
print(f"Input: {input_file}")
|
|
||||||
print(f"Output: {output_file}")
|
|
||||||
|
|
||||||
# Call the function to run the process
|
|
||||||
run_process_with_params(pandoc_cmd)
|
|
||||||
|
|
||||||
#
|
|
|
@ -1,4 +0,0 @@
|
||||||
% chapter_breaks.tex
|
|
||||||
% Chapter breaks setup
|
|
||||||
\usepackage{sectsty}
|
|
||||||
\sectionfont{\clearpage}
|
|
|
@ -1,23 +0,0 @@
|
||||||
#!/usr/bin/env runhaskell
|
|
||||||
{-# LANGUAGE OverloadedStrings #-}
|
|
||||||
|
|
||||||
import Text.Pandoc.JSON
|
|
||||||
import Data.Text (Text, isInfixOf)
|
|
||||||
|
|
||||||
-- Function to filter out images with 'bg' in alt text
|
|
||||||
filterImage :: Inline -> Inline
|
|
||||||
filterImage img@(Image attr alt _) =
|
|
||||||
if any ("bg" `isInfixOf`) (map stringify alt)
|
|
||||||
then Str ""
|
|
||||||
else img
|
|
||||||
filterImage x = x
|
|
||||||
|
|
||||||
-- Stringify function to convert inlines to Text
|
|
||||||
stringify :: Inline -> Text
|
|
||||||
stringify (Str txt) = txt
|
|
||||||
stringify _ = ""
|
|
||||||
|
|
||||||
-- Main function
|
|
||||||
main :: IO ()
|
|
||||||
main = toJSONFilter filterImage
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
% hyperref_setup.tex
|
|
||||||
% Hyperref setup
|
|
||||||
\usepackage{hyperref}
|
|
||||||
\hypersetup{
|
|
||||||
colorlinks=true,
|
|
||||||
linkcolor=blue,
|
|
||||||
filecolor=magenta,
|
|
||||||
urlcolor=blue,
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
% main.tex
|
|
||||||
|
|
||||||
% Set the document language to English
|
|
||||||
\usepackage[english]{babel}
|
|
||||||
\usepackage{newunicodechar}
|
|
||||||
|
|
||||||
% Define command \DeclareUnicodeCharacter (which was defined in inputenc for non-utf8 engines)
|
|
||||||
\newcommand{\DeclareUnicodeCharacter}[2]{%
|
|
||||||
\begingroup\lccode`|=\string"#1\relax
|
|
||||||
\lowercase{\endgroup\newunicodechar{|}}{#2}%
|
|
||||||
}
|
|
||||||
|
|
||||||
\def\bitcoinA{%
|
|
||||||
\leavevmode
|
|
||||||
\vtop{\offinterlineskip %\bfseries
|
|
||||||
\setbox0=\hbox{B}%
|
|
||||||
\setbox2=\hbox to\wd0{\hfil\hskip-.03em
|
|
||||||
\vrule height .3ex width .15ex\hskip .08em
|
|
||||||
\vrule height .3ex width .15ex\hfil}
|
|
||||||
\vbox{\copy2\box0}\box2}}
|
|
||||||
|
|
||||||
% \DeclareUnicodeCharacter{21D2}{$\Rightarrow$}
|
|
||||||
\DeclareUnicodeCharacter{20BF}{\bitcoinA}
|
|
||||||
|
|
||||||
% Adjust page geometry
|
|
||||||
\usepackage[
|
|
||||||
a4paper, inner=1.5cm, outer=1.5cm, top=2cm, bottom=2cm,
|
|
||||||
% bindingoffset=0.5cm
|
|
||||||
]{geometry}
|
|
||||||
|
|
||||||
% Configure headers and footers using scrlayer-scrpage
|
|
||||||
\usepackage[automark,headsepline,footsepline]{scrlayer-scrpage}
|
|
||||||
\clearpairofpagestyles
|
|
||||||
\ohead{\headmark}
|
|
||||||
\ofoot{\pagemark}
|
|
||||||
\pagestyle{scrheadings}
|
|
||||||
|
|
||||||
|
|
||||||
% Include additional settings from external files
|
|
||||||
% \input{inline_code.tex}
|
|
||||||
% \input{bullet_styling.tex}
|
|
||||||
\input{utils/docs/chapter_breaks.tex}
|
|
||||||
\input{utils/docs/blockquote.tex}
|
|
||||||
\input{utils/docs/hyperref_setup.tex}
|
|
||||||
|
|
||||||
% Font settings using fontspec
|
|
||||||
\usepackage{fontspec}
|
|
||||||
% \setmainfont{DejaVu Serif} % Set your main font
|
|
||||||
% \setmonofont{SauceCodePro Nerd Font} % Set your monospace (code) font
|
|
|
@ -1,5 +0,0 @@
|
||||||
---
|
|
||||||
title: Formation
|
|
||||||
subtitle: MariaDB
|
|
||||||
author: Glenn Y. Rolland <teaching@glenux.net>
|
|
||||||
date: \today
|
|
Loading…
Add table
Reference in a new issue