diff options
| author | Kleidi Bujari <mail@4kb.net> | 2025-01-24 12:30:55 -0500 |
|---|---|---|
| committer | Kleidi Bujari <mail@4kb.net> | 2025-01-24 12:30:55 -0500 |
| commit | c2196e5b168ccf86aa4da0f27298589a65e416cb (patch) | |
| tree | 11ee1df7e8d8c2e00208cfe2c718c37651c28118 /mod | |
| parent | 32f4cb5cbba313b7af2fce46139c04d9469cb72a (diff) | |
| download | depot-c2196e5b168ccf86aa4da0f27298589a65e416cb.tar.gz depot-c2196e5b168ccf86aa4da0f27298589a65e416cb.tar.bz2 depot-c2196e5b168ccf86aa4da0f27298589a65e416cb.zip | |
simplify cv build
Diffstat (limited to 'mod')
| -rw-r--r-- | mod/misc/cv/cv.typ | 127 | ||||
| -rw-r--r-- | mod/misc/cv/default.nix | 17 | ||||
| -rw-r--r-- | mod/misc/cv/template.typ | 211 |
3 files changed, 130 insertions, 225 deletions
diff --git a/mod/misc/cv/cv.typ b/mod/misc/cv/cv.typ index e243796..1120e39 100644 --- a/mod/misc/cv/cv.typ +++ b/mod/misc/cv/cv.typ @@ -1,11 +1,134 @@ -#import "template.typ": * +#let resume( + author: "", + email: "", + github: "", + personal-site: "", + accent-color: "#000000", + font: "New Computer Modern", + body, +) = { + set document(author: author, title: author) + set text( + // LaTeX style font + font: font, + size: 10pt, + lang: "en", + ligatures: false + ) + + set page( + margin: (0.5in), + paper: "us-letter", + ) + + show link: underline + show link: set text( + fill: rgb(accent-color), + ) + + 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 heading.where(level: 1): it => [ + #set align(left) + #set text( + weight: 700, + size: 20pt, + ) + #pad(it.body) + ] + + [= #(author)] + + 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(left)[ + #{ + let items = ( + contact-item(email, link-type: "mailto:"), + contact-item(github, link-type: "https://"), + contact-item(personal-site, link-type: "https://"), + ) + items.filter(x => x != none).join(" | ") + } + ], + ) + + set par(justify: true) + + body +} + +#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 + ] +} + +#let dates-helper( + start-date: "", + end-date: "", +) = { + start-date + " " + $dash.em$ + " " + end-date +} + +#let edu( + institution: "", + dates: "", + degree: "", + 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), + ) +} #show: resume.with( author: "Kleidi Bujari", email: "mail@4kb.net", github: "github.com/kbujari", personal-site: "4kb.net", - paper: "us-letter", ) == Education diff --git a/mod/misc/cv/default.nix b/mod/misc/cv/default.nix index 805d880..b663475 100644 --- a/mod/misc/cv/default.nix +++ b/mod/misc/cv/default.nix @@ -1,13 +1,6 @@ -{ pkgs, ... }: pkgs.stdenvNoCC.mkDerivation { - pname = "cv"; - version = "1.0"; +{ pkgs, ... }: - src = ./.; - - nativeBuildInputs = with pkgs; [ typst ]; - buildPhase = "typst compile cv.typ"; - installPhase = '' - mkdir -p $out/share - cp cv.pdf $out/share - ''; -} +pkgs.runCommand "cv" { } '' + mkdir -p $out/share + ${pkgs.typst}/bin/typst compile ${./cv.typ} $out/share/cv.pdf +'' diff --git a/mod/misc/cv/template.typ b/mod/misc/cv/template.typ deleted file mode 100644 index 4b07fba..0000000 --- a/mod/misc/cv/template.typ +++ /dev/null @@ -1,211 +0,0 @@ -#let resume( - author: "", - pronouns: "", - location: "", - email: "", - github: "", - linkedin: "", - phone: "", - personal-site: "", - accent-color: "#000000", - font: "New Computer Modern", - paper: "us-letter", - 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 - ) - - // Reccomended to have 0.5in margin on all sides - set page( - margin: (0.5in), - 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(left) - #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(left)[ - #{ - 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://"), - ) - 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, - ) -} |
