Allow manually overriding main or sidebar sections

This commit is contained in:
Marty Oehme 2025-01-28 21:27:42 +01:00
parent 03acad7a44
commit cfa3e8a625
Signed by: Marty
GPG key ID: EDBF2ED917B2EF6A
2 changed files with 75 additions and 31 deletions

45
README.md Normal file
View file

@ -0,0 +1,45 @@
# Data-driven CV & resume
My personal CV and resume files, automatically generated from a multi-lingual
yaml data file.
The CV contains a full run-down of my educational and job experience to date,
while the resume is more compact, reduced to a single page
and can be tailored for a specific job area or expertise.
Is called like the following:
```typst
#resume(
yaml("content.yml"),
main: ("experience", "education", "volunteering", "skills", "languages"),
sidebar: ("volunteering", "skills")
)
```
This is the default invocation, though sidebar and main body sections can be exchanged at will.
TODO:
- [x] move double-resume sources (per langauge) to a variable or similar
- [x] separate volunteering from skills section
- [_] one function per skill section
- [_] resume prep:
- [ ] make experience groupable by client / short version
- [ ] enable display/hiding of sections/entries by tags?
- [x] migrate to typst template?
- [x] ! Fix german summary to be like English summary
- [_] generalized entry?
Would have 'title', 'place', 'date', 'type'/'tags' + potential
'publication', 'bullets'
## Typst-driven branch
- [x] Fix publication '\&'s
- [x] Fix en-dash/em-dash (e.g. in years)
- [x] Producable from yaml content
- [x] Can be switched between Ger/En
- [x] Try sidebar version
- [ ] Generalize sidebar version through abstraction/extractions
- [ ] unify items: experience/education/(thesis?)

View file

@ -170,7 +170,7 @@
}
}
#let resume(contents) = {
#let resume(contents, main: ("experience", "education"), sidebar: ("volunteering", "languages", "skills")) = {
set text(lang: lang)
let date_formatting = {
@ -203,48 +203,48 @@
header(contents.about)
let body = {
// if "summary" in contents {
// section(title:"", {
// contents.summary.at(lang)
// })
// };
if "summary" in main and "summary" in contents {
section(title:"", {
contents.summary.at(lang)
})
}
if "experience" in contents {
if "experience" in main and "experience" in contents {
let title = sel_word_lang(en:"Professional Experience", de:"Berufserfahrung")
section(title: title)[]
by_experience_type(experience: contents.experience, type: contents.experience_types)
}
if "education" in contents {
if "education" in main and "education" in contents {
let title = sel_word_lang(en:"Education", de:"Ausbildung")
section(title: title, entries:contents.thesis + contents.education)[]
}
// if "volunteering" in contents {
// let title = sel_word_lang(en:"Volunteer Work", de:"Ehrenamt")
// section(title: title, entries:contents.volunteering)[]
// }
//
// if "skills" in contents {
// let title = sel_word_lang(en:"Qualifications", de:"Qualifikationen")
// section(title: title, {
// skill_item(item:contents.skills)
// })
// }
//
// if "languages" in contents {
// let title = sel_word_lang(en:"Languages", de:"Sprachen")
// section(title: title, {
// skill_item(item:contents.languages)
// })
// }
if "volunteering" in main and "volunteering" in contents {
let title = sel_word_lang(en:"Volunteer Work", de:"Ehrenamt")
section(title: title, entries:contents.volunteering)[]
}
if "skills" in main and "skills" in contents {
let title = sel_word_lang(en:"Qualifications", de:"Qualifikationen")
section(title: title, {
skill_item(item:contents.skills)
})
}
if "languages" in main and "languages" in contents {
let title = sel_word_lang(en:"Languages", de:"Sprachen")
section(title: title, {
skill_item(item:contents.languages)
})
}
}
let sidebar = {
if "volunteering" in contents {
if "volunteering" in sidebar and "volunteering" in contents {
let title = sel_word_lang(en:"Volunteer Work", de:"Ehrenamt")
[== #title]
for e in contents.volunteering {
for e in contents.at("volunteering") {
[
- *#e.title.at(lang)* (#e.date.at(lang))
#par(e.bullets.at(0).at(lang)) \
@ -252,14 +252,14 @@
}
}
if "languages" in contents {
if "languages" in sidebar and "languages" in contents {
let title = sel_word_lang(en:"Languages", de:"Sprachen")
[== #title]
skill_item(item:contents.languages, is_sidebar: true)
[\ ]
}
if "skills" in contents {
if "skills" in sidebar and "skills" in contents {
let title = sel_word_lang(en:"Qualifications", de:"Kenntnisse")
[== #title]
skill_item(item:contents.skills, is_sidebar: true)
@ -307,4 +307,3 @@
#resume(
yaml("content.yml")
)