feat!: migrate resume to typst with nix flakes backing
This commit is contained in:
parent
a2489e4567
commit
d1d2afcd45
12
.gitignore
vendored
12
.gitignore
vendored
@ -1,8 +1,4 @@
|
||||
*
|
||||
!.gitignore
|
||||
!developercv.cls
|
||||
!fontawesome.pdf
|
||||
!resume.tex
|
||||
!.gitlab-ci.yml
|
||||
!TODO.norg
|
||||
!README.md
|
||||
result
|
||||
conf.typ
|
||||
*.pdf
|
||||
*.gz
|
||||
|
@ -1,4 +1,5 @@
|
||||
stages:
|
||||
- setup
|
||||
- build
|
||||
- upload
|
||||
- release
|
||||
@ -11,36 +12,10 @@ variables:
|
||||
|
||||
build:
|
||||
stage: build
|
||||
image: alpine:latest
|
||||
variables:
|
||||
TECTONIC_DEPS_CACHE_PATH: "${CI_PROJECT_DIR}/.cache/Tectonic"
|
||||
TECTONIC_BIN_CACHE_PATH: "${CI_PROJECT_DIR}/tectonic"
|
||||
cache:
|
||||
policy: pull-push
|
||||
when: on_success
|
||||
paths:
|
||||
- "${TECTONIC_DEPS_CACHE_PATH}"
|
||||
- "${TECTONIC_BIN_CACHE_PATH}"
|
||||
image: nixos/nix:latest
|
||||
script: |
|
||||
mkdir -p "${CI_PROJECT_DIR}/.cache"
|
||||
mkdir -p "${HOME}/.cache"
|
||||
if [ -r "${TECTONIC_DEPS_CACHE_PATH}" ]; then
|
||||
mv "${TECTONIC_DEPS_CACHE_PATH}" "${HOME}/.cache"
|
||||
fi
|
||||
|
||||
if ! [ -x ./tectonic ]; then
|
||||
echo "Cache miss, tectonic binary not in cache! Redownloading!"
|
||||
apk update
|
||||
apk add curl
|
||||
curl -L0 https://github.com/tectonic-typesetting/tectonic/releases/download/tectonic%400.14.1/tectonic-0.14.1-x86_64-unknown-linux-musl.tar.gz --output tectonic.tar.gz
|
||||
tar -xf tectonic.tar.gz
|
||||
fi
|
||||
|
||||
echo "Compiling resume!"
|
||||
./tectonic -X compile --keep-logs ./resume.tex
|
||||
echo "Finished compiling resume, saving caches"
|
||||
|
||||
mv "${HOME}/.cache/Tectonic" "${CI_PROJECT_DIR}/.cache/Tectonic"
|
||||
nix --extra-experimental-features "flakes nix-command" build
|
||||
mv "./result/${RESUME_FILE}" $(pwd)
|
||||
artifacts:
|
||||
expire_in: 1 week
|
||||
paths:
|
||||
|
252
developercv.cls
252
developercv.cls
@ -1,252 +0,0 @@
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Developer CV
|
||||
% LaTeX Class
|
||||
% Version 1.0 (28/1/19)
|
||||
%
|
||||
% This class originates from:
|
||||
% http://www.LaTeXTemplates.com
|
||||
%
|
||||
% Authors:
|
||||
% Jan Vorisek (jan@vorisek.me)
|
||||
% Based on a template by Jan Küster (info@jankuester.com)
|
||||
% Modified for LaTeX Templates by Vel (vel@LaTeXTemplates.com)
|
||||
%
|
||||
% License:
|
||||
% The MIT License (see included LICENSE file)
|
||||
%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% Colors
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\usepackage{pagecolor}
|
||||
\definecolor{SumiInk0}{HTML}{16161D}
|
||||
\definecolor{SumiInk1}{HTML}{181820}
|
||||
\definecolor{SumiInk2}{HTML}{1a1a22}
|
||||
\definecolor{SumiInk3}{HTML}{1F1F28}
|
||||
\definecolor{SumiInk4}{HTML}{2A2A37}
|
||||
\definecolor{SumiInk5}{HTML}{363646}
|
||||
\definecolor{SumiInk6}{HTML}{54546D}
|
||||
\definecolor{WaveBlue1}{HTML}{223249}
|
||||
\definecolor{WaveBlue2}{HTML}{2D4F67}
|
||||
\definecolor{WinterGreen}{HTML}{2B3328}
|
||||
\definecolor{WinterYellow}{HTML}{49443C}
|
||||
\definecolor{WinterRed}{HTML}{43242B}
|
||||
\definecolor{WinterBlue}{HTML}{252535}
|
||||
\definecolor{AutumnGreen}{HTML}{76946A}
|
||||
\definecolor{AutumnRed}{HTML}{C34043}
|
||||
\definecolor{AutumnYellow}{HTML}{DCA561}
|
||||
\definecolor{SamuraiRed}{HTML}{E82424}
|
||||
\definecolor{RoninYellow}{HTML}{FF9E3B}
|
||||
\definecolor{WaveAqua1}{HTML}{6A9589}
|
||||
\definecolor{DragonBlue}{HTML}{658594}
|
||||
\definecolor{OldWhite}{HTML}{C8C093}
|
||||
\definecolor{FujiWhite}{HTML}{DCD7BA}
|
||||
\definecolor{FujiGray}{HTML}{727169}
|
||||
\definecolor{OniViolet}{HTML}{957FB8}
|
||||
\definecolor{OniViolet2}{HTML}{b8b4d0}
|
||||
\definecolor{CrystalBlue}{HTML}{7E9CD8}
|
||||
\definecolor{SpringViolet1}{HTML}{938AA9}
|
||||
\definecolor{SpringViolet2}{HTML}{9CABCA}
|
||||
\definecolor{SpringBlue}{HTML}{7FB4CA}
|
||||
\definecolor{LightBlue}{HTML}{A3D4D5}
|
||||
\definecolor{WaveAqua2}{HTML}{7AA89F}
|
||||
\definecolor{SpringGreen}{HTML}{98BB6C}
|
||||
\definecolor{BoatYellow1}{HTML}{938056}
|
||||
\definecolor{BoatYellow2}{HTML}{C0A36E}
|
||||
\definecolor{CarpYellow}{HTML}{E6C384}
|
||||
\definecolor{SakuraPink}{HTML}{D27E99}
|
||||
\definecolor{WaveRed}{HTML}{E46876}
|
||||
\definecolor{PeachRed}{HTML}{FF5D62}
|
||||
\definecolor{SurimiOrange}{HTML}{FFA066}
|
||||
\definecolor{KatanaGray}{HTML}{717C7C}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% CLASS CONFIGURATION
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesClass{developercv}[2019/01/28 Developer CV class v1.0]
|
||||
|
||||
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{extarticle}} % Pass through any options to the base class
|
||||
\ProcessOptions\relax % Process given options
|
||||
|
||||
\LoadClass{extarticle} % Load the base class
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\setlength{\parindent}{0mm} % Suppress paragraph indentation
|
||||
|
||||
\usepackage[hidelinks]{hyperref} % Required for links but hide the default boxes around links
|
||||
|
||||
\newcommand{\lorem}{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.} % Dummy text
|
||||
|
||||
\pagestyle{empty} % No headers or footers
|
||||
|
||||
\usepackage{moresize} % Provides more font size commands (\HUGE and \ssmall)
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% PAGE LAYOUT
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\usepackage{geometry} % Required for adjusting page dimensions and margins
|
||||
|
||||
\geometry{
|
||||
paper=a4paper, % Paper size, change to letterpaper for US letter size
|
||||
top=1.75cm, % Top margin
|
||||
bottom=1.75cm, % Bottom margin
|
||||
left=2cm, % Left margin
|
||||
right=2cm, % Right margin
|
||||
headheight=0.75cm, % Header height
|
||||
footskip=1cm, % Space from the bottom margin to the baseline of the footer
|
||||
headsep=0.5cm, % Space from the top margin to the baseline of the header
|
||||
%showframe, % Uncomment to show how the type block is set on the page
|
||||
}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% FONTS
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\usepackage[utf8]{inputenc} % Required for inputting international characters
|
||||
\usepackage[T1]{fontenc} % Output font encoding for international characters
|
||||
|
||||
\usepackage[default]{raleway}
|
||||
%\usepackage[defaultsans]{droidsans}
|
||||
%\usepackage{cmbright}
|
||||
%\usepackage{fetamont}
|
||||
%\usepackage[default]{gillius}
|
||||
%\usepackage{roboto}
|
||||
|
||||
\renewcommand*\familydefault{\sfdefault} % Force the sans-serif version of any font used
|
||||
|
||||
%------------------------------------------------
|
||||
|
||||
\usepackage{fontawesome} % Required for FontAwesome icons
|
||||
|
||||
% Command to output an icon in a SumiInk5 square box with text to the right
|
||||
\newcommand{\icon}[3]{% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
|
||||
\vcenteredhbox{\colorbox{SumiInk5}{\makebox(#2, #2){\textcolor{FujiWhite}{\large\csname fa#1\endcsname}}}}% Icon and box
|
||||
\hspace{0.2cm}% FujiWhitespace
|
||||
\vcenteredhbox{\textcolor{FujiWhite}{#3}}% Text
|
||||
}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% GRAPHICS DEFINITIONS
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\usepackage{tikz} % Required for creating the plots
|
||||
\usetikzlibrary{shapes, backgrounds}
|
||||
\tikzset{x=1cm, y=1cm} % Default tikz units
|
||||
|
||||
% Command to vertically centre adjacent content
|
||||
\newcommand{\vcenteredhbox}[1]{% The only parameter is for the content to centre
|
||||
\begingroup%
|
||||
\setbox0=\hbox{#1}\parbox{\wd0}{\box0}%
|
||||
\endgroup%
|
||||
}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% CHARTS
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\newcounter{barcount}
|
||||
|
||||
% Environment to hold a new bar chart
|
||||
\newenvironment{barchart}[1]{ % The only parameter is the maximum bar width, in cm
|
||||
\newcommand{\barwidth}{0.35}
|
||||
\newcommand{\barsep}{0.2}
|
||||
|
||||
% Command to add a bar to the bar chart
|
||||
\newcommand{\baritem}[2]{ % The first argument is the bar label and the second is the percentage the current bar should take up of the total width
|
||||
\pgfmathparse{##2}
|
||||
\let\perc\pgfmathresult
|
||||
|
||||
\pgfmathparse{#1}
|
||||
\let\barsize\pgfmathresult
|
||||
|
||||
\pgfmathparse{\barsize*##2/100}
|
||||
\let\barone\pgfmathresult
|
||||
|
||||
\pgfmathparse{(\barwidth*\thebarcount)+(\barsep*\thebarcount)}
|
||||
\let\barx\pgfmathresult
|
||||
|
||||
\filldraw[fill=SurimiOrange, draw=none] (0,-\barx) rectangle (\barone,-\barx-\barwidth);
|
||||
|
||||
\node [label=180:\colorbox{SumiInk5}{\textcolor{SurimiOrange}{##1}}] at (0,-\barx-0.175) {};
|
||||
\addtocounter{barcount}{1}
|
||||
}
|
||||
\begin{tikzpicture}
|
||||
\setcounter{barcount}{0}
|
||||
}{
|
||||
\end{tikzpicture}
|
||||
}
|
||||
|
||||
%------------------------------------------------
|
||||
|
||||
\newcounter{a}
|
||||
\newcounter{b}
|
||||
\newcounter{c}
|
||||
|
||||
% Command to output a number of automatically-sized bubbles from a string in the format of '<size>/<label>', e.g. \bubbles{5/Eclipse, 6/git, 4/Office, 3/Inkscape, 3/Blender}
|
||||
\newcommand{\bubbles}[1]{
|
||||
% Reset counters
|
||||
\setcounter{a}{0}
|
||||
\setcounter{c}{150}
|
||||
|
||||
\begin{tikzpicture}[scale=3]
|
||||
\foreach \p/\t in {#1} {
|
||||
\addtocounter{a}{1}
|
||||
\bubble{\thea/2}{\theb}{\p/25}{\t}{1\p0}
|
||||
}
|
||||
\end{tikzpicture}
|
||||
}
|
||||
|
||||
% Command to output a bubble at a specific position with a specific size
|
||||
\newcommand{\bubble}[5]{
|
||||
\filldraw[fill=SumiInk5, draw=none] (#1,0.5) circle (#3); % Bubble
|
||||
\node[label=\textcolor{SumiInk5}{#4}] at (#1,0.7) {}; % Label
|
||||
}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% CUSTOM SECTIONS
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
% Command to output section title headings
|
||||
\newcommand{\cvsect}[1]{% The only parameter is the section text
|
||||
\vspace{\baselineskip} % FujiWhitespace before the section title
|
||||
\colorbox{SumiInk5}{\textcolor{FujiWhite}{\MakeUppercase{\textbf{#1}}}}\\% Section title
|
||||
}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% ENTRY LIST
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\usepackage{longtable} % Required for tables that span multiple pages
|
||||
\setlength{\LTpre}{0pt} % Remove default FujiWhitespace before longtable
|
||||
\setlength{\LTpost}{0pt} % Remove default FujiWhitespace after longtable
|
||||
|
||||
\setlength{\tabcolsep}{0pt} % No spacing between table columns
|
||||
|
||||
% Environment to hold a new list of entries
|
||||
\newenvironment{entrylist}{
|
||||
\begin{longtable}[H]{l l}
|
||||
}{
|
||||
\end{longtable}
|
||||
}
|
||||
|
||||
\newcommand{\entry}[4]{% First argument for the leftmost date(s) text, second is for the bold entry heading, third is for the bold right-aligned entry qualifier and the fourth is for the entry description
|
||||
\parbox[t]{0.175\textwidth}{% 17.5% of the text width of the page
|
||||
#1 % Leftmost entry date(s) text
|
||||
}%
|
||||
&\parbox[t]{0.825\textwidth}{% 82.5% of the text width of the page
|
||||
\textbf{#2}% Entry heading text
|
||||
\hfill% Horizontal FujiWhitespace
|
||||
{\footnotesize \textbf{\textcolor{OldWhite}{#3}}}\\% Right-aligned entry qualifier text
|
||||
#4 % Entry description text
|
||||
}\\\\}
|
||||
|
||||
% Command to output a separator slash between lists, e.g. ' / '
|
||||
\newcommand{\slashsep}{\hspace{3mm}/\hspace{3mm}}
|
170
flake.lock
Normal file
170
flake.lock
Normal file
@ -0,0 +1,170 @@
|
||||
{
|
||||
"nodes": {
|
||||
"crane": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"typst",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1698166613,
|
||||
"narHash": "sha256-y4rdN4flxRiROqNi1waMYIZj/Fs7L2OrszFk/1ry9vU=",
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"rev": "b7db46f0f1751f7b1d1911f6be7daf568ad5bc65",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1696343447,
|
||||
"narHash": "sha256-B2xAZKLkkeRFG5XcHHSXXcP7To9Xzr59KXeZiRf4vdQ=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "c9afaba3dfa4085dbd2ccb38dfade5141e33d9d4",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "flake-parts",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705309234,
|
||||
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1705677747,
|
||||
"narHash": "sha256-eyM3okYtMgYDgmYukoUzrmuoY4xl4FUujnsv/P6I/zI=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "bbe7d8f876fbbe7c959c90ba2ae2852220573261",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib": {
|
||||
"locked": {
|
||||
"dir": "lib",
|
||||
"lastModified": 1696019113,
|
||||
"narHash": "sha256-X3+DKYWJm93DRSdC5M6K5hLqzSya9BjibtBsuARoPco=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "f5892ddac112a1e9b3612c39af1b72987ee5783a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"dir": "lib",
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1698318101,
|
||||
"narHash": "sha256-gUihHt3yPD7bVqg+k/UVHgngyaJ3DMEBchbymBMvK1E=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "63678e9f3d3afecfeafa0acead6239cdb447574c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"typst": "typst"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"typst": {
|
||||
"inputs": {
|
||||
"crane": "crane",
|
||||
"flake-parts": "flake-parts",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1705584441,
|
||||
"narHash": "sha256-xTat1Xc46hSLy7rkNnSnqgnB4YVvG6EkL6vpsWHcUv0=",
|
||||
"owner": "typst",
|
||||
"repo": "typst",
|
||||
"rev": "f27321b269e8e258cdb1322ed399c22711bbfaa8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "typst",
|
||||
"repo": "typst",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
32
flake.nix
Normal file
32
flake.nix
Normal file
@ -0,0 +1,32 @@
|
||||
{
|
||||
description = "Price Hiller's Resume";
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
typst.url = "github:typst/typst";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, typst, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let pkgs = nixpkgs.legacyPackages.${system};
|
||||
in rec {
|
||||
packages.default = pkgs.stdenvNoCC.mkDerivation {
|
||||
name = "priceh-resume";
|
||||
src = self;
|
||||
buildInputs = [ typst.packages.${system}.typst-dev ];
|
||||
buildPhase = ''
|
||||
ls -alh
|
||||
typst compile ./resume.typ
|
||||
'';
|
||||
installPhase = ''
|
||||
mkdir -p "$out"
|
||||
rm -rf "$out/*" || true
|
||||
cp resume.pdf $out/
|
||||
'';
|
||||
};
|
||||
overlays.default = packages.default;
|
||||
# Rust dev environment
|
||||
devShells.default =
|
||||
pkgs.mkShell { packages = with pkgs; [ typst typstfmt ]; };
|
||||
});
|
||||
}
|
BIN
fontawesome.pdf
BIN
fontawesome.pdf
Binary file not shown.
217
resume.tex
217
resume.tex
@ -1,217 +0,0 @@
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% Developer CV
|
||||
% LaTeX Template
|
||||
% Version 1.0 (28/1/19)
|
||||
%
|
||||
% This template originates from:
|
||||
% http://www.LaTeXTemplates.com
|
||||
%
|
||||
% Authors:
|
||||
% Jan Vorisek (jan@vorisek.me) <- This guy is a chad, I modified some of this stuff quite heavily. Still, credit where
|
||||
% it's due
|
||||
% Based on a template by Jan Küster (info@jankuester.com)
|
||||
% Modified for LaTeX Templates by Vel (vel@LaTeXTemplates.com)
|
||||
%
|
||||
% License:
|
||||
% The MIT License
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% PACKAGES AND OTHER DOCUMENT CONFIGURATIONS
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\documentclass[9pt]{developercv} % Default font size, values from 8-12pt are recommended
|
||||
\pagecolor{SumiInk2}
|
||||
\color{FujiWhite}
|
||||
\usepackage{hyperref}
|
||||
\hypersetup{
|
||||
colorlinks=true,
|
||||
urlcolor=SpringGreen,
|
||||
}
|
||||
\geometry{
|
||||
top=1.2cm, % Top margin
|
||||
bottom=1.2cm, % Bottom margin
|
||||
left=2.25cm, % Left margin
|
||||
right=2.25cm, % Right margin
|
||||
}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\begin{document}
|
||||
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% TITLE AND CONTACT INFORMATION
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\begin{minipage}[t]{0.35\textwidth} % 45% of the page width for name
|
||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||
|
||||
% If your name is very short, use just one of the lines below
|
||||
% If your name is very long, reduce the font size or make the minipage wider and reduce the others proportionately
|
||||
\colorbox{SumiInk5}{{\HUGE{\textbf{\MakeUppercase{Price}}}}} % First name
|
||||
|
||||
\colorbox{SumiInk5}{{\HUGE{\textbf{\MakeUppercase{Hiller}}}}} % Last name
|
||||
\end{minipage}
|
||||
\begin{minipage}[t]{0.3\textwidth} % 27.5% of the page width for the first row of icons
|
||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||
|
||||
% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
|
||||
% Other icons can be found by referring to fontawesome.pdf (supplied with the template) and using the word after \fa in the command for the icon you want
|
||||
\icon{MapMarker}{12}{\href{https://en.wikipedia.org/wiki/San_Antonio}{San Antonio, Texas}}\\
|
||||
\icon{Phone}{12}{\href{tel:+1210-571-4297}{+1 210 571-4297}}\\
|
||||
\icon{At}{12}{\href{mailto:price@orion-technologies.io}{price@orion-technologies.io}}\\
|
||||
\end{minipage}
|
||||
\begin{minipage}[t]{0.3\textwidth} % 27.5% of the page width for the second row of icons
|
||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||
|
||||
% The first parameter is the FontAwesome icon name, the second is the box size and the third is the text
|
||||
% Other icons can be found by referring to fontawesome.pdf (supplied with the template) and using the word after \fa in the command for the icon you want
|
||||
\icon{Globe}{12}{\href{https://blog.orion-technologies.io}{blog.orion-technologies.io}}\\
|
||||
\icon{Github}{12}{\href{https://github.com/treatybreaker}{github.com/treatybreaker}}\\
|
||||
\icon{Gitlab}{12}{\href{https://gitlab.orion-technologies.io/philler}{gitlab.orion-technologies.io/philler}}
|
||||
\end{minipage}
|
||||
|
||||
\vspace{0cm}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% INTRODUCTION, SKILLS AND TECHNOLOGIES
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\cvsect{About Me}
|
||||
|
||||
\begin{minipage}[t]{0.4\textwidth} % 40% of the page width for the introduction text
|
||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||
|
||||
I am a programmer and Linux user who has an outsized level of pride in my
|
||||
\href{https://gitlab.orion-technologies.io/philler/dots/-/tree/Development/dots/.config/nvim?ref_type=heads}{Neovim
|
||||
configuration}. I deploy said configuration via my
|
||||
\href{https://gitlab.orion-technologies.io/ansible/dot-files}{Ansible Dot File Playbook}. I currently write most of my
|
||||
code in \href{https://www.lua.org/}{Lua} for configurations and \href{https://www.rust-lang.org/}{Rust} for actual
|
||||
full on programming. I am highly invested in reproducibility, expressed via \href{https://www.docker.com/}{Docker} and
|
||||
\href{https://www.ansible.com/}{Ansible} (and lately some
|
||||
\href{https://nixos.org/manual/nix/unstable/introduction}{Nix}). I currently use Arch Linux (btw) as my operating
|
||||
system and live almost entirely in the
|
||||
\href{https://gitlab.orion-technologies.io/philler/dots/-/tree/Development/dots/.config/wezterm?ref_type=heads}{terminal}.
|
||||
This \href{https://gitlab.orion-technologies.io/philler/resume/-/tree/Development?ref_type=heads}{resume}, for
|
||||
instance, was written in vim and compiled with Tectonic.\\
|
||||
\end{minipage}
|
||||
\hfill % Whitespace between
|
||||
\begin{minipage}[t]{0.5\textwidth} % 50% of the page for the skills bar chart
|
||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||
\begin{barchart}{5.5}
|
||||
\baritem{Ansible}{90}
|
||||
\baritem{Rust}{70}
|
||||
\baritem{Lua}{100}
|
||||
\baritem{Git}{80}
|
||||
\baritem{CI/CD}{90}
|
||||
\baritem{Linux}{70}
|
||||
\baritem{Python}{50}
|
||||
\baritem{Docker}{60}
|
||||
\end{barchart}
|
||||
\end{minipage}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% EXPERIENCE
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\cvsect{Experience}
|
||||
|
||||
\begin{entrylist}
|
||||
\entry
|
||||
% June 2022 -> June 2023
|
||||
{2022 - 2023\\\footnotesize{part time}}
|
||||
{Systems Integration Intern}
|
||||
{Security Service Federal Credit Union}
|
||||
{I was primarily involved with pipelines and overhauling legacy projects. I overhauled the in-use pipelines to
|
||||
"Pipelines V3" with significant modularity improvements and major performance gains. The average speedup was 8x,
|
||||
with the highest speed up being 20x. These pipelines were responsible for testing, building, and deploying code at
|
||||
SSFCU. \\ \texttt{C\#}\slashsep\texttt{Powershell}\slashsep\texttt{Azure/Github
|
||||
CI/CD}\slashsep\texttt{Bash}\slashsep\texttt{Docker}\slashsep\texttt{Windows Server}}
|
||||
\entry
|
||||
% October 2021 -> June 2022
|
||||
{2021 -- 2022\\\footnotesize{part time}}
|
||||
{Junior Systems Administrator}
|
||||
{Vircio}
|
||||
{I introduced Ansible automation as part of a project to leave the legacy CFEngine automation platform behind. I
|
||||
created Ansible playbooks that managed several hundred hosts in various customer locations along with implementing
|
||||
Gitlab CI/CD to lint and run these playbooks on git integration. All systems were Linux based that I automated and
|
||||
worked on.\\
|
||||
\texttt{Linux}\slashsep\texttt{Bash}\slashsep\texttt{Ansible}\slashsep\texttt{CFEngine}\slashsep\texttt{Networking}\slashsep\texttt{Bind9}\slashsep\texttt{Gitlab
|
||||
CI/CD}}
|
||||
\entry
|
||||
% August 2021 -> December 2021
|
||||
{2021 - 2021\\\footnotesize{part time}}
|
||||
{Peer Advisor/Tutor}
|
||||
{San Antonio College}
|
||||
{I did IT tutoring primarily for students working towards their Cisco Certified Network Associate certification. This
|
||||
included teaching subnetting, IPv6, TCP/IP, and more.}
|
||||
\entry
|
||||
% June 2019 -> October 2020
|
||||
{2019 - 2020\\\footnotesize{part time}}
|
||||
{Information Analyst II Intern}
|
||||
{Booz Allen Hamilton}
|
||||
{I was on a team doing machine learning work. I helped with applying the target dataset we used, filtering, and
|
||||
gathering of data for the machine learning system in Python.\\ \texttt{Python}\slashsep\texttt{Linux}\slashsep\texttt{Elastic
|
||||
Search}\slashsep\texttt{Kibana}\slashsep\texttt{Logstash}\slashsep\texttt{Bash}}
|
||||
\end{entrylist}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% EDUCATION
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\cvsect{Education}
|
||||
|
||||
\begin{entrylist}
|
||||
\entry
|
||||
{2024 -- FUTURE}
|
||||
{Finishing Bachelor's Degree}
|
||||
{University of Texas at San Antonio}
|
||||
{After my current semester at San Antonio College I intend to go back to UTSA and get my full bachelor's in business
|
||||
with a cybersecurity specialization starting spring of 2024.}
|
||||
\entry
|
||||
{2021 - PRESENT}
|
||||
{Associates in Business}
|
||||
{San Antonio College}
|
||||
{I came to SAC to get my prerequisite courses finished and have qualified for an associates degree in business which I
|
||||
will receive fall of 2023.}
|
||||
\entry
|
||||
{2019 -- 2021}
|
||||
{Seeking Bachelor's Degree in Business}
|
||||
{University of Texas at San Antonio}
|
||||
{I began on my path to getting a Bachelor's Business degree with a specialization in Cybersecurity in fall of 2019. I
|
||||
left in 2021 to San Antonio Colleges to finish out prerequisite courses and get my associates degree.}
|
||||
\end{entrylist}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
% ADDITIONAL INFORMATION
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\begin{minipage}[t]{0.45\textwidth}
|
||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||
|
||||
\cvsect{Projects}
|
||||
|
||||
\textbf{\href{https://github.com/AsgardEternal}{Squad Server Automation}}\\Squad Server Deployments
|
||||
and Management\\
|
||||
\textbf{\href{https://gitlab.orion-technologies.io/blog/blog}{Blog Static Site Generator}}\\Rust Code Powering a Blog\\
|
||||
\textbf{\href{https://pypi.org/project/avents/}{Avents}}\\Python Asynchronous Event Framework
|
||||
\end{minipage}
|
||||
\hfill
|
||||
\begin{minipage}[t]{0.6\textwidth}
|
||||
\vspace{-\baselineskip} % Required for vertically aligning minipages
|
||||
|
||||
\cvsect{Some Code I've Written}
|
||||
|
||||
- {\href{https://github.com/NeogitOrg/neogit/pull/616}{Test Overhauls For Neogit}}\\
|
||||
- {\href{https://github.com/treatybreaker/mfc_elo_api}{MFC ELO API}}\\
|
||||
- {\href{https://github.com/neovim/neovim/pull/23925}{Injecting Cmake Variable into Neovim}}\\
|
||||
- {\href{https://github.com/krivahtoo/silicon.nvim/pull/28}{Modifying ABI Call in Silicon.nvim}}\\
|
||||
- {\href{https://github.com/neovim/nvim-lspconfig/pull/2493}{Adding the Azure Pipelines Language Server to Nvim-Lspconfig}}\\
|
||||
- {\href{https://gitlab.orion-technologies.io/philler/bash-scripts/-/blob/Development/Misc/Templater.bash?ref_type=heads}{A
|
||||
Templating System Written in 100\% Pure Bash}}
|
||||
\end{minipage}
|
||||
|
||||
%----------------------------------------------------------------------------------------
|
||||
|
||||
\end{document}
|
197
resume.typ
Normal file
197
resume.typ
Normal file
@ -0,0 +1,197 @@
|
||||
#let section(name) = {
|
||||
[= #name]
|
||||
v(-5pt)
|
||||
line(length: 100%, stroke: .5pt + black)
|
||||
v(-2pt)
|
||||
}
|
||||
|
||||
#let resume(name: none, info: (), skills: (), jobs: (), education: (), doc) = {
|
||||
set par(justify: true, leading: 0.5em)
|
||||
set text(font: "Liberation Sans", size: 10pt)
|
||||
align(center)[
|
||||
#grid(
|
||||
columns: 1,
|
||||
row-gutter: 1.2em,
|
||||
text(24pt)[*#name*],
|
||||
info.join(" " + $diamond.stroked.dot$ + " "),
|
||||
)
|
||||
]
|
||||
section("Technical Skills")
|
||||
grid(columns: 5, column-gutter: 1fr, row-gutter: .5em, ..skills)
|
||||
section("Experience")
|
||||
for job in jobs {
|
||||
grid(
|
||||
columns: 2,
|
||||
column-gutter: 1fr,
|
||||
row-gutter: 0.4em,
|
||||
[*#job.company*],
|
||||
align(right)[*#job.dates.start.display("[month repr:short] [year]") —
|
||||
#job.dates.end.display("[month repr:short] [year]")*],
|
||||
text(.9em, style: "italic")[#job.title],
|
||||
align(right, text(.9em, style: "italic")[#job.location]),
|
||||
)
|
||||
v(-.7em)
|
||||
pad(left: 1em)[#job.info]
|
||||
}
|
||||
section("Education")
|
||||
for edu in education {
|
||||
grid(
|
||||
columns: 2,
|
||||
column-gutter: 1fr,
|
||||
row-gutter: 0.4em,
|
||||
[*#edu.university*],
|
||||
align(right)[*#edu.dates.start.display("[month repr:short] [year]") —
|
||||
#edu.dates.end.display("[month repr:short] [year]")*],
|
||||
text(.9em, style: "italic")[#edu.major],
|
||||
align(right, text(.9em, style: "italic")[#edu.location]),
|
||||
)
|
||||
v(-.7em)
|
||||
pad(left: 1em)[#edu.info]
|
||||
}
|
||||
doc
|
||||
}
|
||||
#set page(paper: "us-letter", margin: (x: 1in, y: 1in))
|
||||
#show heading: h => [
|
||||
#set text(15pt)
|
||||
#h.body
|
||||
]
|
||||
#show: doc => resume(
|
||||
name: "Price Hiller",
|
||||
info: (
|
||||
link("mailto:price@orion-technologies.io"),
|
||||
link("tel:1-210-571-4279", "(210) 571-4297"),
|
||||
"San Antonio, TX",
|
||||
text(blue, link("https://gitlab.orion-technologies.io/philler", "Gitlab")),
|
||||
text(blue, link("https://github.com/treatybreaker", "Github")),
|
||||
text(blue, link("https://blog.orion-technologies.io", "Blog")),
|
||||
),
|
||||
skills: (
|
||||
"Linux",
|
||||
"Bash",
|
||||
"Powershell",
|
||||
"Ansible",
|
||||
"Networking",
|
||||
"Git",
|
||||
"Gitlab CI/CD",
|
||||
"Github CI/CD",
|
||||
"Docker",
|
||||
"Rust",
|
||||
"Python",
|
||||
"Lua",
|
||||
"Javascript",
|
||||
"Nix",
|
||||
),
|
||||
// June 2022 -> June 2023
|
||||
jobs: (
|
||||
(
|
||||
company: "Security Service Federal Credit Union",
|
||||
dates: (
|
||||
start: datetime(year: 2022, month: 5, day: 1),
|
||||
end: datetime(year: 2023, month: 6, day: 22),
|
||||
),
|
||||
location: "San Antonio, TX",
|
||||
title: "Systems Integration Intern",
|
||||
info: [
|
||||
- Overhauled preexisting CI/CD systems to "Pipelines V3" in Azure DevOps
|
||||
- Significant reduction in pipeline durations
|
||||
- Improved modularity, allowing pipeline reuse even across teams
|
||||
- Integrated pulling secrets from CyberArk in pipelines
|
||||
- Implemented limited canary deployments for critical services
|
||||
- Initial implementation of Docker on a critical service
|
||||
- Updated _many_ legacy `C#` projects to .NET Core 3 or higher and their
|
||||
corresponding pipelines
|
||||
],
|
||||
),
|
||||
(
|
||||
company: "Vircio",
|
||||
dates: (
|
||||
start: datetime(year: 2021, month: 10, day: 1),
|
||||
end: datetime(year: 2022, month: 5, day: 1),
|
||||
),
|
||||
location: "Austin, TX",
|
||||
title: "Junior Systems Administrator",
|
||||
info: [
|
||||
- Implemented Ansible to modernize management of remote Linux Servers improving
|
||||
stability of the network
|
||||
- Introduced GitOps to manage system configurations in Gitlab
|
||||
- Automatically validated the Ansible configurations on every update
|
||||
- Automatically deployed the new system configurations if validation passed
|
||||
],
|
||||
),
|
||||
(
|
||||
company: "San Antonio College",
|
||||
dates: (
|
||||
start: datetime(year: 2021, month: 8, day: 1),
|
||||
end: datetime(year: 2021, month: 12, day: 13),
|
||||
),
|
||||
location: "San Antonio, TX",
|
||||
title: "Peer Advisor",
|
||||
info: [
|
||||
- Tutored students in Information Technology, Programming, and more
|
||||
- Covered Networking topics such as IPv6, TCP/IP, subnetting, routing, etc.
|
||||
- Covered Programming topics such as OOP, Java, Python
|
||||
],
|
||||
),
|
||||
(
|
||||
company: "Booz Allen Hamilton",
|
||||
dates: (
|
||||
start: datetime(year: 2019, month: 6, day: 1),
|
||||
end: datetime(year: 2020, month: 8, day: 1),
|
||||
),
|
||||
location: "San Antonio, TX",
|
||||
title: "Infomation Analyst II Intern",
|
||||
info: [
|
||||
- Gathered and categorized data for machine learning systems in the Cybersecurity
|
||||
realm
|
||||
- Worked with the ELK stack to visualize and filter datasets
|
||||
],
|
||||
),
|
||||
),
|
||||
education: (
|
||||
(
|
||||
university: "University of Texas at San Antonio",
|
||||
dates: (
|
||||
start: datetime(year: 2024, month: 01, day: 16),
|
||||
end: datetime(year: 2025, month: 12, day: 08),
|
||||
),
|
||||
major: "BS Computer Science (In Progress)",
|
||||
location: "San Antonio, TX",
|
||||
info: [
|
||||
- Currently working towards a Bachelors of Computer Science
|
||||
],
|
||||
),
|
||||
(university: "San Antonio College", dates: (
|
||||
start: datetime(year: 2021, month: 08, day: 01),
|
||||
end: datetime(year: 2023, month: 12, day: 08),
|
||||
), major: "AA Business", location: "San Antonio, TX", info: [
|
||||
- Completed an Associates of Business degree at San Antonio College
|
||||
- Part of the Cybersecurity Club
|
||||
]),
|
||||
// (
|
||||
// university: "University of Texas at San Antonio",
|
||||
// dates: (
|
||||
// start: datetime(year: 2019, month: 01, day: 16),
|
||||
// end: datetime(year: 2021, month: 06, day: 01),
|
||||
// ),
|
||||
// major: "Cybersecurity (incomplete)",
|
||||
// location: "San Antonio, TX",
|
||||
// info: [ ],
|
||||
// ),
|
||||
),
|
||||
[
|
||||
#section("Projects")
|
||||
- #text(blue, link("https://github.com/AsgardEternal/Squad.nix", "Squad.nix")):
|
||||
Configuring Squad game servers for NixOS, a immutable, reproducible distribution
|
||||
of Linux
|
||||
- #text(blue, link(
|
||||
"https://github.com/AsgardEternal/Ubuntu-Ansible-Setup",
|
||||
"Ubuntu Server Configuration",
|
||||
)): Automated configuration of a Ubuntu Server deployed on every git push
|
||||
- #text(blue, link("https://github.com/treatybreaker/blog", "Blog")): Source code
|
||||
of my blog, all written in Rust, packaged with a Nix Flake, and deployed on my
|
||||
home server #text(
|
||||
blue,
|
||||
link("https://gitlab.orion-technologies.io/philler/nixos", "here"),
|
||||
)
|
||||
],
|
||||
)
|
Loading…
Reference in New Issue
Block a user