deckz
deckz is a tool to manage a large number of Beamer decks, shared by several
people, with slides ("sections") shared across decks. It is not meant to be
usable out of the box by people who stumble upon this repository: it enforces
strong conventions on the layout of the repository it operates on. Please
open an issue if you want more details or want to discuss this approach.
Installation
With pip:
pip install deckz
Shell completion
Run deckz --help and look for the --install-completion /
--show-completion flags to set up completion for your shell.
Repository layout
deckz expects to run inside a git repository organized like this:
root (git repository)
├── deckz.yml
├── variables.yml
├── templates
│ └── jinja2
│ └── main.tex
├── shared
│ ├── img
│ ├── code
│ ├── latex
│ │ └── some-section
│ │ ├── some-section.yml
│ │ ├── intro.tex
│ │ └── advanced.tex
│ ├── tikz
│ ├── plt
│ └── pltly
├── company1
│ ├── variables.yml
│ └── deck1
│ ├── deck.yml
│ ├── variables.yml
│ └── latex
└── company2
└── deck2
├── deck.yml
└── latex
shared: everything shared across decks: images and code snippets (img,code), reusable LaTeX sections (latex), and generated standalone figures (tikz,pltfor matplotlib,pltlyfor plotly).templates/jinja2/main.tex: the Jinja2 template used to render every deck's main.texfile.- Each deck is a directory containing a
deck.yml(its definition) and optionally alatexdirectory for files local to that deck. variables.ymlfiles can be placed at any level of the directory hierarchy between the git root and a deck to avoid repeating values (e.g. one per client/company, shared by all of that client's decks).
Configuration
deckz.yml
At the root of the repository, deckz.yml holds settings, not content, e.g.:
build_command:
- latexmk
- -pdflatex=xelatex -shell-escape -interaction=nonstopmode %O %S
- -dvi-
- -ps-
- -pdf
deckz.yml files are merged, in order, from the git root, from the user's
config directory (XDG-compliant, e.g.
$HOME/.config/deckz/deckz.yml on GNU/Linux), and from the current
directory (and its ancestors up to the git root). Run
deckz print settings to inspect the resolved result.
variables.yml
variables.yml files hold the values injected into the Jinja2 templates,
merged the same way (git root → user config directory → current directory
and its ancestors), so a value set closer to a deck overrides one set
higher up. Run deckz print variables to inspect the resolved result for
the current deck.
Example:
company_name: Company
company_logo: img/logo.png
company_logo_height: 1cm
deck_title: Machine Learning and COVID-19
presentation_size: 10pt
Each snake_case key becomes a \CamelCase LaTeX command (e.g.
company_name → \CompanyName) usable from templates/jinja2/main.tex
and from any included file.
deck.yml
Defines a deck's parts and, for each part, the sections and files it includes:
name: ABC
parts:
- name: p1
title: Part 1
sections:
- $first-section@standard
- about
- name: p2
title: Part 2
sections:
- $first-section@light
Includes can point to a file (path/to/file) or to a shared section with a
given flavor ($path/to/section@flavor); either form can be given a custom
title with path: My title / $path@flavor: My title.
Shared sections
A shared section lives under shared/latex (or a deck's local latex
directory) and has a sibling .yml file describing its flavors, e.g.
shared/latex/first-section/first-section.yml:
title: First section
default_titles:
intro: Introduction
advanced: Advanced
flavors:
- name: standard
includes:
- intro
- advanced
- name: light
includes:
- intro
Usage
Run deckz --help for the full list of commands, or deckz <command> --help for a specific command. The main ones:
deckz run [PARTS]...: compile the deck in the current directory (optionally restricted to some parts).deckz check-all: compile every shared section standalone, to catch errors before they show up in a real deck.deckz watch deck/deckz watch section SECTION FLAVOR: recompile on file changes.deckz tree: show the resolved tree of sections and files for the current deck.deckz print settings/deckz print variables: print the resolved settings/variables for the current directory.deckz deps [SECTION] [FLAVOR]: show shared sections/flavors usage across the repository, including unused ones.deckz search-sections KEYWORDS...: search shared sections by title or frame title.deckz section-flavors SECTION: list a section's flavor names.deckz rename-flavor SECTION OLD NEW: rename a flavor and rewrite all its usages.deckz merge-flavors: deduplicate section flavors that are identical up to their name.deckz asset search ASSET/deckz asset deps: find where an asset is used, or find assets missing license metadata.deckz clean/deckz clean all/deckz clean latex: remove build directories, or unused shared/local LaTeX files.deckz upgrade: migrate a repository from olderdeckzconventions.deckz i18n section-en-leak/deckz i18n section-flavor-diff/deckz i18n section-pair/deckz i18n deck-pair: help keep fr/en translations of decks and shared sections in sync.deckz upload: upload built PDFs to Google Drive.deckz extras issue TITLE [BODY]: create a GitHub issue.deckz extras random REASON: roll a dice and email the result (handy for arbitrary decision-making, e.g. picking who does a task).
Documentation
A partial code reference, generated from the docstrings, is published via
mkdocs (see mkdocs.yml and the docs directory).
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file deckz-25.5.0.tar.gz.
File metadata
- Download URL: deckz-25.5.0.tar.gz
- Upload date:
- Size: 59.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1062f0104fd0360ee50fa23776c5690021ca813ba31df2040738e788f89ba370
|
|
| MD5 |
adf7f09b59c5d129f4ee857f37f250c2
|
|
| BLAKE2b-256 |
67fef0b20d8d92c1f6c1b7beea39baf0e625d3d3957591859eae17061ea72b32
|
File details
Details for the file deckz-25.5.0-py3-none-any.whl.
File metadata
- Download URL: deckz-25.5.0-py3-none-any.whl
- Upload date:
- Size: 84.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.15 {"installer":{"name":"uv","version":"0.12.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
beb6b18a1f1b6d93461e3d992ee95f4067b2a3b58bdb6e13e1deb404658fe374
|
|
| MD5 |
4cbf5bb35f9233e35b76d4f212c6c2d6
|
|
| BLAKE2b-256 |
387ed0b360fe84d522d3161fac59bd9abfbcd5cf96fc6639427f8b25a1137f22
|