refactor: create own template based on basic-resume
This commit is contained in:
		
							parent
							
								
									7934af3ad8
								
							
						
					
					
						commit
						8f783151ef
					
				
					 2 changed files with 218 additions and 1 deletions
				
			
		
							
								
								
									
										217
									
								
								src/lib/main.typ
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								src/lib/main.typ
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,217 @@
 | 
				
			||||||
 | 
					#import "@preview/scienceicons:0.0.6": orcid-icon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// based on https://github.com/stuxf/basic-typst-resume-template
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#let resume(
 | 
				
			||||||
 | 
					  author: "",
 | 
				
			||||||
 | 
					  author-position: left,
 | 
				
			||||||
 | 
					  personal-info-position: left,
 | 
				
			||||||
 | 
					  pronouns: "",
 | 
				
			||||||
 | 
					  location: "",
 | 
				
			||||||
 | 
					  email: "",
 | 
				
			||||||
 | 
					  github: "",
 | 
				
			||||||
 | 
					  linkedin: "",
 | 
				
			||||||
 | 
					  phone: "",
 | 
				
			||||||
 | 
					  personal-site: "",
 | 
				
			||||||
 | 
					  orcid: "",
 | 
				
			||||||
 | 
					  accent-color: "#000000",
 | 
				
			||||||
 | 
					  font: "New Computer Modern",
 | 
				
			||||||
 | 
					  paper: "a4",
 | 
				
			||||||
 | 
					  body,
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  // Sets document metadata
 | 
				
			||||||
 | 
					  set document(author: author, title: author)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Document-wide formatting, including font and margins
 | 
				
			||||||
 | 
					  set text(
 | 
				
			||||||
 | 
					    // LaTeX style font
 | 
				
			||||||
 | 
					    font: font,
 | 
				
			||||||
 | 
					    size: 10pt,
 | 
				
			||||||
 | 
					    lang: "en",
 | 
				
			||||||
 | 
					    // Disable ligatures so ATS systems do not get confused when parsing fonts.
 | 
				
			||||||
 | 
					    ligatures: false,
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  set page(
 | 
				
			||||||
 | 
					    margin: 1.5cm,
 | 
				
			||||||
 | 
					    paper: paper,
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Link styles
 | 
				
			||||||
 | 
					  show link: underline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Small caps for section titles
 | 
				
			||||||
 | 
					  show heading.where(level: 2): it => [
 | 
				
			||||||
 | 
					    #pad(top: 0pt, bottom: -10pt, [#smallcaps(it.body)])
 | 
				
			||||||
 | 
					    #line(length: 100%, stroke: 1pt)
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Accent Color Styling
 | 
				
			||||||
 | 
					  show heading: set text(fill: rgb(accent-color))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  show link: set text(fill: rgb(accent-color))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Name will be aligned left, bold and big
 | 
				
			||||||
 | 
					  show heading.where(level: 1): it => [
 | 
				
			||||||
 | 
					    #set align(author-position)
 | 
				
			||||||
 | 
					    #set text(
 | 
				
			||||||
 | 
					      weight: 700,
 | 
				
			||||||
 | 
					      size: 20pt,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    #pad(it.body)
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Level 1 Heading
 | 
				
			||||||
 | 
					  [= #(author)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Personal Info Helper
 | 
				
			||||||
 | 
					  let contact-item(value, prefix: "", link-type: "") = {
 | 
				
			||||||
 | 
					    if value != "" {
 | 
				
			||||||
 | 
					      if link-type != "" {
 | 
				
			||||||
 | 
					        link(link-type + value)[#(prefix + value)]
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        value
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Personal Info
 | 
				
			||||||
 | 
					  pad(
 | 
				
			||||||
 | 
					    top: 0.25em,
 | 
				
			||||||
 | 
					    align(personal-info-position)[
 | 
				
			||||||
 | 
					      #{
 | 
				
			||||||
 | 
					        let items = (
 | 
				
			||||||
 | 
					          contact-item(pronouns),
 | 
				
			||||||
 | 
					          contact-item(phone),
 | 
				
			||||||
 | 
					          contact-item(location),
 | 
				
			||||||
 | 
					          contact-item(email, link-type: "mailto:"),
 | 
				
			||||||
 | 
					          contact-item(github, link-type: "https://"),
 | 
				
			||||||
 | 
					          contact-item(linkedin, link-type: "https://"),
 | 
				
			||||||
 | 
					          contact-item(personal-site, link-type: "https://"),
 | 
				
			||||||
 | 
					          contact-item(
 | 
				
			||||||
 | 
					            orcid,
 | 
				
			||||||
 | 
					            prefix: [#orcid-icon(color: rgb("#AECD54"))orcid.org/],
 | 
				
			||||||
 | 
					            link-type: "https://orcid.org/",
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        items.filter(x => x != none).join("  |  ")
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Main body.
 | 
				
			||||||
 | 
					  set par(justify: true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  body
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Generic two by two component for resume
 | 
				
			||||||
 | 
					#let generic-two-by-two(
 | 
				
			||||||
 | 
					  top-left: "",
 | 
				
			||||||
 | 
					  top-right: "",
 | 
				
			||||||
 | 
					  bottom-left: "",
 | 
				
			||||||
 | 
					  bottom-right: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  [
 | 
				
			||||||
 | 
					    #top-left #h(1fr) #top-right \
 | 
				
			||||||
 | 
					    #bottom-left #h(1fr) #bottom-right
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Generic one by two component for resume
 | 
				
			||||||
 | 
					#let generic-one-by-two(
 | 
				
			||||||
 | 
					  left: "",
 | 
				
			||||||
 | 
					  right: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  [
 | 
				
			||||||
 | 
					    #left #h(1fr) #right
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Cannot just use normal --- ligature becuase ligatures are disabled for good reasons
 | 
				
			||||||
 | 
					#let dates-helper(
 | 
				
			||||||
 | 
					  start-date: "",
 | 
				
			||||||
 | 
					  end-date: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  start-date + " " + $dash.em$ + " " + end-date
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Section components below
 | 
				
			||||||
 | 
					#let edu(
 | 
				
			||||||
 | 
					  institution: "",
 | 
				
			||||||
 | 
					  dates: "",
 | 
				
			||||||
 | 
					  degree: "",
 | 
				
			||||||
 | 
					  gpa: "",
 | 
				
			||||||
 | 
					  location: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  generic-two-by-two(
 | 
				
			||||||
 | 
					    top-left: strong(institution),
 | 
				
			||||||
 | 
					    top-right: location,
 | 
				
			||||||
 | 
					    bottom-left: emph(degree),
 | 
				
			||||||
 | 
					    bottom-right: emph(dates),
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#let work(
 | 
				
			||||||
 | 
					  title: "",
 | 
				
			||||||
 | 
					  dates: "",
 | 
				
			||||||
 | 
					  company: "",
 | 
				
			||||||
 | 
					  location: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  generic-two-by-two(
 | 
				
			||||||
 | 
					    top-left: strong(title),
 | 
				
			||||||
 | 
					    top-right: dates,
 | 
				
			||||||
 | 
					    bottom-left: company,
 | 
				
			||||||
 | 
					    bottom-right: emph(location),
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#let project(
 | 
				
			||||||
 | 
					  role: "",
 | 
				
			||||||
 | 
					  name: "",
 | 
				
			||||||
 | 
					  url: "",
 | 
				
			||||||
 | 
					  dates: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  generic-one-by-two(
 | 
				
			||||||
 | 
					    left: {
 | 
				
			||||||
 | 
					      if role == "" {
 | 
				
			||||||
 | 
					        [*#name* #if url != "" and dates != "" [ (#link("https://" + url)[#url])]]
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        [*#role*, #name #if url != "" and dates != ""  [ (#link("https://" + url)[#url])]]
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    right: {
 | 
				
			||||||
 | 
					      if dates == "" and url != "" {
 | 
				
			||||||
 | 
					        link("https://" + url)[#url]
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        dates
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#let certificates(
 | 
				
			||||||
 | 
					  name: "",
 | 
				
			||||||
 | 
					  issuer: "",
 | 
				
			||||||
 | 
					  url: "",
 | 
				
			||||||
 | 
					  date: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  [
 | 
				
			||||||
 | 
					    *#name*, #issuer
 | 
				
			||||||
 | 
					    #if url != "" {
 | 
				
			||||||
 | 
					      [ (#link("https://" + url)[#url])]
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    #h(1fr) #date
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#let extracurriculars(
 | 
				
			||||||
 | 
					  activity: "",
 | 
				
			||||||
 | 
					  dates: "",
 | 
				
			||||||
 | 
					) = {
 | 
				
			||||||
 | 
					  generic-one-by-two(
 | 
				
			||||||
 | 
					    left: strong(activity),
 | 
				
			||||||
 | 
					    right: dates,
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
#import "@preview/basic-resume:0.2.3": *
 | 
					#import "lib/main.typ": *
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#let name = "Felix Schröter"
 | 
					#let name = "Felix Schröter"
 | 
				
			||||||
#let location = "Lüneburg, Germany"
 | 
					#let location = "Lüneburg, Germany"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue