From b6bff9bed293713755ade301f08443638815d8fb Mon Sep 17 00:00:00 2001 From: David Yue Date: Fri, 13 Nov 2026 13:34:23 -0700 Subject: Add files --- README.md | 1 + resume-base.typ | 85 +++++++++++++++++++++++++++++++++++++++++ resume-template.typ | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 193 insertions(+) create mode 100644 README.md create mode 100644 resume-base.typ create mode 100644 resume-template.typ diff --git a/README.md b/README.md new file mode 100644 index 0000000..c41035b --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Resume Template diff --git a/resume-base.typ b/resume-base.typ new file mode 100644 index 0000000..c8ae7ba --- /dev/null +++ b/resume-base.typ @@ -0,0 +1,85 @@ +#let onepage = sys.inputs.at("onepage", default: "no") == "yes" +#let show-address = sys.inputs.at("address", default: "no") == "yes" + +#let resume( + name: none, + legal-name: none, + email: none, + phone: none, + website: none, + address: none, + description: none, + keywords: (), + text-base-size: 12pt, + heading-color: black, + text-color: black +) = { + let section(title) = [ + #v(-4pt) + #text(fill: heading-color, size: text-base-size * 1.4, weight: "regular")[#smallcaps[#title]] + #v(-text-base-size * 1.3) + #line(length: 100%, stroke: 0.5pt + heading-color) + ] + + let entry(title, subtitle: none, date: "", bullets: ()) = [ + #box[ + #grid( + columns: (auto, 1fr), + [*#title*#if subtitle != none [\ #v(-6pt) #subtitle]], [#align(right)[#date]], + ) + #v(1pt) + #if bullets.len() > 0 [ + #v(-7pt) + #list( + marker: "--", + ..bullets.map(item => [#par(justify: true)[#item]]), + ) + ] + ] + ] + + let resume-title = name + "-- Resume" + + let apply = body => [ + #set document( + title: resume-title, + author: name, + description: description, + keywords: keywords, + ) + + #set page( + margin: 0.25in, + paper: "us-letter", + height: if onepage { auto } else { 11in }, + fill: white, + ) + #set text(font: "New Computer Modern", size: text-base-size, fill: text-color) + // #set par(leading: 0.4em) + + #show heading.where(level: 1): it => [ + #section(it.body) + ] + #columns(2)[ + #text(size: text-base-size * 2.7, fill: heading-color)[#smallcaps[#name]]\ + #if show-address [ + #smallcaps[#address]\ + #if legal-name != none [#smallcaps[Legal name: #legal-name]] + ] else [#v(-20pt)] + #colbreak() + #align(right)[ + #text(size: text-base-size * 1.4, fill: heading-color)[ + #link(website)[#website] | #link("mailto:" + email)[#email]\ + #link("tel:" + phone)[#phone] + ] + ] + ] + #body + ] + + return ( + apply: apply, + entry: entry + ) +} + diff --git a/resume-template.typ b/resume-template.typ new file mode 100644 index 0000000..f6a0179 --- /dev/null +++ b/resume-template.typ @@ -0,0 +1,107 @@ +/* + ____ _____ _ _ + | _ \ ___ ___ _ _ _ __ ___ ___ |_ _|__ _ __ ___ _ __ | | __ _| |_ ___ + | |_) / _ \/ __| | | | '_ ` _ \ / _ \ | |/ _ \ '_ ` _ \| '_ \| |/ _` | __/ _ \ + | _ < __/\__ \ |_| | | | | | | __/ | | __/ | | | | | |_) | | (_| | || __/ + |_| \_\___||___/\__,_|_| |_| |_|\___| |_|\___|_| |_| |_| .__/|_|\__,_|\__\___| + |_| + + Author: David Yue | https://davidyue.me + + Quick start: + typst compile resume-template.typ resume.pdf + + Optional build flags: + typst compile --input onepage=yes --input address=yes resume-template.typ resume.pdf + + The template comes with a few built-in build flags: + onepage: Controls whether your resume will be displayed as one single PDF page. + This will not shrink your font size, it will simply extend the page + height until everything fits. Good for digital versions. + + address: Controls whether your home address will be shown, defaults to no. + Sometimes you may need this. + +*/ +#import "resume-base.typ": * +#let r = resume( + name: "Your Name", + address: "Home Address", // This will only be shown if you pass in the address build argument + website: "Website URL", + email: "Email Address", + phone: "Phone Number", + + /* + PDF Metadata: Enter a summary of your resume in the description field and + a list of keywords. They will not be shown on your resume, but will be + attached as metadata. + */ + description: "Short description of you", + keywords: ("Keyword 1", "Keyword 2"), + + /* + Style and Page Configuration: This should be configured last. Fill out the + rest of this template first, then adjust `text-base-size` if your resume + leaves an awkward amount of dead space on the last page. + */ + text-base-size: 12pt, + heading-color: black, + text-color: black +) + +#show: r.apply +#let entry = r.entry + += Education +#entry( + [School Name], + date: [Month Year -- Present], + bullets: ( + [Bullet 1], + [Bullet 2], + ), +) +// Add more entries as needed +// #entry( +// [Job Title], +// subtitle: [Company -- Location], +// date: [Month Year -- Present], +// bullets: ( +// [Bullet 1], +// [Bullet 2], +// ), +// ) + += Skills +List of skills + += Experience + +#entry( + [Job Title], + subtitle: [Company -- Location], + date: [Month Year -- Present], + bullets: ( + [Bullet 1], + [Bullet 2], + ), +) +// Add more entries as needed +// #entry( +// [Job Title], +// subtitle: [Company -- Location], +// date: [Month Year -- Present], +// bullets: ( +// [Bullet 1], +// [Bullet 2], +// ), +// ) + += Publications +#list( + marker: "--", + spacing: 8pt, + [ + Authors (Year). Title. _Conference/Journal_ + ], +) -- cgit v1.2.3