xenua
1 year ago
9 changed files with 360 additions and 144 deletions
@ -1,35 +1,99 @@
@@ -1,35 +1,99 @@
|
||||
#import "@preview/fontawesome:0.1.0" |
||||
#import "@preview/fontawesome:0.1.0": * |
||||
|
||||
#let process_colors(colors) = { |
||||
if colors.at("base", none) == none { |
||||
colors.insert("base", rgb(#b00b69)) |
||||
#let process_colors(colors: (:)) = { |
||||
if colors.at("base", default: none) == none { |
||||
colors.insert("base", rgb("#b00b69")) |
||||
} |
||||
if colors.at("light", none) == none { |
||||
if colors.at("light", default: none) == none { |
||||
colors.insert("light", colors.base.lighten(35%)) |
||||
} |
||||
if colors.at("lighter", none) == none { |
||||
if colors.at("lighter", default: none) == none { |
||||
colors.insert("lighter", colors.base.lighten(70%)) |
||||
} |
||||
if colors.at("dark", none) == none { |
||||
if colors.at("dark", default: none) == none { |
||||
colors.insert("dark", colors.base.darken(35%)) |
||||
} |
||||
if colors.at("darker", none) == none { |
||||
if colors.at("darker", default: none) == none { |
||||
colors.insert("darker", colors.base.darken(70%)) |
||||
} |
||||
|
||||
return colors |
||||
} |
||||
|
||||
#let _default_colors() = { |
||||
let c = process_colors() |
||||
let textc = rgb("#281f24") |
||||
c.insert("text", textc) |
||||
c.insert("heading", textc.darken(50%)) |
||||
c.insert("text_lighter", textc.lighten(25%)) |
||||
return c |
||||
} |
||||
|
||||
#let cv( |
||||
colors: {}, |
||||
self, |
||||
left_col, |
||||
right_col, |
||||
|
||||
#let default_style = ( |
||||
left_col_size: 33%, |
||||
col_gap: 8mm, |
||||
line_height: 0.5mm, |
||||
page: ( |
||||
paper: "a4", |
||||
margin: 1cm, |
||||
), |
||||
size: ( |
||||
h1: 36pt, |
||||
h2: 12pt, |
||||
base: 10pt, |
||||
small: 9pt, |
||||
), |
||||
colors: _default_colors(), |
||||
) |
||||
|
||||
#let lenk(to, where) = [ |
||||
#link(to)[#fa-link() #where] |
||||
] |
||||
|
||||
#let base_layout( |
||||
style, |
||||
header, |
||||
left, |
||||
right, |
||||
) = { |
||||
process_colors(colors) |
||||
set page("a4", margin: 1cm) |
||||
set text( |
||||
font: "Inter", |
||||
size: 10pt |
||||
[#header] |
||||
grid( |
||||
columns: (style.left_col_size, 1fr), |
||||
gutter: style.col_gap, |
||||
[#left], [#right] |
||||
) |
||||
|
||||
} |
||||
|
||||
#let work_item( |
||||
style: default_style, |
||||
ref: none, |
||||
time: none, |
||||
location: none, |
||||
title: none, |
||||
) = { |
||||
stack( |
||||
dir: ltr, |
||||
spacing: 2mm, |
||||
[=== #title], |
||||
text(fill: style.colors.text_lighter, size: style.size.small)[#time, #location] |
||||
) |
||||
if ref != none { |
||||
v(-2mm) |
||||
ref |
||||
} |
||||
} |
||||
|
||||
#let machine_reading_keyword_dump = [ // the future we live in... this actually does help and i hate that |
||||
// based in part on the stackoverflow dev survey |
||||
Rust, Python, Nix, JS, CSS, HTML, Web, Desktop, Embedded, Scalable, Server, Service, SAAS, Network, Administration, |
||||
Java, Backend, High performance Async, Serverless, React, NextJS, Scala, Erlang, Haskell, COBOL, Kubernetes, K8s, k3s, |
||||
Docker, Podman, Ansible, Terraform, Container, .NET, C\#, PHP, MySQL, Nginx, Apache, Database, SQLite, SQL, NoSQL, |
||||
MongoDB, npm, yarn, Unity, Unreal, Elixir, Clojure, TypeScript, Go, Kotlin, Swift, Dart, Bash, Ruby, C++, Lua, |
||||
Fortran, Assembly, Redis, Elasticsearch, Firebase, AWS, OVH, GCP, OpenStack, OpenShift, Phoenix, Svelte, Deno, |
||||
ASP.NET, FastAPI, Node.js, Django, Laravel, Flask, jQuery, Flutter, Keras, NumPy, Spring, React Native, Electron, |
||||
Git, CI/CD, DevOps, Observability, Grafana, Prometheus, OpenTelemetry, OTel, Microservice, debugging, gdb |
||||
] |
||||
|
||||
#let put_keyword_dump_in_there() = { |
||||
place(top + left, hide([#machine_reading_keyword_dump])) |
||||
} |
Binary file not shown.
@ -0,0 +1,22 @@
@@ -0,0 +1,22 @@
|
||||
#import "xenua_cv.typ": xenua_cv, xenua_style |
||||
#import "cv.typ": work_item, lenk |
||||
#import "self.typ" |
||||
|
||||
#xenua_cv( |
||||
self, |
||||
[ |
||||
== left content |
||||
foo bar meow |
||||
], |
||||
[ |
||||
== right content |
||||
hellfire r9x missile doesn't know where it is, someone sabotaged it |
||||
|
||||
#work_item(style: xenua_style, |
||||
title: "Software Engineer", |
||||
time: "2020 - 2021", |
||||
location: "Remote", |
||||
ref: lenk("https://rami.io")[rami.io], |
||||
) |
||||
], |
||||
) |
Binary file not shown.
@ -1,5 +1,14 @@
@@ -1,5 +1,14 @@
|
||||
#import "@preview/fontawesome:0.1.0": * |
||||
|
||||
#let name = [Julia Luna] |
||||
|
||||
#let tagline = [Software engineer, embedded developer] |
||||
|
||||
#let email = link("mailto:me@julialuna.dev") |
||||
|
||||
#let meta = ( |
||||
(fa-at(), email), |
||||
(fa-id-card(), [they/them]), |
||||
(fa-map-marker-alt(), [Germany]), |
||||
([*\[#h(-1pt)m#h(-1pt)\]*], link("https://matrix.to/#/@julialuna:finallycoffee.eu")[\@julialuna:finallycoffee.eu]) |
||||
) |
||||
|
Binary file not shown.
@ -0,0 +1,79 @@
@@ -0,0 +1,79 @@
|
||||
#import "@preview/fontawesome:0.1.0": * |
||||
|
||||
#import "cv.typ": base_layout, put_keyword_dump_in_there, default_style, lenk |
||||
|
||||
#let xenua_style = default_style |
||||
#xenua_style.insert("confidential", true) |
||||
|
||||
#let xenua_cv( |
||||
style: xenua_style, |
||||
self, |
||||
lcol, rcol, |
||||
) = { |
||||
set page( |
||||
style.page.paper, |
||||
margin: style.page.margin, |
||||
background: if style.confidential { |
||||
rotate(60deg, text(112pt, fill: rgb("FFDCD5"))[ |
||||
*CONFIDENTIAL* |
||||
])} else {none} |
||||
) |
||||
set text( |
||||
font: "Inter", |
||||
size: style.size.base, |
||||
fill: style.colors.text |
||||
) |
||||
show heading: it => { |
||||
set text(fill: style.colors.heading) |
||||
it |
||||
} |
||||
show heading.where(level: 1): it => { |
||||
set text(size: style.size.h1) |
||||
it |
||||
} |
||||
show heading.where(level: 2): it => { |
||||
set text(size: style.size.h2) |
||||
upper(it) |
||||
v(-4mm) |
||||
line(length: 100%, stroke: style.line_height + style.colors.light) |
||||
} |
||||
|
||||
put_keyword_dump_in_there() |
||||
|
||||
let header = { |
||||
grid( |
||||
columns: (1fr, auto), |
||||
[ |
||||
= #self.name |
||||
#v(-2mm) |
||||
#text(fill: style.colors.base)[*#self.tagline*] |
||||
], |
||||
[ |
||||
#table( |
||||
columns: 2, |
||||
stroke: none, |
||||
inset: 0pt, |
||||
align: (center, left), |
||||
row-gutter: 5pt, |
||||
column-gutter: 4pt, |
||||
..self.meta.map( |
||||
((icon, content)) => ( |
||||
[#text(fill: style.colors.base)[#icon]], |
||||
[*#content*] |
||||
) |
||||
).flatten() |
||||
) |
||||
] |
||||
) |
||||
line(length: 100%, stroke: style.line_height + style.colors.light) |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
base_layout( |
||||
style, |
||||
header, |
||||
lcol, rcol |
||||
) |
||||
} |
Loading…
Reference in new issue