diff options
| author | Xe Iaso <me@xeiaso.net> | 2023-04-21 10:34:35 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2023-04-21 12:31:27 -0400 |
| commit | 43ef5f0ebcbd0b85880217f32496c0e43db238fb (patch) | |
| tree | ae9f5bf5e631b8a7771a63b0ef008c0fe458e223 | |
| parent | 6f6b30bc3b427db093d9f860bea0a07db480fc66 (diff) | |
| download | xesite-43ef5f0ebcbd0b85880217f32496c0e43db238fb.tar.xz xesite-43ef5f0ebcbd0b85880217f32496c0e43db238fb.zip | |
new resume with typst
Signed-off-by: Xe Iaso <me@xeiaso.net>
| -rw-r--r-- | dhall/resume.dhall | 45 | ||||
| -rw-r--r-- | dhall/resume/.gitignore | 2 | ||||
| -rw-r--r-- | dhall/resume/LICENSE | 21 | ||||
| -rw-r--r-- | dhall/resume/README.md | 27 | ||||
| -rw-r--r-- | dhall/resume/icons/calendar.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/email.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/github.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/link.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/linkedin.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/location.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/mastodon.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/patreon.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/twitch.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/icons/website.svg | 1 | ||||
| l--------- | dhall/resume/icons/xeiaso.svg | 1 | ||||
| -rw-r--r-- | dhall/resume/resume.typ | 201 | ||||
| -rw-r--r-- | flake.lock | 23 | ||||
| -rw-r--r-- | flake.nix | 47 |
18 files changed, 333 insertions, 44 deletions
diff --git a/dhall/resume.dhall b/dhall/resume.dhall index 6290404..5d46f11 100644 --- a/dhall/resume.dhall +++ b/dhall/resume.dhall @@ -38,7 +38,7 @@ in Resume::{ , url = "https://blog.heroku.com/how-to-make-progressive-web-app" , title = "How to Make a Progressive Web App From Your Existing Website" , description = - "An article summarizing how easy it is to make a webpage into an installable Progressive Web App." + "An article summarizing how easy it is to make a webpage into an installable Progressive Web App using APIs available in the most commonly used browsers." } , Link::{ , url = @@ -48,52 +48,29 @@ in Resume::{ "The release post for Palisade, a tool to automate version bumping, release tagging and more." } , Link::{ - , url = "https://tailscale.com/blog/grafana-auth/" - , title = "How To Seamlessly Authenticate to Grafana using Tailscale" - , description = - "The release post for grafana-auth, a tool that lets Grafana users automagically authenticate to Grafana using Tailscale." - } - , Link::{ - , url = "https://tailscale.com/blog/tailscale-auth-minecraft/" - , title = "Tailscale Authentication for Minecraft" - , description = - "A post explaining how Tailscale as an authentication mechanism can be used in absurd places, such as making authentication for Minecraft servers." - } - , Link::{ - , url = "https://tailscale.com/blog/tailscale-auth-nginx/" - , title = "Tailscale Authentication for NGINX" - , description = - "The release post for nginx-auth, a tool that uses Tailscale's knowledge of IP address to person mappings to provide a weak authentication factor." - } - , Link::{ , url = "https://tailscale.com/blog/steam-deck/" , title = "Putting Tailscale on the Steam Deck" , description = "An engineering log of all the steps taken to run Tailscale on the Valve Steam Deck and the tradeoffs between the various methods you could use to do this." } , Link::{ - , url = "https://tailscale.com/blog/gitops-acls/" - , title = "GitOps for Tailscale ACLs" - , description = - "The release post of the Sync Tailscale ACLs GitHub Action, allowing administrators to automatically sync Tailscale ACLs from a GitHub repository." - } - , Link::{ - , url = "https://tailscale.com/blog/hamachi/" - , title = "Tailscale: A modern replacement for Hamachi" - , description = - "A nostalgic piece recalling the magic of Hamachi (a product that did a similar thing to Tailscale), and how Tailscale builds on top of that to do even better things." - } - , Link::{ , url = "https://tailscale.com/blog/magicdns-why-name/" , title = "An epic treatise on DNS, magical and otherwise" , description = "A deep dive into all of the problems that DNS has at scale and how Tailscale makes most of those problems go away, with the rest of them being easier in comparison." } , Link::{ - , url = "https://tailscale.com/blog/tsnet-virtual-private-services/" - , title = "Virtual private services with tsnet" + , url = "https://tailscale.dev/blog/weaponizing-hyperfocus" + , title = + "Weaponizing hyperfocus: Becoming the first DevRel at Tailscale" + , description = + "A brief history of the developer relations team at Tailscale and how I found myself creating it. I cover one of my largest internal demons and how I managed to wield it as a force of empowerment rather than a limiting force of pain." + } + , Link::{ + , url = "https://tailscale.dev/blog/headscale-funnel" + , title = "Using Tailscale without Using Tailscale" , description = - "Tailscale lets you connect to your network from anywhere, but you have to set it up on individual computers for it to work. In this article Xe covers how to use tsnet to get all of the goodness of Tailscale in userspace so that you can have your services join your tailnet like they were separate computers." + "An award-winning April Fools Day post describing how you can use Tailscale via Headscale via Tailscale Funnel. This post is notable for demonstrating all five of the Tailscale company values at the same time." } ] } diff --git a/dhall/resume/.gitignore b/dhall/resume/.gitignore new file mode 100644 index 0000000..63ebae5 --- /dev/null +++ b/dhall/resume/.gitignore @@ -0,0 +1,2 @@ +*.json +*.pdf diff --git a/dhall/resume/LICENSE b/dhall/resume/LICENSE new file mode 100644 index 0000000..5c863ed --- /dev/null +++ b/dhall/resume/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 George Honeywood + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/dhall/resume/README.md b/dhall/resume/README.md new file mode 100644 index 0000000..59c3a75 --- /dev/null +++ b/dhall/resume/README.md @@ -0,0 +1,27 @@ +# Alta Typst + +A simple Typst CV template, inspired by [AltaCV by LianTze Lim](https://github.com/liantze/AltaCV). [LaurenzV's simplecv](https://github.com/LaurenzV/simplecv) was used as a Typst code reference. See [`example.pdf`](example.pdf) for the rendered PDF output. + +<img src="screenshot.png" width="500"></img> + +## Usage + +### On [typst.app](https://typst.app/) + +Upload the `.typ` and `.svg` files to your Typst project, then see `example.typ`. + +### With [Typst CLI](https://github.com/typst/typst) + +Fork and clone this repo, then run `typst --watch example.typ`. + +Note that the template is intended for use with the IBM Plex Sans font, which isn't currenly bundled with the Typst CLI — so the rendered output on your machine may differ slightly. You can run `typst --fonts` to see which fonts can be used instead. + +### Icons + +Add extra icons by uploading more `.svg` files — the existing ones are free icons from [Font Awsome](https://fontawesome.com/search?o=r&m=free). You can then reference these as name values in the links array. + +## Licence + +[MIT](./LICENSE) + +Icons are from Font Awesome, subject to [their terms](https://github.com/FortAwesome/Font-Awesome/blob/6.x/LICENSE.txt). diff --git a/dhall/resume/icons/calendar.svg b/dhall/resume/icons/calendar.svg new file mode 100644 index 0000000..9be52a8 --- /dev/null +++ b/dhall/resume/icons/calendar.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M152 64H296V24C296 10.75 306.7 0 320 0C333.3 0 344 10.75 344 24V64H384C419.3 64 448 92.65 448 128V448C448 483.3 419.3 512 384 512H64C28.65 512 0 483.3 0 448V128C0 92.65 28.65 64 64 64H104V24C104 10.75 114.7 0 128 0C141.3 0 152 10.75 152 24V64zM48 448C48 456.8 55.16 464 64 464H384C392.8 464 400 456.8 400 448V192H48V448z"/></svg>
\ No newline at end of file diff --git a/dhall/resume/icons/email.svg b/dhall/resume/icons/email.svg new file mode 100644 index 0000000..742f451 --- /dev/null +++ b/dhall/resume/icons/email.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M256 64C150 64 64 150 64 256s86 192 192 192c17.7 0 32 14.3 32 32s-14.3 32-32 32C114.6 512 0 397.4 0 256S114.6 0 256 0S512 114.6 512 256v32c0 53-43 96-96 96c-29.3 0-55.6-13.2-73.2-33.9C320 371.1 289.5 384 256 384c-70.7 0-128-57.3-128-128s57.3-128 128-128c27.9 0 53.7 8.9 74.7 24.1c5.7-5 13.1-8.1 21.3-8.1c17.7 0 32 14.3 32 32v80 32c0 17.7 14.3 32 32 32s32-14.3 32-32V256c0-106-86-192-192-192zm64 192c0-35.3-28.7-64-64-64s-64 28.7-64 64s28.7 64 64 64s64-28.7 64-64z"/></svg>
\ No newline at end of file diff --git a/dhall/resume/icons/github.svg b/dhall/resume/icons/github.svg new file mode 100644 index 0000000..ed2cfac --- /dev/null +++ b/dhall/resume/icons/github.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
\ No newline at end of file diff --git a/dhall/resume/icons/link.svg b/dhall/resume/icons/link.svg new file mode 100644 index 0000000..0a147ca --- /dev/null +++ b/dhall/resume/icons/link.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"/></svg> diff --git a/dhall/resume/icons/linkedin.svg b/dhall/resume/icons/linkedin.svg new file mode 100644 index 0000000..a445691 --- /dev/null +++ b/dhall/resume/icons/linkedin.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z"/></svg>
\ No newline at end of file diff --git a/dhall/resume/icons/location.svg b/dhall/resume/icons/location.svg new file mode 100644 index 0000000..c02689b --- /dev/null +++ b/dhall/resume/icons/location.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M215.7 499.2C267 435 384 279.4 384 192C384 86 298 0 192 0S0 86 0 192c0 87.4 117 243 168.3 307.2c12.3 15.3 35.1 15.3 47.4 0zM192 256c-35.3 0-64-28.7-64-64s28.7-64 64-64s64 28.7 64 64s-28.7 64-64 64z"/></svg>
\ No newline at end of file diff --git a/dhall/resume/icons/mastodon.svg b/dhall/resume/icons/mastodon.svg new file mode 100644 index 0000000..2dc91f0 --- /dev/null +++ b/dhall/resume/icons/mastodon.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> diff --git a/dhall/resume/icons/patreon.svg b/dhall/resume/icons/patreon.svg new file mode 100644 index 0000000..a44c2ef --- /dev/null +++ b/dhall/resume/icons/patreon.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M512 194.8c0 101.3-82.4 183.8-183.8 183.8-101.7 0-184.4-82.4-184.4-183.8 0-101.6 82.7-184.3 184.4-184.3C429.6 10.5 512 93.2 512 194.8zM0 501.5h90v-491H0v491z"/></svg> diff --git a/dhall/resume/icons/twitch.svg b/dhall/resume/icons/twitch.svg new file mode 100644 index 0000000..9ef7f4c --- /dev/null +++ b/dhall/resume/icons/twitch.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.4.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path d="M391.17,103.47H352.54v109.7h38.63ZM285,103H246.37V212.75H285ZM120.83,0,24.31,91.42V420.58H140.14V512l96.53-91.42h77.25L487.69,256V0ZM449.07,237.75l-77.22,73.12H294.61l-67.6,64v-64H140.14V36.58H449.07Z"/></svg> diff --git a/dhall/resume/icons/website.svg b/dhall/resume/icons/website.svg new file mode 100644 index 0000000..41d635c --- /dev/null +++ b/dhall/resume/icons/website.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --><path d="M579.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L422.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C206.5 251.2 213 330 263 380c56.5 56.5 148 56.5 204.5 0L579.8 267.7zM60.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C74 372 74 321 105.5 289.5L217.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C433.5 260.8 427 182 377 132c-56.5-56.5-148-56.5-204.5 0L60.2 244.3z"/></svg>
\ No newline at end of file diff --git a/dhall/resume/icons/xeiaso.svg b/dhall/resume/icons/xeiaso.svg new file mode 120000 index 0000000..8c5e982 --- /dev/null +++ b/dhall/resume/icons/xeiaso.svg @@ -0,0 +1 @@ +../../../static/img/xeiaso.svg
\ No newline at end of file diff --git a/dhall/resume/resume.typ b/dhall/resume/resume.typ new file mode 100644 index 0000000..dab184f --- /dev/null +++ b/dhall/resume/resume.typ @@ -0,0 +1,201 @@ +#let primary_colour = rgb("#3E0C87") // vivid purple + +#let coloredLine() = { + line(length: 100%, stroke: 1pt + primary_colour) +} + +#let sigil() = { + align(center + horizon)[#box( + height: 24pt, + image("icons/xeiaso.svg") + )] +} + +#let icon(name, shift: 1.5pt) = { + box( + baseline: shift, + height: 10pt, + image("icons/" + name + ".svg") + ) + h(3pt) +} + +#let findMe(services) = { + set text(8pt) + let icon = icon.with(shift: 2.5pt) + + services.map(service => { + icon(service.name) + + if "display" in service.keys() { + link(service.link)[#{service.display}] + } else { + link(service.link) + } + }).join(h(10pt)) + [ + + ] +} + +#let term(period, location) = { + text(9pt)[#icon("calendar") #period #h(1fr) #icon("location") #location] +} + +#let alta( + name: "", + links: (), + tagline: [], + doc, +) = { + set text(9.8pt, font: "Iosevka Aile Iaso", tracking: 0.0225pt) + set par(justify: true) + set page( + paper: "us-letter", + margin: (x: 54pt, y: 52pt), + ) + + show heading.where( + level: 2 + ): it => text( + fill: primary_colour, + font: "Iosevka Etoile Iaso", + [ + #{it.body} + #v(-7pt) + #line(length: 100%, stroke: 1pt + primary_colour) + ] + ) + + show heading.where( + level: 4 + ): it => text( + fill: primary_colour, + font: "Iosevka Etoile Iaso", + it.body + ) + + [= #name] + findMe(links) + + columns(2, doc) +} + +#let resume = json("resume.json") + +#let titleCompany(title, company) = [ + #text(10pt)[#title] #h(1fr) _#[#company]_ +] + +#let publication(details) = [ + #text(font: "Iosevka Etoile Iaso", size: 10.5pt, weight: 600)[#link(details.url)[#details.title]]\ + #details.description\ +] + +#let sigilAside(body) = { + let cell = rect.with( + width: 100%, + radius: 0pt, + stroke: none, + ) + grid( + columns: (auto, 4pt, 35pt), + gutter: -1pt, + cell(body), + cell(box( + width: 37pt, + image("icons/xeiaso.svg") + )), + ) +} + +#show: doc => alta( + name: resume.name, + links: ( + (name: "email", link: "mailto:me@xeiaso.net"), + (name: "website", link: "https://xeiaso.net/", display: "xeiaso.net"), + (name: "github", link: "https://github.com/Xe", display: "@Xe"), + (name: "linkedin", link: "https://www.linkedin.com/in/xe-iaso-87a883254/", display: resume.name), + (name: "mastodon", link: "https://pony.social/@cadey", display: "@cadey@pony.social"), + (name: "twitch", link: "https://twitch.tv/princessxen", display: "@princessxen"), + ), + tagline: resume.tagline, + doc, +) + +#sigilAside[Hello, I'm Xe Iaso. I am a skilled force multiplier, acclaimed speaker, artist, and prolific blogger. My writing is widely viewed across 15 time zones and is one of the most viewed software blogs in the world.] + +I specialize in helping people realize their latent abilities and help to unblock them when they get stuck. This creates unique value streams and lets me bring others up to my level to help create more senior engineers. I am looking for roles that allow me to build upon existing company cultures and transmute them into new and innovative ways of talking about a product I believe in. I am prioritizing remote work at companies that align with my values of transparency, honesty, equity, and equality. + +If you want someone that is dedicated to their craft, a fearless innovator and a genuine force multiplier, please look no further. I'm more than willing to hear you out. + +== Experience + +#titleCompany[Archmage of Infrastructure][Tailscale]\ +#term[2020-12 -- _current_][Ottawa, CA] + +At Tailscale I founded the developer relations team with the goal of inspiring people to use Tailscale in fun and interesting ways. I work with the DevRel team to write articles for #text(fill: blue)[#link("https://tailscale.dev")[tailscale.dev]] to help teach people fundamentals of computer science and networking in the process of learning about new product features and things you can do with them. + +Tailscale has easily been the best job I've ever had and I've had an enormous impact on how Tailscale is percieved by developers worldwide. For a while my actions were directly attributable to MAU growth. One of the hardest project I've worked on was how to make DevRel efforts more than single flashes in the pan and create a reason for people to visit the website. + +While I worked at Tailscale, I attempted to spearhead the use of Nix and NixOS to declaratively manage our servers. This would have given us full knowledge of what packages and services were running on which servers, allowing us to know at a glance what server was doing what. Unfortunately, this project ultimately failed in ways that taught me a lot about the importance of clean, accessible documentation that is written for people that don't already understand the topic at hand. Even when a technically superior solution may exist, it is better to meet people where they are at and move forward together as a team. + +I regularly write articles and lead internal talks about how to use Tailscale and other technology topics in new and interesting ways. + +#coloredLine() + +#titleCompany[Expert principal en fiabilité du site][Lightspeed]\ +#term[2019-05 -- 2020-11][Montréal, CA] + +My team and I created and maintained the internal Kubernetes deployment (with the goal of being functionally an in-house Platform-as-a-service) and all of the assorted tooling around it, helping internal developers deploy new features to customers faster. I also helped to create custom icons and color schemes for internal tools, with the goal of having consistent brand design for knowing which tool is which at a glance. + +//This Kubernetes project ended up being too complicated for developers in practice. Even with a lot of tooling and deployment-on-rails templates to help bridge gaps between the inherent complexity of Kubernetes, Vault, Docker, and the intents of what they wanted to do, things ended up being very complicated once developers wanted to go beyond the die-cast templates we gave them. + +The misadventures through Kubernetes' hidden complexity (especially when faced with developers that rightfully don't care about the details as long as things work) has taught me that "simple" is relative. There must be complexity somewhere and making things "simple" at one end merely moves the complexity around to another end. Templates to get you out the door are great things, but you can't stop at "hello world" and then throw people to the sharks. + +I also learned a lot about how to teach via teaching my teammates how to write Go the way I learned how to write Go. I have learned that it is impossible to teach people without learning how to teach them, and it is impossible to learn things without teaching your teacher new insights. + +While working on internal tooling, we did user research on how to approach designing command-line tools from a linguistic approach. We found that commands should be verbs, arguments should be nouns, and flags should be adverb clauses. This seems to help the most people understand tools in the most detail. + +#coloredLine() + +#titleCompany[Senior Software Engineer][Heroku]\ +#term[2017-02 -- 2019-03][Bellevue, USA] + +I maintained the subsystem for processing terabytes of customer metrics per week in real time, and tools that consumed this data, such as threshold alerting and autoscaling. We were hitting theoretical limits for Kafka performance by the time I left. + +- Wrote and maintained integrations for JVM application metrics and Go runtime metrics +- Developed a FaaS platform prototype with my team +- Helped my team navigate complicated coporate politics and market conditions beyond our control + +#coloredLine() + +My work history before 2017 is available upon request. + +== Notable Publications + +#for pub in resume.notablePublications [ + #publication(pub) + +] + +== Projects + +==== Xesite\ +The custom blog engine that powers #text(fill: blue)[#link("https://xeiaso.net")[xeiaso.net]]. It is a handcrafted work of art written in Rust with two goals: + +1. To be as fast as possible to survive traffic surges from news aggregators without flinching. +2. To be easily extensible and hackable to meet my needs. + +This project has been an overwhelming success and is the backbone of a lot of my personal development. Most of the things that would otherwise be written as separate projects have become extensions and modifications to my blog engine, allowing them to get a lot of traffic and hands-on user experience as soon as possible. + +==== XeDN\ +The software that powers #text(font: "Iosevka Curly Iaso Extended")[#link("https://cdn.xeiaso.net")[cdn.xeiaso.net]], currently serving over 4 terabytes of traffic per month without breaking a sweat. This powers the images, video, slides, and other files that I use to enrich my posts. + +==== Xeact\ +My custom frontend JavaScript framework. I regularly write about things I have learned working on it #text(fill: blue)[#link("https://xeiaso.net/blog/series/xeact")[on my blog]]. + +Working on this project has been the catalyst for me finally understanding how to do front-end development in web browsers. Xeact also powers internal tooling at Tailscale, being used daily by the support team to understand and diagnose customer issues. + +==== #link("https://github.com/Xe/waifud")[waifud]\ +My custom virtual machine manager for my homelab. waifud replicates most of the advantages of using cloud computing in my basement. I write about it regularly #text(fill: blue)[#link("https://xeiaso.net/blog/series/waifud")[on my blog]]. @@ -173,7 +173,28 @@ "flake-utils": "flake-utils", "iosevka": "iosevka", "naersk": "naersk", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs_2", + "typst": "typst" + } + }, + "typst": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1680860298, + "narHash": "sha256-aDLg97A+isOBFJMIww2mjVPyTCPSVlguo2tojzms/04=", + "owner": "typst", + "repo": "typst", + "rev": "94e052b8ccace3221aa960b9abe3b3f32b1d894f", + "type": "github" + }, + "original": { + "owner": "typst", + "repo": "typst", + "type": "github" } }, "utils": { @@ -23,14 +23,18 @@ # Explicitly pulling from that version of nixpkgs to avoid font duplication. iosevka.url = "github:Xe/iosevka"; + + typst.url = "github:typst/typst"; + typst.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { self, nixpkgs, flake-utils, naersk, deno2nix, iosevka, ... }: + outputs = + { self, nixpkgs, flake-utils, naersk, deno2nix, iosevka, typst, ... }: flake-utils.lib.eachSystem [ "x86_64-linux" "aarch64-linux" ] (system: let pkgs = import nixpkgs { inherit system; - overlays = [ deno2nix.overlays.default ]; + overlays = [ deno2nix.overlays.default typst.overlays.default ]; }; naersk-lib = naersk.lib."${system}"; src = ./.; @@ -38,6 +42,21 @@ tex = with pkgs; texlive.combine { inherit (texlive) scheme-medium bitter titlesec; }; + + typstWithIosevka = let + fontsConf = pkgs.symlinkJoin { + name = "typst-fonts"; + paths = [ "${self.packages.${system}.iosevka}/static/css/iosevka" ]; + }; + in pkgs.writeShellApplication { + name = "typst"; + text = '' + ${pkgs.typst-dev}/bin/typst \ + --font-path ${fontsConf} \ + "$@" + ''; + runtimeInputs = [ ]; + }; in rec { packages = rec { bin = naersk-lib.buildPackage { @@ -74,22 +93,30 @@ pname = "xesite-resume-pdf"; inherit (bin) version; inherit src; - buildInputs = with pkgs; [ dhall dhallPackages.Prelude tex pandoc ]; + buildInputs = with pkgs; [ + dhall-json + dhallPackages.Prelude + tex + pandoc + typstWithIosevka + ]; phases = "installPhase"; installPhase = '' mkdir -p $out/static/resume + cp -rf ${pkgs.dhallPackages.Prelude}/.cache .cache chmod -R u+w .cache export XDG_CACHE_HOME=.cache export DHALL_PRELUDE=${pkgs.dhallPackages.Prelude}/binary.dhall; - ln -s $src/dhall/latex/resume.cls - dhall text --file $src/dhall/latex/resume.dhall > resume.tex + cp -vrf $src/dhall/resume/* . + rm icons/xeiaso.svg + cp -f $src/static/img/xeiaso.svg icons + dhall-to-json --file $src/dhall/resume.dhall --output resume.json - xelatex ./resume.tex - cp resume.pdf $out/static/resume/resume.pdf + typst compile resume.typ $out/static/resume/resume.pdf ''; }; @@ -104,8 +131,9 @@ buildPhase = '' export DENO_DIR="$(pwd)/.deno2nix" mkdir -p $DENO_DIR - ln -s "${pkgs.deno2nix.internal.mkDepsLink ./src/frontend/deno.lock}" $(deno info --json | jq -r .modulesCache) - ${pkgs.tree}/bin/tree "${pkgs.deno2nix.internal.mkDepsLink ./src/frontend/deno.lock}" + ln -s "${ + pkgs.deno2nix.internal.mkDepsLink ./src/frontend/deno.lock + }" $(deno info --json | jq -r .modulesCache) export MINIFY=yes mkdir -p dist @@ -220,6 +248,7 @@ dhall-lsp-server tex pandoc + typstWithIosevka # frontend deno |
