Files
corner/resumé/main.typ
Romain Paquet fd6a778d1f
All checks were successful
buildbot/nix-eval Build done.
buildbot/nix-build Build done.
buildbot/nix-effects Build done.
add typst resumé (without profile picture)
2025-10-25 18:26:58 +02:00

141 lines
2.9 KiB
Typst

#import "localize.typ": localize
#let languages = ("fr", "en")
#set page(
paper: "a4",
columns: 2,
margin: 10mm,
)
#languages.map(language => [
#set text(lang: language)
#let accent-color = rgb(0x06, 0x92, 0xaa, 255)
#let load-section(path) = localize(language, yaml(path))
#let education = load-section("_data/sections/education.yml")
#let experiences = load-section("_data/sections/experiences.yml")
#let hobbies = load-section("_data/sections/hobbies.yml")
#let languages = load-section("_data/sections/languages.yml")
#let skills = load-section("_data/sections/skills.yml")
#let introduction = load-section("_data/introduction.yml")
#let data = yaml("data.yml")
#let words = localize(language, yaml("_data/words.yml"))
#let tr(key) = key.split(".").fold(words, (d, k) => d.at(k)).at(language)
#let date-range(date) = [ #date.begin --- #date.end ]
#let dotted-line = line(length: 100%, stroke: (paint: black, thickness: 1pt, dash: "loosely-dotted"))
#set text(font: "Atkinson Hyperlegible Next", size: 10pt)
#show heading.where(level: 1): it => block(width: 100%, text(32pt, it.body))
#show heading.where(level: 2): it => text(
14pt,
fill: accent-color,
it.body,
)
#show heading.where(level: 3): it => text(
12pt,
it.body,
)
#let contact-section = [
== Contact \
1 Rue Auguste Renoir \
38400 Saint-Martin-d'Hères \
(+33) 06 58 92 15 86 \
#for email in data.emails [
#link("mailto:" + email) \
]
#link("https://rpqt.fr")
]
#place(
top + left,
float: true,
scope: "parent",
grid(
columns: (1.3fr, 5fr, 3fr),
align(horizon, image("profile-circle.png", width: 100%)),
align(center + horizon, [
= Romain Paquet
]),
align(
right,
contact-section,
)
)
)
#place(
top + left,
float: true,
scope: "parent",
[
#line(length: 100%)
#introduction
#line(length: 100%)
]
)
== #experiences.title
#experiences.items.map(experience => [
=== #experience.organisation.name --- _#(experience.position)_ \
#date-range(experience.date), #experience.city
*#words.context*: #eval(experience.description.context, mode: "markup")
*#words.tasks*:
#experience.description.tasks.map(t => [ - #t ]).join()
*#words.themes*: #experience.themes.join(", ")
*#words.stack*: #experience.stack.join(", ")
]).join(dotted-line);
== #skills.title
#eval(skills.content, mode: "markup")
#colbreak()
== #education.title
#education.items.map(ed => [
=== #ed.school \
#date-range(ed.date)
#eval(ed.description, mode: "markup")
]).join(dotted-line)
== #languages.title
#languages.items.filter(
lang => not lang.keys().contains("_needed")
).map(lang => [
#lang.flag #lang.name #if lang.keys().contains("level") [ (#lang.level) ]
]).join([ --- ])
== #hobbies.title
#for hobby in hobbies.items [
#if hobby.keys().contains("items") [
*#hobby.name*
#hobby.items.map(i => [ - #i]).join()
] else [
*#hobby.name* -- #hobby.at("content")
]
]
]).join()