Compare commits
4 Commits
e50b6e70b7
...
007e711c2c
Author | SHA1 | Date |
---|---|---|
Bauke | 007e711c2c | |
Bauke | 94241d16a1 | |
Bauke | d27b64bd40 | |
Bauke | 4ec59a1414 |
|
@ -2,3 +2,4 @@
|
||||||
.vscode/
|
.vscode/
|
||||||
build/
|
build/
|
||||||
data/
|
data/
|
||||||
|
cv.typ
|
||||||
|
|
|
@ -23,12 +23,7 @@ args = ["trash", "build"]
|
||||||
[tasks.compile]
|
[tasks.compile]
|
||||||
clear = true
|
clear = true
|
||||||
dependencies = ["ensure-build-dir"]
|
dependencies = ["ensure-build-dir"]
|
||||||
command = "typst"
|
script = "./compile-cv.zsh"
|
||||||
args = [
|
|
||||||
"compile",
|
|
||||||
"cv-${CV_LANG}.typ",
|
|
||||||
"build/CV-Bauke-${CV_LANG}.pdf"
|
|
||||||
]
|
|
||||||
|
|
||||||
# Ensure that the build directory exists.
|
# Ensure that the build directory exists.
|
||||||
[tasks.ensure-build-dir]
|
[tasks.ensure-build-dir]
|
||||||
|
@ -41,4 +36,4 @@ args = ["-p", "build"]
|
||||||
[tasks.watch]
|
[tasks.watch]
|
||||||
clear = true
|
clear = true
|
||||||
command = "watchexec"
|
command = "watchexec"
|
||||||
args = ["-e", "toml,typ", "--no-vcs-ignore", "makers build"]
|
args = ["-e", "toml,typ", "-i", "cv.typ", "--no-vcs-ignore", "makers build"]
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
# There's currently no way in Typst to provide values from the CLI in some way
|
||||||
|
# so until the next version lands and https://github.com/typst/typst/pull/2894
|
||||||
|
# becomes available, a script that renders a template has to be it for now.
|
||||||
|
|
||||||
|
# Define options based on environment variables or use default values.
|
||||||
|
include_links=${CV_INCLUDE_LINKS:-"true"}
|
||||||
|
language=${CV_LANG:-"en"}
|
||||||
|
|
||||||
|
typst_template="#import \"main.typ\": cv
|
||||||
|
|
||||||
|
#cv(
|
||||||
|
include_links: $include_links,
|
||||||
|
language: \"$language\",
|
||||||
|
)"
|
||||||
|
|
||||||
|
echo $typst_template > cv.typ
|
||||||
|
|
||||||
|
typst compile cv.typ "build/CV-Bauke-$CV_LANG.pdf"
|
|
@ -0,0 +1,7 @@
|
||||||
|
#import "../utilities/localize.typ": localize
|
||||||
|
|
||||||
|
#let experience_section(data, language) = [
|
||||||
|
== #localize(data, "experience", language)
|
||||||
|
|
||||||
|
#eval(localize(data, "experience_body", language))
|
||||||
|
]
|
|
@ -0,0 +1,48 @@
|
||||||
|
#import "../utilities/icon-with-text.typ": icon_with_text
|
||||||
|
#import "../utilities/localize.typ": localize
|
||||||
|
|
||||||
|
#let personal_project(data, language) = {
|
||||||
|
let icon_size = 1.4em
|
||||||
|
|
||||||
|
let personal_project_name = localize(data, "name", language)
|
||||||
|
|
||||||
|
let personal_project_heading = heading(level: 3, link(data.link, personal_project_name));
|
||||||
|
|
||||||
|
let personal_project_header = if "header_image" in data {
|
||||||
|
icon_with_text(
|
||||||
|
clip_icon: true,
|
||||||
|
icon: "../" + data.header_image,
|
||||||
|
icon_alt_text: personal_project_name,
|
||||||
|
icon_size: icon_size,
|
||||||
|
personal_project_heading,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
personal_project_heading
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use a grid to space out the header and the body.
|
||||||
|
grid(
|
||||||
|
gutter: 0.5em,
|
||||||
|
// Set the height explicitly so the ones with icons don't look different
|
||||||
|
// from the ones without.
|
||||||
|
box(
|
||||||
|
height: icon_size,
|
||||||
|
// Use another grid to position the title and date.
|
||||||
|
grid(
|
||||||
|
columns: (1fr, auto),
|
||||||
|
personal_project_header,
|
||||||
|
align(horizon, text(size: 0.9em, localize(data, "date", language))),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// The body can contain Typst code so we use `eval()` to render it.
|
||||||
|
eval(localize(data, "body", language)),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#let personal_projects_section(data, language) = [
|
||||||
|
== #localize(data.locale, "personal_projects", language)
|
||||||
|
|
||||||
|
#for data in data.personal_projects {
|
||||||
|
personal_project(data, language)
|
||||||
|
}
|
||||||
|
]
|
Loading…
Reference in New Issue