33 Commits

Author SHA1 Message Date
Paul Tsouchlos
74e939cfda chore: update version used in templates 2024-09-02 09:14:38 -04:00
Paul T
bfa22cf89a Merge pull request #55 from DeveloperPaul123/feature/show-hide-footer
feat: add ability to show/hide footer
2024-08-19 23:59:57 -04:00
Paul Tsouchlos
67e8c4ec7f feat: add ability to show/hide footer 2024-08-17 23:43:29 -04:00
Paul Tsouchlos
d6ac41a03b chore: bump version for next release 2024-08-17 23:31:48 -04:00
Paul T
07f2e2a6f6 Merge pull request #54 from DeveloperPaul123/feature/add-font-input
Add font input for resume and coverletter
2024-08-17 23:30:57 -04:00
Paul Tsouchlos
b661a92801 feat: add font input for coverletter 2024-08-17 23:28:48 -04:00
Paul Tsouchlos
f6f1e6f019 feat: add input for font in resume 2024-08-17 23:26:30 -04:00
Paul Tsouchlos
be02c50e20 feat: add snippet with updated resume-entry functionality 2024-08-17 23:26:16 -04:00
Paul T
23d4691994 Merge pull request #53 from gtn1024/patch-1
hidden date and description when both is empty
2024-08-17 20:18:29 -04:00
Taoning Ge
08f72ca1e5 hidden date and description when both is empty 2024-08-17 15:57:39 +08:00
Paul T
79a53ee9c1 Merge pull request #52 from gtn1024/homepage
feat: add homepage to contacts
2024-08-12 08:11:50 -04:00
Taoning Ge
8c6071a82d feat: add homepage to contacts 2024-08-12 09:32:43 +08:00
Paul T
f26afed219 Merge pull request #51 from hmyuuu/orcid
Add ORCID links with icons in the header
2024-07-30 08:02:41 -04:00
Huaiming Yu
9e65c85a0d Add orcid link 2024-07-30 15:29:18 +08:00
Paul T
9d2dff3a5b Merge pull request #49 from gtn1024/lang-zh
feat: add chinese language
2024-07-26 07:08:16 -04:00
Taoning Ge
4e71f1db53 feat: add chinese language 2024-07-26 10:09:47 +08:00
Paul Tsouchlos
4346e36a8d Merge branch 'main' of github.com:DeveloperPaul123/modern-cv 2024-07-23 09:38:37 -04:00
Paul Tsouchlos
41131cbb86 fix: import version in example 2024-07-23 09:38:24 -04:00
Paul T
d2aa55b889 Merge pull request #48 from DeveloperPaul123/release/0.5.0
`0.5.0` release back merge
2024-07-22 10:52:55 -04:00
Paul Tsouchlos
a2fe9ca40a chore: update doc generation package 2024-07-22 10:50:03 -04:00
Paul Tsouchlos
78a53befb5 fix: theming issues and update docs 2024-07-22 10:49:52 -04:00
Paul Tsouchlos
3845415587 format: auto-formatting 2024-07-22 09:52:18 -04:00
Paul Tsouchlos
650b2b0cec chore: update version in templates 2024-07-22 09:51:15 -04:00
Paul Tsouchlos
4dcb8ab7fd chore: bump version 2024-07-22 09:50:02 -04:00
Paul Tsouchlos
40427ffede fix: don't color resume-entry links 2024-07-22 09:49:51 -04:00
Paul T
2567ecb808 Merge pull request #47 from zundertj/patch-1
Update README example to use 0.4.0
2024-07-21 18:47:27 -04:00
J van Zundert
ab79ab2790 Update README example to use 0.4.0
As a new user (to typst and to modern-cv), I copy-pasted the example, got it working, and then started modifying using features released post 0.1.0 (such as `colored-headers`). It took me a while to figure out that the import is of a very old version.

PS: thank you for this package, works very well.
2024-07-21 09:20:34 +00:00
Paul T
9652a1cb90 Merge pull request #46 from hadim/hadim-patch-1
Tweaks + add new icons
2024-07-15 10:01:26 -04:00
Paul T
a721c30354 feat: use new features in template 2024-07-15 09:58:33 -04:00
Paul T
207a2f37b9 chore: remove spacing
I don't think this added space accomplishes much. Removing for now.
2024-07-15 09:55:53 -04:00
Paul T
aafb3b31f9 fix: remove italics
Italics can be unnecessarily hard to read.
2024-07-15 09:55:32 -04:00
Hadrien Mary
da7aec4451 Tweaks 2024-07-15 09:08:18 -04:00
Paul T
9837139dad Merge pull request #43 from DeveloperPaul123/release/0.4.0
Back-merge: 0.4.0 release
2024-07-10 15:17:41 -04:00
8 changed files with 146 additions and 54 deletions

View File

@@ -27,7 +27,7 @@ See `typst fonts --help` for more information on configuring fonts for `typst` t
Below is a basic example for a simple resume: Below is a basic example for a simple resume:
```typst ```typst
#import "@preview/modern-cv:0.1.0": * #import "@preview/modern-cv:0.5.0": *
#show: resume.with( #show: resume.with(
author: ( author: (

View File

@@ -56,3 +56,11 @@ cover-letter = "Сопроводительное письмо"
attached = "Прилагается" attached = "Прилагается"
curriculum-vitae = "Биографическая справка" curriculum-vitae = "Биографическая справка"
sincerely = "Искренне" sincerely = "Искренне"
[lang.zh]
resume = "简历"
dear = "亲爱的"
cover-letter = "求职信"
attached = "附件"
curriculum-vitae = "简历"
sincerely = "真诚的"

156
lib.typ
View File

@@ -6,6 +6,7 @@
#let color-darkgray = rgb("#333333") #let color-darkgray = rgb("#333333")
#let color-gray = rgb("#5d5d5d") #let color-gray = rgb("#5d5d5d")
#let default-accent-color = rgb("#262F99") #let default-accent-color = rgb("#262F99")
#let default-location-color = rgb("#333333")
// const icons // const icons
#let linkedin-icon = box( #let linkedin-icon = box(
@@ -14,8 +15,19 @@
#let github-icon = box( #let github-icon = box(
fa-icon("github", fill: color-darknight), fa-icon("github", fill: color-darknight),
) )
#let twitter-icon = box(
fa-icon("twitter", fill: color-darknight),
)
#let google-scholar-icon = box(
fa-icon("google-scholar", fill: color-darknight),
)
#let orcid-icon = box(
fa-icon("orcid", fill: color-darknight),
)
#let phone-icon = box(fa-icon("square-phone", fill: color-darknight)) #let phone-icon = box(fa-icon("square-phone", fill: color-darknight))
#let email-icon = box(fa-icon("envelope", fill: color-darknight)) #let email-icon = box(fa-icon("envelope", fill: color-darknight))
#let birth-icon = box(fa-icon("cake", fill: color-darknight))
#let homepage-icon = box(fa-icon("home", fill: color-darknight))
/// Helpers /// Helpers
@@ -51,6 +63,50 @@
] ]
} }
#let __coverletter_footer(author, language, date, lang_data) = {
set text(
fill: gray,
size: 8pt,
)
__justify_align_3[
#smallcaps[#date]
][
#smallcaps[
#if language == "zh" or language == "ja" [
#author.firstname#author.lastname
] else [
#author.firstname#sym.space#author.lastname
]
#sym.dot.c
#linguify("cover-letter", from: lang_data)
]
][
#counter(page).display()
]
}
#let __resume_footer(author, language, lang_data, date) = {
set text(
fill: gray,
size: 8pt,
)
__justify_align_3[
#smallcaps[#date]
][
#smallcaps[
#if language == "zh" or language == "ja" [
#author.firstname#author.lastname
] else [
#author.firstname#sym.space#author.lastname
]
#sym.dot.c
#linguify("resume", from: lang_data)
]
][
#counter(page).display()
]
}
/// Show a link with an icon, specifically for Github projects /// Show a link with an icon, specifically for Github projects
/// *Example* /// *Example*
/// #example(`resume.github-link("DeveloperPaul123/awesome-resume")`) /// #example(`resume.github-link("DeveloperPaul123/awesome-resume")`)
@@ -134,7 +190,9 @@
date: datetime.today().display("[month repr:long] [day], [year]"), date: datetime.today().display("[month repr:long] [day], [year]"),
accent-color: default-accent-color, accent-color: default-accent-color,
colored-headers: true, colored-headers: true,
show-footer: true,
language: "en", language: "en",
font: ("Source Sans Pro", "Source Sans 3"),
body, body,
) = { ) = {
if type(accent-color) == "string" { if type(accent-color) == "string" {
@@ -149,7 +207,7 @@
) )
set text( set text(
font: ("Source Sans Pro", "Source Sans 3"), font: font,
lang: language, lang: language,
size: 11pt, size: 11pt,
fill: color-darkgray, fill: color-darkgray,
@@ -159,27 +217,7 @@
set page( set page(
paper: "a4", paper: "a4",
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm), margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
footer: [ footer: if show-footer [#__resume_footer(author, language, lang_data, date)] else [],
#set text(
fill: gray,
size: 8pt,
)
#__justify_align_3[
#smallcaps[#date]
][
#smallcaps[
#if language == "zh" or language == "ja" [
#author.firstname#author.lastname
] else [
#author.firstname#sym.space#author.lastname
]
#sym.dot.c
#linguify("resume", from: lang_data)
]
][
#counter(page).display()
]
],
footer-descent: 0pt, footer-descent: 0pt,
) )
@@ -196,6 +234,7 @@
) )
show heading.where(level: 1): it => [ show heading.where(level: 1): it => [
#set block( #set block(
above: 1em, above: 1em,
below: 1em, below: 1em,
@@ -214,6 +253,7 @@
#text[#strong[#text(color)[#it.body.text]]] #text[#strong[#text(color)[#it.body.text]]]
#box(width: 1fr, line(length: 100%)) #box(width: 1fr, line(length: 100%))
] ]
] ]
show heading.where(level: 2): it => { show heading.where(level: 2): it => {
@@ -275,7 +315,7 @@
let address = { let address = {
set text( set text(
size: 9pt, size: 9pt,
weight: "bold", weight: "regular",
) )
align(center)[ align(center)[
#if ("address" in author) [ #if ("address" in author) [
@@ -297,6 +337,11 @@
) )
#block[ #block[
#align(horizon)[ #align(horizon)[
#if ("birth" in author) [
#birth-icon
#box[#text(author.birth)]
#separator
]
#if ("phone" in author) [ #if ("phone" in author) [
#phone-icon #phone-icon
#box[#text(author.phone)] #box[#text(author.phone)]
@@ -306,6 +351,11 @@
#email-icon #email-icon
#box[#link("mailto:" + author.email)[#author.email]] #box[#link("mailto:" + author.email)[#author.email]]
] ]
#if ("homepage" in author) [
#separator
#homepage-icon
#box[#link(author.homepage)[#author.homepage]]
]
#if ("github" in author) [ #if ("github" in author) [
#separator #separator
#github-icon #github-icon
@@ -315,9 +365,25 @@
#separator #separator
#linkedin-icon #linkedin-icon
#box[ #box[
#link("https://www.linkedin.com/in/" + author.linkedin)[#author.firstname #author.lastname] #link("https://www.linkedin.com/in/" + author.linkedin)[#author.linkedin]
] ]
] ]
#if ("twitter" in author) [
#separator
#twitter-icon
#box[#link("https://twitter.com/" + author.twitter)[\@#author.twitter]]
]
#if ("scholar" in author) [
#let fullname = str(author.firstname + " " + author.lastname)
#separator
#google-scholar-icon
#box[#link("https://scholar.google.com/citations?user=" + author.scholar)[#fullname]]
]
#if ("orcid" in author) [
#separator
#orcid-icon
#box[#link("https://orcid.org/" + author.orcid)[#author.orcid]]
]
] ]
] ]
] ]
@@ -349,17 +415,31 @@
/// - location (string): The location of the resume entry /// - location (string): The location of the resume entry
/// - date (string): The date of the resume entry, this can be a range (e.g. "Jan 2020 - Dec 2020") /// - date (string): The date of the resume entry, this can be a range (e.g. "Jan 2020 - Dec 2020")
/// - description (content): The body of the resume entry /// - description (content): The body of the resume entry
/// - title-link (string): The link to use for the title (can be none)
/// - accent-color (color): Override the accent color of the resume-entry
/// - location-color (color): Override the default color of the "location" for a resume entry.
#let resume-entry( #let resume-entry(
title: none, title: none,
location: "", location: "",
date: "", date: "",
description: "", description: "",
title-link: none,
accent-color: default-accent-color, accent-color: default-accent-color,
location-color: default-location-color,
) = { ) = {
let title-content
if type(title-link) == "string" {
title-content = link(title-link)[#title]
} else {
title-content = title
}
pad[ pad[
#justified-header(title, location) #justified-header(title-content, location)
#if description != "" or date != "" [
#secondary-justified-header(description, date) #secondary-justified-header(description, date)
] ]
]
} }
/// Show cumulative GPA. /// Show cumulative GPA.
@@ -427,6 +507,8 @@
date: datetime.today().display("[month repr:long] [day], [year]"), date: datetime.today().display("[month repr:long] [day], [year]"),
accent-color: default-accent-color, accent-color: default-accent-color,
language: "en", language: "en",
font: ("Source Sans Pro", "Source Sans 3"),
show-footer: true,
body, body,
) = { ) = {
if type(accent-color) == "string" { if type(accent-color) == "string" {
@@ -442,7 +524,7 @@
) )
set text( set text(
font: ("Source Sans Pro", "Source Sans 3"), font: font,
lang: language, lang: language,
size: 11pt, size: 11pt,
fill: color-darkgray, fill: color-darkgray,
@@ -452,27 +534,7 @@
set page( set page(
paper: "a4", paper: "a4",
margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm), margin: (left: 15mm, right: 15mm, top: 10mm, bottom: 10mm),
footer: [ footer: if show-footer [#__coverletter_footer(author, language, date, lang_data)] else [],
#set text(
fill: gray,
size: 8pt,
)
#__justify_align_3[
#smallcaps[#date]
][
#smallcaps[
#if language == "zh" or language == "ja" [
#author.firstname#author.lastname
] else [
#author.firstname#sym.space#author.lastname
]
#sym.dot.c
#linguify("cover-letter", from: lang_data)
]
][
#counter(page).display()
]
],
footer-descent: 0pt, footer-descent: 0pt,
) )

View File

@@ -1,5 +1,5 @@
#import "lib.typ" #import "lib.typ"
#import "@preview/tidy:0.2.0" #import "@preview/tidy:0.3.0"
#let docs = tidy.parse-module( #let docs = tidy.parse-module(
read("lib.typ"), read("lib.typ"),

View File

@@ -1,10 +1,11 @@
#import "@preview/modern-cv:0.4.0": * #import "@preview/modern-cv:0.6.0": *
#show: coverletter.with( #show: coverletter.with(
author: ( author: (
firstname: "John", firstname: "John",
lastname: "Smith", lastname: "Smith",
email: "js@gmail.com", email: "js@gmail.com",
homepage: "https://example.com",
phone: "(+1) 111-111-1111", phone: "(+1) 111-111-1111",
github: "DeveloperPaul123", github: "DeveloperPaul123",
linkedin: "John Smith", linkedin: "John Smith",
@@ -16,6 +17,8 @@
), ),
profile-picture: image("./profile.png"), profile-picture: image("./profile.png"),
language: "en", language: "en",
font: "Times New Roman",
// show-footer: false, // Uncomment to hide footer
) )
#hiring-entity-info(entity-info: ( #hiring-entity-info(entity-info: (

View File

@@ -1,10 +1,11 @@
#import "@preview/modern-cv:0.4.0": * #import "@preview/modern-cv:0.6.0": *
#show: coverletter.with( #show: coverletter.with(
author: ( author: (
firstname: "John", firstname: "John",
lastname: "Smith", lastname: "Smith",
email: "js@gmail.com", email: "js@gmail.com",
homepage: "https://example.com",
phone: "(+1) 111-111-1111", phone: "(+1) 111-111-1111",
github: "DeveloperPaul123", github: "DeveloperPaul123",
linkedin: "John Smith", linkedin: "John Smith",

View File

@@ -1,12 +1,17 @@
#import "@preview/modern-cv:0.4.0": * #import "@preview/modern-cv:0.6.0": *
#show: resume.with( #show: resume.with(
author: ( author: (
firstname: "John", firstname: "John",
lastname: "Smith", lastname: "Smith",
email: "js@example.com", email: "js@example.com",
homepage: "https://example.com",
phone: "(+1) 111-111-1111", phone: "(+1) 111-111-1111",
github: "DeveloperPaul123", github: "DeveloperPaul123",
twitter: "typstapp",
scholar: "",
orcid: "0000-0000-0000-000X",
birth: "January 1, 1990",
linkedin: "Example", linkedin: "Example",
address: "111 Example St. Example City, EX 11111", address: "111 Example St. Example City, EX 11111",
positions: ( positions: (
@@ -18,6 +23,7 @@
date: datetime.today().display(), date: datetime.today().display(),
language: "en", language: "en",
colored-headers: true, colored-headers: true,
show-footer: false,
) )
= Experience = Experience
@@ -27,6 +33,7 @@
location: "Example City, EX", location: "Example City, EX",
date: "2019 - Present", date: "2019 - Present",
description: "Example, Inc.", description: "Example, Inc.",
title-link: "https://github.com/DeveloperPaul123",
) )
#resume-item[ #resume-item[
@@ -48,6 +55,17 @@
- #lorem(25) - #lorem(25)
] ]
#resume-entry(
title: "Intern",
location: "Example City, EX",
)
#resume-item[
- #lorem(20)
- #lorem(15)
- #lorem(25)
]
= Projects = Projects
#resume-entry( #resume-entry(

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "modern-cv" name = "modern-cv"
version = "0.4.0" version = "0.6.0"
compiler = "0.11.0" compiler = "0.11.0"
entrypoint = "lib.typ" entrypoint = "lib.typ"
authors = ["Paul Tsouchlos <https://github.com/DeveloperPaul123>"] authors = ["Paul Tsouchlos <https://github.com/DeveloperPaul123>"]