diff --git a/README.md b/README.md new file mode 100644 index 0000000..ae62ba2 --- /dev/null +++ b/README.md @@ -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?) diff --git a/resume.typ b/resume.typ index 9c006fd..ce523d0 100644 --- a/resume.typ +++ b/resume.typ @@ -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") ) -