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 location = "Lüneburg, Germany"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue