Compare commits
17 Commits
release/0.
...
release/0.
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b7c1f45c1 | ||
|
|
1709d6458d | ||
|
|
0d70af373b | ||
|
|
5f91afd694 | ||
|
|
a0e579493a | ||
|
|
15a6288165 | ||
|
|
0dbf348b2b | ||
|
|
311bf4fcc5 | ||
|
|
c706d87704 | ||
|
|
803aea96cd | ||
|
|
48fc43779e | ||
|
|
d4ba30d3f2 | ||
|
|
6330bded37 | ||
|
|
d73acd5dea | ||
|
|
009adbe248 | ||
|
|
bde0b7120c | ||
|
|
4f43e0b2b3 |
3
.github/FUNDING.yml
vendored
Normal file
3
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Thanks for any donations! :)
|
||||||
|
|
||||||
|
github: DeveloperPaul123
|
||||||
21
.github/workflows/build-documentation.yml
vendored
Normal file
21
.github/workflows/build-documentation.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
name: Build documentation
|
||||||
|
on: [push, workflow_dispatch]
|
||||||
|
jobs:
|
||||||
|
build_pdf:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Set up Git repository
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Install fonts
|
||||||
|
run: sudo apt-get install fonts-font-awesome fonts-roboto texlive-fonts-recommended texlive-fonts-extra
|
||||||
|
- name: Typst
|
||||||
|
uses: yusancky/setup-typst@v2
|
||||||
|
id: setup-typst
|
||||||
|
with:
|
||||||
|
version: 'v0.11.0'
|
||||||
|
- run: typst compile modern-cv-docs.typ
|
||||||
|
- name: Upload PDF file
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: modern-cv-docs
|
||||||
|
path: modern-cv-docs.pdf
|
||||||
28
README.md
28
README.md
@@ -3,6 +3,7 @@
|
|||||||
[](https://github.com/DeveloperPaul123/modern-cv/stargazers)
|
[](https://github.com/DeveloperPaul123/modern-cv/stargazers)
|
||||||
[](https://discord.gg/CX2ybByRnt)
|
[](https://discord.gg/CX2ybByRnt)
|
||||||

|

|
||||||
|
[](https://github.com/DeveloperPaul123/modern-cv/actions/workflows/build-documentation.yml)
|
||||||
|
|
||||||
A port of the [Awesome-CV](https://github.com/posquit0/Awesome-CV) Latex resume template in [typst](https://github.com/typst/typst).
|
A port of the [Awesome-CV](https://github.com/posquit0/Awesome-CV) Latex resume template in [typst](https://github.com/typst/typst).
|
||||||
|
|
||||||
@@ -13,7 +14,11 @@ You will need the `Roboto` and `Source Sans Pro` fonts installed on your system
|
|||||||
- [Roboto](https://fonts.google.com/specimen/Roboto)
|
- [Roboto](https://fonts.google.com/specimen/Roboto)
|
||||||
- [Source Sans Pro](https://github.com/adobe-fonts/source-sans-pro)
|
- [Source Sans Pro](https://github.com/adobe-fonts/source-sans-pro)
|
||||||
|
|
||||||
This template also uses FontAwesome icons via the `[fontawesome](https://typst.app/universe/package/fontawesome)` package.
|
This template also uses FontAwesome icons via the [fontawesome](https://typst.app/universe/package/fontawesome) package. You will need to install the fontawesome fonts on your system or configure the `typst` web app to use them. You can download fontawesome [here](https://fontawesome.com/download).
|
||||||
|
|
||||||
|
To use the fontawesome icons in the web app, add a `fonts` folder to your project and upload the `otf` files from the fontawesome download to this folder like so:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
See `typst fonts --help` for more information on configuring fonts for `typst` that are not installed on your system.
|
See `typst fonts --help` for more information on configuring fonts for `typst` that are not installed on your system.
|
||||||
|
|
||||||
@@ -43,22 +48,33 @@ Below is a basic example for a simple resume:
|
|||||||
|
|
||||||
= Education
|
= Education
|
||||||
|
|
||||||
#resume_entry(
|
#resume-entry(
|
||||||
title: "Example University",
|
title: "Example University",
|
||||||
location: "B.S. in Computer Science",
|
location: "B.S. in Computer Science",
|
||||||
date: "August 2014 - May 2019",
|
date: "August 2014 - May 2019",
|
||||||
description: "Example"
|
description: "Example"
|
||||||
)
|
)
|
||||||
|
|
||||||
#resume_item[
|
#resume-item[
|
||||||
- #lorem(20)
|
- #lorem(20)
|
||||||
- #lorem(15)
|
- #lorem(15)
|
||||||
- #lorem(25)
|
- #lorem(25)
|
||||||
]
|
]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Output
|
After saving to a `*.typ` file, compile your resume using the following command:
|
||||||
|
|
||||||
| | |
|
```bash
|
||||||
|
typst compile resume.typ
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information on how to use and compile `typst` files, see the [official documentation](https://typst.app/docs).
|
||||||
|
|
||||||
|
Documentation for this template is published with each commit. See the attached PDF on each Github Action run [here](https://github.com/DeveloperPaul123/modern-cv/actions).
|
||||||
|
|
||||||
|
### Output Examples
|
||||||
|
|
||||||
|
| Resumes | Cover letters |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
|  |  |
|
|  |  |
|
||||||
|
| | |
|
||||||
|
|||||||
BIN
assets/images/coverletter.png
Normal file
BIN
assets/images/coverletter.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 205 KiB |
BIN
assets/images/coverletter2.png
Normal file
BIN
assets/images/coverletter2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
BIN
assets/images/resume.png
Normal file
BIN
assets/images/resume.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 210 KiB |
BIN
assets/images/typst_web_editor.png
Normal file
BIN
assets/images/typst_web_editor.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
coverletter.png
BIN
coverletter.png
Binary file not shown.
|
Before Width: | Height: | Size: 402 KiB |
27
lib.typ
27
lib.typ
@@ -1,10 +1,10 @@
|
|||||||
#import "@preview/fontawesome:0.1.0": *
|
#import "@preview/fontawesome:0.1.0": *
|
||||||
|
|
||||||
// const color
|
// const color
|
||||||
#let color-darknight = rgb("131A28")
|
#let color-darknight = rgb("#131A28")
|
||||||
#let color-darkgray = rgb("414141")
|
#let color-darkgray = rgb("#333333")
|
||||||
#let color-gray = rgb("5d5d5d")
|
#let color-gray = rgb("#5d5d5d")
|
||||||
#let default-accent-color = rgb("333ECC")
|
#let default-accent-color = rgb("#262F99")
|
||||||
|
|
||||||
// const icons
|
// const icons
|
||||||
#let linkedin-icon = box(fa-icon("linkedin", fa-set: "Brands", fill: color-darknight))
|
#let linkedin-icon = box(fa-icon("linkedin", fa-set: "Brands", fill: color-darknight))
|
||||||
@@ -64,14 +64,14 @@
|
|||||||
/// - body (content): The body of the right header
|
/// - body (content): The body of the right header
|
||||||
/// - accent_color (color): The accent color to color the text with. This defaults to the default-accent-color
|
/// - accent_color (color): The accent color to color the text with. This defaults to the default-accent-color
|
||||||
#let secondary-right-header(body, accent_color: default-accent-color) = {
|
#let secondary-right-header(body, accent_color: default-accent-color) = {
|
||||||
set text(accent_color, size: 11pt, style: "italic", weight: "light")
|
set text(size: 11pt, weight: "medium")
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Right section of a tertiaty headers.
|
/// Right section of a tertiaty headers.
|
||||||
/// - body (content): The body of the right header
|
/// - body (content): The body of the right header
|
||||||
#let tertiary-right-header(body) = {
|
#let tertiary-right-header(body) = {
|
||||||
set text(weight: "light", style: "italic", size: 9pt)
|
set text(weight: "light", size: 9pt)
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -110,12 +110,14 @@
|
|||||||
/// - author (content): Structure that takes in all the author's information
|
/// - author (content): Structure that takes in all the author's information
|
||||||
/// - date (string): The date the resume was created
|
/// - date (string): The date the resume was created
|
||||||
/// - accent_color (color): The accent color of the resume
|
/// - accent_color (color): The accent color of the resume
|
||||||
|
/// - colored_headers (boolean): Whether the headers should be colored or not
|
||||||
/// - body (content): The body of the resume
|
/// - body (content): The body of the resume
|
||||||
/// -> none
|
/// -> none
|
||||||
#let resume(
|
#let resume(
|
||||||
author: (:),
|
author: (:),
|
||||||
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,
|
||||||
body) = {
|
body) = {
|
||||||
set document(
|
set document(
|
||||||
author: author.firstname + " " + author.lastname,
|
author: author.firstname + " " + author.lastname,
|
||||||
@@ -168,7 +170,8 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
#align(left)[
|
#align(left)[
|
||||||
#text[#strong[#text(accent_color)[#it.body.text.slice(0, 3)]]]#strong[#text[#it.body.text.slice(3)]]
|
#let color = if colored_headers { accent_color } else { color-darkgray }
|
||||||
|
#text[#strong[#text(color)[#it.body.text]]]
|
||||||
#box(width: 1fr, line(length: 100%))
|
#box(width: 1fr, line(length: 100%))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@@ -213,8 +216,7 @@
|
|||||||
let address = {
|
let address = {
|
||||||
set text(
|
set text(
|
||||||
size: 9pt,
|
size: 9pt,
|
||||||
weight: "bold",
|
weight: "bold"
|
||||||
style: "italic",
|
|
||||||
)
|
)
|
||||||
align(center)[
|
align(center)[
|
||||||
#author.address
|
#author.address
|
||||||
@@ -259,7 +261,7 @@
|
|||||||
/// This formats the item for the resume entries. Typically your body would be a bullet list of items. Could be your responsibilities at a company or your academic achievements in an educational background section.
|
/// This formats the item for the resume entries. Typically your body would be a bullet list of items. Could be your responsibilities at a company or your academic achievements in an educational background section.
|
||||||
/// - body (content): The body of the resume entry
|
/// - body (content): The body of the resume entry
|
||||||
#let resume-item(body) = {
|
#let resume-item(body) = {
|
||||||
set text(size: 10pt, style: "normal", weight: "light")
|
set text(size: 10pt, style: "normal", weight: "light", fill: color-darknight)
|
||||||
set par(leading: 0.65em)
|
set par(leading: 0.65em)
|
||||||
body
|
body
|
||||||
}
|
}
|
||||||
@@ -390,7 +392,7 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
#align(left)[
|
#align(left)[
|
||||||
#text[#strong[#text(accent_color)[#it.body.text.slice(0, 3)]]]#strong[#text[#it.body.text.slice(3)]]
|
#text[#strong[#text(accent_color)[#it.body.text]]]
|
||||||
#box(width: 1fr, line(length: 100%))
|
#box(width: 1fr, line(length: 100%))
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
@@ -425,8 +427,7 @@
|
|||||||
let address = {
|
let address = {
|
||||||
set text(
|
set text(
|
||||||
size: 9pt,
|
size: 9pt,
|
||||||
weight: "regular",
|
weight: "bold",
|
||||||
style: "italic",
|
|
||||||
fill: color-gray
|
fill: color-gray
|
||||||
)
|
)
|
||||||
align(right)[
|
align(right)[
|
||||||
|
|||||||
BIN
resume.png
BIN
resume.png
Binary file not shown.
|
Before Width: | Height: | Size: 420 KiB |
@@ -1,3 +1,10 @@
|
|||||||
|
# requires the PSToml cmdlet to be installed
|
||||||
|
# https://github.com/jborean93/PSToml?tab=readme-ov-file
|
||||||
|
# Install-Module -Name PSToml -Scope AllUsers
|
||||||
|
|
||||||
|
$typst_toml = ConvertFrom-Toml (Get-Content "$PSScriptRoot/../typst.toml" -Raw)
|
||||||
|
Write-Host 'Package version: ' $typst_toml.package.version
|
||||||
$Source = "$PSScriptRoot/../*"
|
$Source = "$PSScriptRoot/../*"
|
||||||
$Destination = "$env:LOCALAPPDATA/typst/packages/local/modern-cv/0.1.0"
|
$Destination = "$env:LOCALAPPDATA/typst/packages/local/modern-cv/$($typst_toml.package.version)"
|
||||||
|
New-Item -ItemType Directory -Path $Destination -Force
|
||||||
Copy-Item -Path $Source -Destination $Destination -Recurse -Force
|
Copy-Item -Path $Source -Destination $Destination -Recurse -Force
|
||||||
|
|||||||
5
scripts/update_thumbnails.ps1
Normal file
5
scripts/update_thumbnails.ps1
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
typst compile -f png $PSScriptRoot/../template/resume.typ $PSScriptRoot/../assets/images/resume.png
|
||||||
|
typst compile -f png $PSScriptRoot/../template/coverletter.typ $PSScriptRoot/../assets/images/coverletter.png
|
||||||
|
typst compile -f png $PSScriptRoot/../template/coverletter2.typ $PSScriptRoot/../assets/images/coverletter2.png
|
||||||
|
|
||||||
|
oxipng.exe $PSScriptRoot/../assets/images/*
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#import "@preview/modern-cv:0.1.0":*
|
#import "@preview/modern-cv:0.2.0":*
|
||||||
|
|
||||||
#show: coverletter.with(
|
#show: coverletter.with(
|
||||||
author: (
|
author: (
|
||||||
|
|||||||
44
template/coverletter2.typ
Normal file
44
template/coverletter2.typ
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
#import "@preview/modern-cv:0.2.0":*
|
||||||
|
|
||||||
|
#show: coverletter.with(
|
||||||
|
author: (
|
||||||
|
firstname: "John",
|
||||||
|
lastname: "Smith",
|
||||||
|
email: "js@gmail.com",
|
||||||
|
phone: "(+1) 111-111-1111",
|
||||||
|
github: "DeveloperPaul123",
|
||||||
|
linkedin: "John Smith",
|
||||||
|
address: "111 Example St. Apt. 111, Example City, EX 11111",
|
||||||
|
positions: (
|
||||||
|
"Software Engineer",
|
||||||
|
"Full Stack Developer"
|
||||||
|
)
|
||||||
|
),
|
||||||
|
profile_picture: none
|
||||||
|
)
|
||||||
|
|
||||||
|
#hiring-entity-info(
|
||||||
|
entity_info: (
|
||||||
|
target: "Company Recruitement Team",
|
||||||
|
name: "Google, Inc.",
|
||||||
|
street_address: "1600 AMPHITHEATRE PARKWAY",
|
||||||
|
city: "MOUNTAIN VIEW, CA 94043"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#letter-heading(
|
||||||
|
job_position: "Software Engineer",
|
||||||
|
addressee: "Sir or Madame"
|
||||||
|
)
|
||||||
|
|
||||||
|
#coverletter-content[
|
||||||
|
#lorem(100)
|
||||||
|
]
|
||||||
|
|
||||||
|
#coverletter-content[
|
||||||
|
#lorem(90)
|
||||||
|
]
|
||||||
|
|
||||||
|
#coverletter-content[
|
||||||
|
#lorem(110)
|
||||||
|
]
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
#import "@preview/modern-cv:0.1.0": *
|
#import "@preview/modern-cv:0.2.0": *
|
||||||
|
|
||||||
#show: resume.with(
|
#show: resume.with(
|
||||||
author: (
|
author: (
|
||||||
@@ -11,34 +11,21 @@
|
|||||||
address: "111 Example St. Example City, EX 11111",
|
address: "111 Example St. Example City, EX 11111",
|
||||||
positions: (
|
positions: (
|
||||||
"Software Engineer",
|
"Software Engineer",
|
||||||
"Software Architect"
|
"Software Architect",
|
||||||
|
"Developer"
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
date: datetime.today().display()
|
date: datetime.today().display(),
|
||||||
|
colored_headers: true
|
||||||
)
|
)
|
||||||
|
|
||||||
= Education
|
|
||||||
|
|
||||||
#resume-entry(
|
|
||||||
title: "Example University",
|
|
||||||
location: "B.S. in Computer Science",
|
|
||||||
date: "August 2014 - May 2019",
|
|
||||||
description: "Example"
|
|
||||||
)
|
|
||||||
|
|
||||||
#resume-item[
|
|
||||||
- #lorem(20)
|
|
||||||
- #lorem(15)
|
|
||||||
- #lorem(25)
|
|
||||||
]
|
|
||||||
|
|
||||||
= Experience
|
= Experience
|
||||||
|
|
||||||
#resume-entry(
|
#resume-entry(
|
||||||
title: "Example, Inc.",
|
title: "Senior Software Engineer",
|
||||||
location: "Example City, EX",
|
location: "Example City, EX",
|
||||||
date: "2019 - Present",
|
date: "2019 - Present",
|
||||||
description: "Senior Software Engineer"
|
description: "Example, Inc."
|
||||||
)
|
)
|
||||||
|
|
||||||
#resume-item[
|
#resume-item[
|
||||||
@@ -48,10 +35,10 @@
|
|||||||
]
|
]
|
||||||
|
|
||||||
#resume-entry(
|
#resume-entry(
|
||||||
title: "Previous Company, Inc.",
|
title: "Software Engineer",
|
||||||
location: "Example City, EX",
|
location: "Example City, EX",
|
||||||
date: "2011 - 2019",
|
date: "2011 - 2019",
|
||||||
description: "Software Engineer"
|
description: "Previous Company, Inc."
|
||||||
)
|
)
|
||||||
|
|
||||||
#resume-item[
|
#resume-item[
|
||||||
@@ -88,6 +75,21 @@
|
|||||||
|
|
||||||
= Skills
|
= Skills
|
||||||
|
|
||||||
#resume-skill-item("Programming Languages", (strong("C++"), "Python", "Java", "C#", "JavaScript", "TypeScript"))
|
#resume-skill-item("Languages", (strong("C++"), strong("Python"), "Java", "C#", "JavaScript", "TypeScript"))
|
||||||
#resume-skill-item("Spoken Languages", (strong("English"), "Spanish"))
|
#resume-skill-item("Spoken Languages", (strong("English"), "Spanish"))
|
||||||
#resume-skill-item("Programs", (strong("Excel"),"Word"))
|
#resume-skill-item("Programs", (strong("Excel"),"Word", "Powerpoint", "Visual Studio"))
|
||||||
|
|
||||||
|
= Education
|
||||||
|
|
||||||
|
#resume-entry(
|
||||||
|
title: "Example University",
|
||||||
|
location: "Example City, EX",
|
||||||
|
date: "August 2014 - May 2019",
|
||||||
|
description: "B.S. in Computer Science"
|
||||||
|
)
|
||||||
|
|
||||||
|
#resume-item[
|
||||||
|
- #lorem(20)
|
||||||
|
- #lorem(15)
|
||||||
|
- #lorem(25)
|
||||||
|
]
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "modern-cv"
|
name = "modern-cv"
|
||||||
version = "0.1.0"
|
version = "0.2.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>"]
|
||||||
@@ -16,4 +16,4 @@ repository = "https://github.com/DeveloperPaul123/modern-cv"
|
|||||||
[template]
|
[template]
|
||||||
path = "template"
|
path = "template"
|
||||||
entrypoint = "resume.typ"
|
entrypoint = "resume.typ"
|
||||||
thumbnail = "resume.png"
|
thumbnail = "assets/images/resume.png"
|
||||||
|
|||||||
Reference in New Issue
Block a user