|
|
|
#import "@preview/fontawesome:0.1.0": *
|
|
|
|
|
|
|
|
#let process_colors(colors: (:)) = {
|
|
|
|
if colors.at("base", default: none) == none {
|
|
|
|
colors.insert("base", rgb("#b00b69"))
|
|
|
|
}
|
|
|
|
if colors.at("light", default: none) == none {
|
|
|
|
colors.insert("light", colors.base.lighten(35%))
|
|
|
|
}
|
|
|
|
if colors.at("lighter", default: none) == none {
|
|
|
|
colors.insert("lighter", colors.base.lighten(70%))
|
|
|
|
}
|
|
|
|
if colors.at("dark", default: none) == none {
|
|
|
|
colors.insert("dark", colors.base.darken(35%))
|
|
|
|
}
|
|
|
|
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 default_style = (
|
|
|
|
left_col_size: 33%,
|
|
|
|
col_gap: 8mm,
|
|
|
|
line_height: 0.5mm,
|
|
|
|
page: (
|
|
|
|
paper: "a4",
|
|
|
|
margin: 1cm,
|
|
|
|
),
|
|
|
|
size: (
|
|
|
|
h1: 36pt,
|
|
|
|
h2: 14pt,
|
|
|
|
base: 10pt,
|
|
|
|
small: 9pt,
|
|
|
|
),
|
|
|
|
colors: _default_colors(),
|
|
|
|
)
|
|
|
|
|
|
|
|
#let lenk(to, where) = [
|
|
|
|
#link(to)[#fa-link() #where]
|
|
|
|
]
|
|
|
|
|
|
|
|
#let base_layout(
|
|
|
|
style,
|
|
|
|
header,
|
|
|
|
left,
|
|
|
|
right,
|
|
|
|
) = {
|
|
|
|
[#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 = [ // 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]))
|
|
|
|
}
|