20 Commits

Author SHA1 Message Date
Paul Tsouchlos
71ccbf8cb9 chore: update manual generation lib 2025-01-23 08:18:56 -05:00
Paul Tsouchlos
60aa2447c4 chore: update version to 0.8.0 2025-01-20 10:15:50 -05:00
Paul T
74bf3d63c8 Merge pull request #96 from DeveloperPaul123/fix/missing-translation 2025-01-20 10:12:36 -05:00
Paul Tsouchlos
461c954df9 feat: make "job application for" text translatable
Fixes #92
2025-01-20 10:11:31 -05:00
Paul T
7d9927bc19 Merge pull request #95 from DeveloperPaul123/feature/set-page-paper-size 2025-01-20 09:56:09 -05:00
Paul Tsouchlos
7a99a1bd54 feat: add ability to set page size
Fixes #93
2025-01-20 09:55:03 -05:00
Paul T
24fbc19d51 Merge pull request #94 from ThomasFeher/fix_german_salutation 2025-01-20 07:50:51 -05:00
Thomas Feher
a7165fa47e Fix German salutation 2025-01-19 17:40:43 +01:00
Paul T
abe80fa24d Merge pull request #90 from chxp/newa
fix: allow font awesome icon in heading
2025-01-13 23:08:12 -05:00
chenxp
cee8db8535 fix: allow font awesome icon in heading 2025-01-11 13:54:38 +08:00
Paul T
7eb7122e68 Merge pull request #87 from clement-troesch/add-profile-picture-in-resume 2025-01-01 09:57:08 -05:00
Paul T
a98b5e9fd8 Merge pull request #88 from matcap/main
Use provided font for header name
2024-12-12 17:28:15 -05:00
matcap
815a0efb8f add header-font argument 2024-12-12 20:04:20 +01:00
matcap
1c5a10df91 use provided font for header name 2024-12-11 23:54:49 +01:00
Clément Troesch
8c404d93cf Add the ability to set a profile picture in resume 2024-12-08 21:48:20 +01:00
Christoph Groß
423a64618f Fix bad alignment of the contacts 2024-11-27 11:11:48 -05:00
Paul T
883bc73af8 Merge pull request #78 from DeveloperPaul123/fix/minor-tweaks
chore: minor tweaks and fixes
2024-11-01 10:25:08 -06:00
Paul Tsouchlos
83a0c0888b fix: remove homepage entry from toml
Per the package check for typst universe, don't use homepage if there is no dedicated website.
2024-11-01 12:20:17 -04:00
Paul Tsouchlos
493439bd47 chore: ignore Justfile for typstignore 2024-11-01 12:19:47 -04:00
Paul T
0620285a78 Merge pull request #75 from DeveloperPaul123/release/0.7.0 2024-11-01 10:16:16 -06:00
11 changed files with 115 additions and 65 deletions

View File

@@ -6,3 +6,4 @@ template/*.pdf
.issuetracker
tests/*
docs/*
Justfile

View File

@@ -38,7 +38,7 @@ See `typst fonts --help` for more information on configuring fonts for `typst` t
Below is a basic example for a simple resume:
```typst
#import "@preview/modern-cv:0.7.0": *
#import "@preview/modern-cv:0.8.0": *
#show: resume.with(
author: (
@@ -54,7 +54,9 @@ Below is a basic example for a simple resume:
"Software Architect"
)
),
date: datetime.today().display()
profile-picture: none,
date: datetime.today().display(),
page-size: "us-letter"
)
= Education
@@ -97,7 +99,7 @@ To build and test the project locally, you will need to install the `typst` CLI.
With typst installed you can make changes to `lib.typ` and then `just install` or `just install-preview` to install the package locally. Change the import statements in the template files to point to the local package (if needed):
```typst
#import "@local/modern-cv:0.6.0": *
#import "@local/modern-cv:0.8.0": *
````
If you use `just install-preview` you will only need to update the version number to match `typst.toml`.

View File

@@ -1,9 +1,9 @@
#import "../lib.typ"
#import "@preview/tidy:0.3.0"
#import "@preview/tidy:0.4.1"
#let docs = tidy.parse-module(
read("../lib.typ"),
name: "Modern CV",
scope: (resume: lib),
)
#tidy.show-module(docs)
#tidy.show-module(docs, style: tidy.styles.minimal)

View File

@@ -8,6 +8,7 @@ cover-letter = "Cover Letter"
attached = "Attached"
curriculum-vitae = "Curriculum Vitae"
sincerely = "Sincerely"
letter-position-pretext = "Job Application for"
[lang.de]
resume = "Lebenslauf"
@@ -15,7 +16,8 @@ dear = "Sehr geehrte"
cover-letter = "Anschreiben"
attached = "Angehängt"
curriculum-vitae = "Lebenslauf"
sincerely = "Aufrichtig"
sincerely = "Mit freundlichen Grüßen"
letter-position-pretext = "Bewerbung für"
[lang.gr]
resume = "Βιογραφικό"
@@ -24,6 +26,7 @@ cover-letter = "Συνοδευτική Επιστολή"
attached = "Συνημμένο"
curriculum-vitae = "Βιογραφικό"
sincerely = "Με εκτίμηση"
letter-position-pretext = "Αίτηση εργασίας για"
[lang.pt]
resume = "Currículo"
@@ -32,6 +35,7 @@ cover-letter = "Carta de Apresentação"
attached = "Em anexo"
curriculum-vitae = "Currículo"
sincerely = "Atenciosamente"
letter-position-pretext = "Candidatura a emprego para"
[lang.sp]
resume = "Currículum"
@@ -40,6 +44,7 @@ cover-letter = "Carta de Presentación"
attached = "Adjunto"
curriculum-vitae = "Currículum"
sincerely = "Sinceramente"
letter-position-pretext = "Solicitud de empleo para"
[lang.fr]
resume = "Curriculum Vitae"
@@ -48,6 +53,7 @@ cover-letter = "Lettre de motivation"
attached = "Ci-joint"
curriculum-vitae = "Curriculum Vitae"
sincerely = "Sincèrement"
letter-position-pretext = "Demande d'emploi pour"
[lang.ru]
resume = "Резюме"
@@ -56,6 +62,7 @@ cover-letter = "Сопроводительное письмо"
attached = "Прилагается"
curriculum-vitae = "Биографическая справка"
sincerely = "Искренне"
letter-position-pretext = "Заявление о приеме на работу"
[lang.zh]
resume = "简历"
@@ -64,6 +71,7 @@ cover-letter = "求职信"
attached = "附件"
curriculum-vitae = "简历"
sincerely = "真诚的"
letter-position-pretext = "職位申請"
[lang.it]
resume = "Curriculum"
@@ -72,3 +80,4 @@ cover-letter = "Lettera di presentazione"
attached = "Allegato"
curriculum-vitae = "Curriculum Vitae"
sincerely = "Cordiali saluti"
letter-position-pretext = "Domanda di lavoro per"

138
lib.typ
View File

@@ -184,6 +184,7 @@
/// The original template: https://github.com/posquit0/Awesome-CV
///
/// - author (content): Structure that takes in all the author's information
/// - profile-picture (image): The profile picture of the author. This will be cropped to a circle and should be square in nature.
/// - date (string): The date the resume was created
/// - accent-color (color): The accent color of the resume
/// - colored-headers (boolean): Whether the headers should be colored or not
@@ -192,12 +193,15 @@
/// -> none
#let resume(
author: (:),
profile-picture: image,
date: datetime.today().display("[month repr:long] [day], [year]"),
accent-color: default-accent-color,
colored-headers: true,
show-footer: true,
language: "en",
font: ("Source Sans Pro", "Source Sans 3"),
header-font: ("Roboto"),
paper-size: "a4",
body,
) = {
if type(accent-color) == "string" {
@@ -223,7 +227,7 @@
)
set page(
paper: "a4",
paper: paper-size,
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
footer: if show-footer [#__resume_footer(
author,
@@ -257,7 +261,7 @@
} else {
color-darkgray
}
#text[#strong[#text(color)[#it.body.text]]]
#text[#strong[#text(color)[#it.body]]]
#box(width: 1fr, line(length: 100%))
]
@@ -286,7 +290,7 @@
#set text(
size: 32pt,
style: "normal",
font: ("Roboto"),
font: header-font,
)
#if language == "zh" or language == "ja" [
#text(
@@ -399,11 +403,37 @@
]
}
name
positions
address
contacts
if profile-picture != none {
grid(
columns: (100% - 4cm, 4cm),
rows: (100pt),
gutter: 10pt,
[
#name
#positions
#address
#contacts
],
align(left + horizon)[
#block(
clip: true,
stroke: 0pt,
radius: 2cm,
width: 4cm,
height: 4cm,
profile-picture,
)
],
)
} else {
name
positions
address
contacts
}
body
}
/// The base item for resume entries.
@@ -540,6 +570,7 @@
font: ("Source Sans Pro", "Source Sans 3"),
show-footer: true,
closing: none,
paper-size: "a4",
body,
) = {
if type(accent-color) == "string" {
@@ -570,7 +601,7 @@
)
set page(
paper: "a4",
paper: paper-size,
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
footer: if show-footer [#__coverletter_footer(
author,
@@ -603,7 +634,7 @@
)
#align(left)[
#text[#strong[#text(accent-color)[#it.body.text]]]
#text[#strong[#text(accent-color)[#it.body]]]
#box(width: 1fr, line(length: 100%))
]
]
@@ -663,53 +694,56 @@
let contacts = {
set box(height: 9pt)
let separator = [#box(sym.bar.v)]
let separator = [ #box(sym.bar.v) ]
let author_list = ()
if ("phone" in author) {
author_list.push[
#phone-icon
#box[#text(author.phone)]
]
}
if ("email" in author) {
author_list.push[
#email-icon
#box[#link("mailto:" + author.email)[#author.email]]
]
}
if ("github" in author) {
author_list.push[
#github-icon
#box[#link("https://github.com/" + author.github)[#author.github]]
]
}
if ("linkedin" in author) {
author_list.push[
#linkedin-icon
#box[
#link("https://www.linkedin.com/in/" + author.linkedin)[#author.firstname #author.lastname]
]
]
}
if ("orcid" in author) {
author_list.push[
#orcid-icon
#box[#link("https://orcid.org/" + author.orcid)[#author.orcid]]
]
}
if ("website" in author) {
author_list.push[
#website-icon
#box[#link(author.website)[#author.website]]
]
}
align(right)[
#set text(
size: 8pt,
weight: "light",
style: "normal",
)
#block[
#align(horizon)[
#stack(
dir: ltr,
spacing: 0.5em,
if ("phone" in author) [
#phone-icon
#box[#text(author.phone)]
#separator
],
if ("email" in author) [
#email-icon
#box[#link("mailto:" + author.email)[#author.email]]
],
if ("github" in author) [
#separator
#github-icon
#box[#link("https://github.com/" + author.github)[#author.github]]
],
if ("linkedin" in author) [
#separator
#linkedin-icon
#box[
#link("https://www.linkedin.com/in/" + author.linkedin)[#author.firstname #author.lastname]
]
],
if ("orcid" in author) [
#separator
#orcid-icon
#box[#link("https://orcid.org/" + author.orcid)[#author.orcid]]
],
if ("website" in author) [
#separator
#website-icon
#box[#link(author.website)[#author.website]]
],
)
]
]
#author_list.join(separator)
]
}
@@ -742,7 +776,7 @@
#text(weight: "light")[#linguify(
"sincerely",
from: lang_data,
)#sym.comma] \
)#if language != "de" [#sym.comma]] \
#text(weight: "bold")[#author.firstname #author.lastname] \ \
]
]
@@ -790,7 +824,7 @@
// TODO: Make this adaptable to content
underline(evade: false, stroke: 0.5pt, offset: 0.3em)[
#text(weight: "bold", size: 12pt)[Job Application for #job-position]
#text(weight: "bold", size: 12pt)[#linguify("letter-position-pretext", from: lang_data) #job-position]
]
pad(top: 1em, bottom: 1em)[
#text(weight: "light", fill: color-gray)[

View File

@@ -1,4 +1,4 @@
#import "@preview/modern-cv:0.7.0": *
#import "@preview/modern-cv:0.8.0": *
#show: coverletter.with(
author: (
@@ -17,6 +17,7 @@
),
),
profile-picture: image("./profile.png"),
// change this to match the language available in 'lang.toml'
language: "en",
font: "Times New Roman",
// Remove the following line to show the footer
@@ -24,6 +25,8 @@
show-footer: false,
// set this to `none` to show the default or remove it completely
closing: [],
// see typst "page" documentation for more options
paper-size: "us-gov-legal"
)
#hiring-entity-info(entity-info: (

View File

@@ -1,4 +1,4 @@
#import "@preview/modern-cv:0.7.0": *
#import "@preview/modern-cv:0.8.0": *
#show: coverletter.with(
author: (

View File

@@ -1,4 +1,4 @@
#import "@preview/modern-cv:0.7.0": *
#import "@preview/modern-cv:0.8.0": *
#show: resume.with(
author: (
@@ -20,10 +20,12 @@
"Developer",
),
),
profile-picture: none,
date: datetime.today().display(),
language: "en",
colored-headers: true,
show-footer: false,
paper-size: "us-letter",
)
= Experience

View File

@@ -1,4 +1,4 @@
#import "@local/modern-cv:0.7.0": *
#import "@local/modern-cv:0.8.0": *
// setup the document like we do for the resume
#let font = ("Source Sans Pro", "Source Sans 3")

View File

@@ -1,4 +1,4 @@
#import "@local/modern-cv:0.7.0": *
#import "@local/modern-cv:0.8.0": *
// setup the document like we do for the resume
#let font = ("Source Sans Pro", "Source Sans 3")

View File

@@ -1,6 +1,6 @@
[package]
name = "modern-cv"
version = "0.7.0"
version = "0.8.0"
compiler = "0.12.0"
entrypoint = "lib.typ"
authors = ["Paul Tsouchlos <https://github.com/DeveloperPaul123>"]
@@ -10,7 +10,6 @@ keywords = ["CV", "Curriculum Vitae", "Resume", "Minimalistic", "Professional",
categories = ["cv"]
disciplines = []
exclude = ["resume-documentation*", "scripts*", "assets/images/*"]
homepage = "https://github.com/DeveloperPaul123/modern-cv"
repository = "https://github.com/DeveloperPaul123/modern-cv"
[template]