Something went wrong. Try again.
my curriculum vitae
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188#let lang = sys.inputs.at("lang", default: "en")#let variant = sys.inputs.at("variant", default: "generic")#let alt(en, es) = if lang == "en" { en } else { es }
// #let lang = "es"// #let variant = "systems"// #let variant = "devops"// #let variant = "data"
#let variants = ("generic", "systems", "devops", "data")#let get-relevant-data(value) = if type(value) in (str, content, float) { value} else if variant in value { value.at(variant)} else if "generic" in value { value.at("generic")} else { value.map(get-relevant-data)}
#let data = get-relevant-data(yaml("data/" + lang + ".yaml"))#let hidden-link(dest, body) = if dest == none { body } else { link(dest, text(fill: black, body)) }
#assert( lang in ("en", "es"), message: "Supported languages are English and Spanish.",)#assert(variant in variants, message: "Unknown cv variant.")
#set page( paper: "a4", margin: (x: 1.8cm, y: 1.0cm),)
#set text(font: "Inter", size: 9pt, lang: lang)#show raw: set text(font: "Iosevka", size: 10pt)#set par(justify: false)
#show link: it => text(fill: rgb("#1a4d7a"), it)#let bare(url) = url.replace("https://", "").replace("http://", "")
#let section(title) = [ #v(0.4em) #text(weight: 700, size: 10pt, tracking: 0.4pt)[#upper(title)] #v(0.4em, weak: true) #line(length: 100%, stroke: 0.5pt)]
// - `title` is the bold first line// - `subtitle` is the italic and on a second line unless `single-line` is true// - `date` and `meta` flush right.#let entry( title, subtitle: none, date: none, meta: none, details: (), single-line: false,) = [ #let date = if type(date) == array [ #date.at(0) --- #date.at(1) ] else { date }
#let smaller(it) = text(size: 1em - 0.4pt, it) #let split(left, right) = grid( columns: (1fr, auto), gutter: 1em, align: top, left, right, ) #if single-line { assert(meta == none, message: "Can't display `meta` in one line.") split([#strong(title): #subtitle], smaller(date)) } else { split(strong(title), smaller(date)) v(6pt, weak: true) split(emph(subtitle), smaller(meta)) } #v(8pt, weak: true) #if details.len() > 0 { list(..details) }]
#let contact = ( location: alt("Madrid, Spain", "Madrid, España"), phone: text(tracking: -0.5pt, "+34 693 21 30 50"), mail: link("mailto:contact@odilf.com", text( tracking: -0.0pt, fill: black, "contact@odilf.com", )), website: link("https://odilf.com", "odilf.com"), github: link("https://github.com/odilf", "github.com/odilf"), linkedin: link("https://linkedin.com/in/odysseas-machairas-878976296", text( tracking: -0.5pt, "linkedin.com/in/odysseas-machairas", )),)
#align(center)[ #text(size: 18pt, weight: 700, tracking: -0.6pt)[#data.name]
#v(1.3em, weak: true)
#let sep = ( h(0.4em) + box( line(angle: 90deg, length: 0.8em, stroke: 0.5pt), baseline: 0.1em, ) + h(0.4em) ) #text(size: 8.5pt, tracking: -0.2pt)[#contact.values().join(sep)]]
#section(alt("Summary", "Resumen"))#eval(data.summary, mode: "markup")
#let dot = sym.circle.filled.tiny#section(alt("Education", "Educación"))#for e in data.education [ #let grade(value, max: 10) = ( str(value) + text(fill: black.lighten(60%), "/" + str(max)) ) // #let grade(value, max: 10) = str(value) #entry( e.institution, subtitle: e.degree, date: e.date, meta: e.location, details: ( [GPA: #grade(e.gpa) #if "grade" in e.thesis [ #box(dot, inset: (x: 2pt)) Thesis: #grade(e.thesis.grade) ]], [ Thesis: #e.thesis.name #h(1fr) #( e.thesis.links.pairs().map(((name, url)) => link(url, name)).join([ #dot ]) ) ], ..e.at("details", default: ()), ), )]
#section(alt("Experience", "Experiencia"))#for e in data.experience [ #entry( e.institution, subtitle: eval(e.title, mode: "markup"), date: e.date, meta: e.location, details: e.at("details", default: ()).filter(x => x != none).map(x => eval(x, mode: "markup")), )]
#let project-list = ( generic: (), systems: (), devops: (), data: (),)
#section(alt("Projects", "Proyectos"))#for (project) in data.selected-projects [ #let p = data.projects.at(project) #entry( hidden-link(p.at("link", default: none), raw(project)), subtitle: p.description, date: p.date, meta: if "link" in p { link(p.link, bare(p.link)) }, details: p.at("details", default: ()).map(x => eval(x, mode: "markup")), )]
#section(alt("Awards", "Premios"))#for a in data.awards [ #entry( a.title, subtitle: eval(a.desc, mode: "markup"), date: a.date, single-line: true, )]
#section(alt("Skills", "Habilidades"))#for group in data.skills [ - *#group.label:* #group.items.join(", ").]