#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), ) }