Dynamic CV
Typst toolbox for dynamically generating CVs based on YAML files.
Usage
First clone this repository in the directory where you want to create your CVs. To get started create at least one YAML file containing your personal information with the following structure:
# Full name of the individual
name: John Doe
# Birth information (optional)
birth:
# Date of birth
date: "01.01.1980"
# Place of birth, can be multiline
place: |-
New York City
USA
# Citizenship (optional)
citizenship: United States
# Gender (optional)
gender: Male
# Address (optional), can be multiline
address: |-
123 Main St
Springfield
IL 62704
# Phone number (optional)
phone: "+1 555 1234 567"
# Email address (optional)
email: "johndoe@example.com"
# Profile picture (optional)
picture: "path/to/profile/picture.png"
Other information like education, work or skills can be written using one of two schemas.
Timeline Schema
# List of the item
- title: "Bachelor of Science (BSc)"
# Importance Level (optional), should be a number between 1 and 3 (defaults to 3)
importance: 3
# Description (optional), can be multiline
description: "Computer Science, University of Example"
# Attendance dates
date:
# Start date
start: "09/2015"
# End date (optional)
end: "07/2019"
- title: "Professional Certification in Data Analysis"
# Custom date label
date: "Custom date label"
Category Schema
# First category
- category: "Language Skills"
# Importance Level (optional), should be a number between 1 and 3 (defaults to 3)
importance: 3
# List of items in that category
items:
# Name of the skill
- name: English
# Importance Level (optional), should be a number between 1 and 3 (defaults to 3)
importance: 3
# Description or details, can be multiline
description: Native speaker
# Second category
- category: "Computer Skills"
# Items in this category as one string
items: |-
Proficient in LaTeX, Typst.
Familiar with LibreOffice and OpenOffice.
Naturally all YAML schemas can be extended with custom keys and values if needed.
Start your Typst document with the cv
template. Provide the paths to your YAML files in the paths
argument. personal
is required further paths with arbitrary names can be added depending on your need.
#import "lib.typ": *
#show: cv.with(
// Paths to your YAML files
paths: (
personal: "personal.yaml",
education: "education.yaml",
work: "work.yaml",
skills: "skills.yaml",
),
// CV Configuration
cfg: config_translations.en
// Default column ratios for tables
columns: (1fr, 3fr),
)
Afterward you have access to the config
and information
state variables to build your document.
#context config.get()
#context information.get()
The information from your YAML files can then be displayed in a structured way using the personal_table
, timeline_table
or category_table
function.
#context {
let cfg = config.get()
let info = information.get().personal
personal_table(cfg, info, profile)
}
NOTE: If the personal config contains a profile picture path, the
profile
function is used to place the picture. Useprofile.with(...)
with custom parameters to change the position of the picture.
Utility Functions
This repo provides further utility functions to make parsing of the YAML files and building a CV easier.
get_date
: Convertdate
from YAML file into corresponding string.signature
: Draw a signature field with place and date.
Importance
The importance
key is a way to adjust the size and complexity of your CV according to your need. The importance
of you CV is provided with the configuration:
#let cfg = config_trasnlations.en
#cfg.insert("importance", 2)
Given this value functions like personal_table
and timeline_table
will only display items with an importance greater than or equal to this value.
Styling
The output generated by the different *_table
functions uses table
to structure the information. It can therefore be styled by changing the appearance of a table.
#show table: ...
#set table(...)
The emphasized text can be styled by changing the appearance of a strong
element.
#show strong: set text(red)
Last page update: Friday, July 4th 2025, 04:34:12 UTC