54 lines
1.6 KiB
Plaintext
54 lines
1.6 KiB
Plaintext
#import "./components/experience.typ": experience_section
|
|
#import "./components/personal-projects.typ": personal_projects_section
|
|
#import "./components/skills.typ": skills_section
|
|
#import "./components/header.typ": header
|
|
#import "./utilities/content-to-string.typ": content_to_string
|
|
#import "./utilities/localize.typ": localize
|
|
|
|
#let cv(include_links: true, language: "", version: "") = {
|
|
if language == "" {
|
|
panic("No language option specified.")
|
|
}
|
|
|
|
let data = toml("data/info.toml")
|
|
|
|
set document(
|
|
author: data.name,
|
|
title: content_to_string([CV #data.name (#language)]),
|
|
)
|
|
set text(font: "Inter", lang: language, size: 12pt)
|
|
|
|
// The links color and styling has to be done this way because the `show`
|
|
// keyword only applies to the scope of the block it is in. Meaning it won't
|
|
// apply globally when put inside the `if` block.
|
|
let links = if include_links {
|
|
(color: rgb("#000080"), style: underline)
|
|
} else {
|
|
(color: black, style: (body) => body)
|
|
}
|
|
|
|
show link: set text(links.color)
|
|
show link: links.style
|
|
|
|
header(data, language, include_links)
|
|
|
|
place(
|
|
bottom + right,
|
|
text(fill: rgb("#999"), [#localize(data, "version", language) #version]),
|
|
)
|
|
|
|
// Portion out the main body using a grid.
|
|
grid(
|
|
columns: (60%, 40%),
|
|
gutter: 1.5em,
|
|
// Place the Experience and Personal Projects sections vertically in the
|
|
// left column of the grid.
|
|
{
|
|
experience_section(data, language)
|
|
personal_projects_section(data, language)
|
|
},
|
|
// And the Skills section in the right column.
|
|
skills_section(data, language),
|
|
)
|
|
}
|