summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Yue <davidyue5819@gmail.com>2026-11-13 13:34:23 -0700
committerDavid Yue <davidyue5819@gmail.com>2026-11-13 13:34:23 -0700
commitb6bff9bed293713755ade301f08443638815d8fb (patch)
treeeadb4b8297e567f9b0ceaff70ca2321c32d1df9c
downloadresume_template-master.tar.gz
Add filesHEADmaster
-rw-r--r--README.md1
-rw-r--r--resume-base.typ85
-rw-r--r--resume-template.typ107
3 files changed, 193 insertions, 0 deletions
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 <david.yue@utah.edu> | 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_
+ ],
+)