48 lines
1.4 KiB
Plaintext
48 lines
1.4 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
|
||
|
|
||
|
#let cv(include_links: true, language: "") = {
|
||
|
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)
|
||
|
|
||
|
// 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),
|
||
|
)
|
||
|
}
|