Files
the-job-machine/07_bewerbung-typst/template.typ
T
trnq1ll0 9e8b4c1ad3 init project running
a scraper for jobs in the reagion with connected telegram bot to send my new jobs every day
2026-09-02 16:11:22 +02:00

176 lines
4.8 KiB
Typst

// Gemeinsames, eigenständiges Layout für beide Bewerbungsdokumente.
#let accent = rgb("#0395de")
#let ink = rgb("#333333")
#let dark-ink = rgb("#414141")
#let gray-ink = rgb("#3a3a5d")
#let rule-ink = rgb("#5d5d5d")
#let pale = rgb("#999999")
#let today = datetime.today()
#let month-names = (
"Januar", "Februar", "März", "April", "Mai", "Juni",
"Juli", "August", "September", "Oktober", "November", "Dezember",
)
#let today-de = (
str(today.day()) + ". " + month-names.at(today.month() - 1) +
" " + str(today.year())
)
#let document-base(body) = {
set text(font: "Source Sans Pro", lang: "de", size: 9pt, weight: 300, fill: ink)
set par(leading: 0.48em)
body
}
#let name-mark(
person,
size: 22pt,
family: "Roboto",
first-weight: 100,
first-smallcaps: false,
) = [
#text(font: family, size: size, weight: first-weight, fill: gray-ink)[
#if first-smallcaps { smallcaps(person.first) } else { person.first }
]#h(3pt)#text(font: family, size: size, weight: 700, fill: ink)[#person.last]
]
#let fa(glyph) = text(font: "FontAwesome", size: 0.95em)[#glyph]
#let cover-header(person) = block(width: 100%)[
#align(center)[
#name-mark(person, size: 32pt)
#v(1pt)
#text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[
#smallcaps(person.position)
]
#v(2pt)
#text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[
#person.street, #person.city
]
#v(3pt)
#text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[
#fa("\u{f10b}") #person.mobile #h(7pt)|#h(7pt)
#fa("\u{f0e0}") #person.email #h(7pt)|#h(7pt)
#fa("\u{f092}") #person.github #h(7pt)|#h(7pt)
#fa("\u{f169}") #person.xing
]
]
]
#let cv-header(person) = block(width: 100%, below: 33pt)[
#grid(
columns: (1fr, 1.8fr, 1fr),
column-gutter: 6pt,
align: (left, center, right),
[
#text(font: "Roboto", size: 8pt, weight: 400, style: "italic", fill: pale)[
#person.street\
#person.city
]
],
align(center)[
#name-mark(
person,
family: "Source Sans Pro",
first-weight: 400,
first-smallcaps: true,
)
#v(2pt)
#text(font: "Source Sans Pro", size: 7.6pt, weight: 400, fill: accent)[
#smallcaps("Lebenslauf")
]
],
[
#text(font: "Roboto", size: 6.8pt, weight: 400, fill: ink)[
#fa("\u{f10b}") #person.mobile\
#fa("\u{f0e0}") #person.email\
#fa("\u{f169}") #person.xing\
#fa("\u{f092}") #person.github
]
],
)
]
#let cv-footer(person) = context grid(
columns: (1fr, 1fr, 1fr),
align: (left, center, right),
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#smallcaps(today-de)],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[
#smallcaps(person.first + " " + person.last + " · Lebenslauf")
],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: pale)[#counter(page).display()],
)
#let cover-footer(person) = align(center)[
#text(font: "Source Sans Pro", size: 8pt, fill: pale, weight: 400)[
#smallcaps(person.first + " " + person.last)
]
]
#let section(accent-part, rest) = block(
width: 100%,
above: 8pt,
below: 5pt,
breakable: false,
)[
#grid(
columns: (auto, 1fr),
column-gutter: 2pt,
align: horizon,
text(font: "Source Sans Pro", size: 16pt, weight: 700)[
#text(fill: accent)[#accent-part]#text(fill: ink)[#rest]
],
line(length: 100%, stroke: 0.9pt + rule-ink),
)
]
#let bullet-list(items) = {
for item in items {
block(width: 100%)[
#grid(
columns: (7pt, 1fr),
column-gutter: 1pt,
[•],
item,
)
]
v(-5pt)
}
}
#let entry(role, organization, location, period, items) = block(
width: 100%,
above: 15pt,
below: 18pt,
breakable: false,
)[
#grid(
columns: (1fr, auto),
column-gutter: 8pt,
row-gutter: 9pt,
text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#organization],
text(font: "Source Sans Pro", size: 9pt, weight: 300, style: "italic", fill: accent)[#location],
text(font: "Source Sans Pro", size: 8pt, weight: 400, fill: gray-ink)[#smallcaps(role)],
text(font: "Source Sans Pro", size: 8pt, weight: 300, style: "italic", fill: gray-ink)[#period],
)
#parbreak()
#v(1pt)
#block(width: 100%)[
#text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#bullet-list(items)]
]
]
#let skills(body, above: 16pt, below: 12pt) = block(
width: 100%,
inset: (top: above, bottom: below),
body,
)
#let skill(label, value) = grid(
columns: (45mm, 1fr),
column-gutter: 5mm,
align: (right, left),
text(font: "Source Sans Pro", size: 10pt, weight: 700, fill: dark-ink)[#label],
text(font: "Source Sans Pro", size: 9pt, weight: 300, fill: ink)[#value],
)