Skip to content

Commit

Permalink
added the cv template
Browse files Browse the repository at this point in the history
  • Loading branch information
LaurenzV committed Dec 29, 2022
1 parent 32058b8 commit 9473eb0
Show file tree
Hide file tree
Showing 10 changed files with 268 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/.idea
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# SimpleCV
SimpleCV is simple and elegant CV template written in [Typst](https://typst.app/)
aimed at (but not limited to!) people with an engineering background. The template was
inspired by two Latex CV templates([[1]](https://www.overleaf.com/latex/templates/autocv/scfvqfpxncwb),
[[2]](https://www.overleaf.com/latex/templates/faangpath-simple-template/npsfpdqnxmbc)).
Feel free to create open an issue if you have any questions or notice some error.

# Usage
Create a new Typst project and copy the whole content of the `source` directory
into the project. Change the contents of the `main.typ` file according to your own needs. This should be it.
You can find an example of what the CV looks like in `example.pdf`.

# License
The project itself is available under the MIT license. The icons are
from FontAwesome and subject their [their license agreement](https://github.com/FortAwesome/Font-Awesome/blob/6.x/LICENSE.txt).
Binary file added example.pdf
Binary file not shown.
1 change: 1 addition & 0 deletions source/email.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions source/github.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions source/linkedin.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
109 changes: 109 additions & 0 deletions source/main.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#import template, education_entry, work_entry, skill_entry from "simplecv.typ"

// Change the margins of the cv.
#set page(margin: (x: 1.5cm, y: 0.5cm))

// Change the overall text size of the cv. Might be useful if you want to add/remove content so that everything still stays on one page.
#set text(12pt)

// Change the font of the cv.
#set text("Linux Libertine")

// Change the theme color of the cv.
#let color = blue

// Change to your name.
#let name = "John Doe"

// Change the shown contact data. You can also change the order of the elements so that they will show up in a different order. Currently, only these five elements are available with icons, but you can add new ones by editing the template.
#let contact_data = (
(
"service": "linkedin",
"display": "John Doe",
"link": "https://www.linkedin.com/in/JohnDoe"
),
(
"service": "email",
"display": "[email protected]",
"link": "mailto://[email protected]"
),
(
"service": "phone",
"display": "+1 123 456 789",
"link": "tel:+1 123 456 789"
),
(
"service": "github",
"display": "JohnDoe",
"link": "https://github.com/JohnDoe"
),
(
"service": "website",
"display": "mywebsite.com",
"link": "https://mywebsite.com"
)
)

// Leave this unchanged. This puts the name and contact data in the right spot.
#show doc => template(name, contact_data, color, doc)

// Starting from here, you can add as much content as you want. This represents the main content of the cv.
= Education
#education_entry("Computer Science", "ETH Zürich",
degree_title: "MSc.", start_date: "Sep 2016", end_date: "Jul 2018",
description: lorem(9), location: "Munich, Germany")

#education_entry("Computer Science", "Stanford University",
degree_title: "BSc.", start_date: "Sep 2012", end_date: "Jul 2016",
description: lorem(12), location: "California, USA")

= Experience
#work_entry("Senior Software Engineer", "Microsoft", start_date: "Since Nov 2021", tasks: (
lorem(7),
lorem(13),
lorem(9)
),
location: "Seattle, USA")

#work_entry("Senior Software Engineer", "Apple", start_date: "Jan 2020", end_date: "Oct 2021", tasks: (
lorem(4),
lorem(6),
lorem(14)
),
location: "California, USA")

#work_entry("Junior Software Engineer", "Google", start_date: "Oct 2018", end_date: "Nov 2019", tasks: (
lorem(8),
lorem(12),
lorem(3)
),
location: "Zurich, Switzerland")

= Projects
*Project 1*. #lorem(40)

*Project 2*. #lorem(32)

*Project 3*. #lorem(40)

= Skills
// Ratings won't be displayed in this template.
#skill_entry("Technologies",
(
("name": "Git", "rating": 3),
("name": "C++", "rating": 2),
("name": "Python", "rating": 5),
("name": "Typst", "rating": 3),
("name": "JavaScript", "rating": 4),
("name": "Vue.js", "rating": 4),
)
)

#skill_entry("Languages",
(
("name": "English", "rating": 5),
("name": "German", "rating": 5),
("name": "Spanish", "rating": 3),
("name": "Japanese", "rating": 2),
)
)
1 change: 1 addition & 0 deletions source/phone.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
138 changes: 138 additions & 0 deletions source/simplecv.typ
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
// Based on https://www.overleaf.com/latex/templates/autocv/scfvqfpxncwb and https://www.overleaf.com/latex/templates/faangpath-simple-template/npsfpdqnxmbc

#set list(indent: 1em)
// Reduce space between paragraphs.
#let par_space = 0.5em
// Reduce space between headings and descriptions.
#let sep_space = par_space + 0.2em

// Format start and end dates.
#let format_date(start_date: none, end_date: none) = {
let date = {
if end_date == none {
start_date
} else if start_date == none {
end_date
} else {
start_date + " - " + end_date
}
}

[*#date*]
}

// Format locations.
#let format_location(location) = {
[_#block(above: sep_space, location)_]
}

// General entry that is split into a left and right half (for experience and education).
#let cv_entry(left_content: none, right_content: none) = {
grid(
columns: (11fr, 6fr),
column-gutter: 1cm,
{
set align(left)
left_content
},
{
set align(right)
right_content
}
)
}

// Entry for education.
#let education_entry(degree, university, degree_title: none, description: none, start_date: none, end_date: none, location: none) = {
cv_entry(
left_content: {
if degree_title != none {
[*#degree_title*] + " "
} + [*#degree*] + [ (#university)] + block(above: sep_space, par[#description])
},
right_content: {
format_date(start_date: start_date, end_date: end_date)

if location != none {
"\n" + format_location(location)
}
}
)
}

// Entry for work.
#let work_entry(role, company, tasks: none, start_date: none, end_date: none, location: none) = {
cv_entry(
left_content: {
[*#role*] + "\n" + block(above: sep_space, text[#company])

if tasks != none {
let tasks_list = []

for task in tasks {
tasks_list += [- #task]
}

tasks_list
}
},
right_content: {
format_date(start_date: start_date, end_date: end_date)

if location != none {
"\n" + format_location(location)
}
}
)
}

// Entry for skills
#let skill_entry(category, skills) = {
[== #category]

let cell = rect.with(radius: 5pt, inset: 4pt)
let boxes = for skill in skills {(cell(skill.name),)}

{boxes.join(" ")}
}

// Set name and contact data and format headings
#let template(name, contact_data, color, doc) = {
set par(justify: true, leading: par_space)
align(center)[
#smallcaps(text(size: 2.5em, fill: color)[#name]) \

{
if contact_data != none and contact_data.len() > 0 {
let elements = for el in contact_data {
(link(el.link)[{box(image(height: 0.7em, el.service + ".svg")) + " " + el.display}],)
}
elements.join(" | ")
}
}
]

show heading.where(level: 1): i => {
set align(left)
let title = smallcaps(i.title)

set block(above: 1em)
set text(weight: "light", size: 1.2em, fill: color)
stack(
dir: ttb,
spacing: 2mm,
[{title}],
line(length: 100%, stroke: color)
)
}

show heading.where(level: 2): i => {
set align(left)
let title = smallcaps(i.title)
set block(above: 0.8em)
set text(weight: "light", size: 1.1em, fill: color)
[{i.title}]
}

doc
}
1 change: 1 addition & 0 deletions source/website.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 9473eb0

Please sign in to comment.