feat!: migrate resume to typst with nix flakes backing

This commit is contained in:
Price Hiller 2024-01-21 09:41:38 -06:00
parent a2489e4567
commit d1d2afcd45
Signed by: Price
SSH Key Fingerprint: SHA256:Y4S9ZzYphRn1W1kbJerJFO6GGsfu9O70VaBSxJO7dF8
8 changed files with 407 additions and 506 deletions

12
.gitignore vendored
View File

@ -1,8 +1,4 @@
*
!.gitignore
!developercv.cls
!fontawesome.pdf
!resume.tex
!.gitlab-ci.yml
!TODO.norg
!README.md
result
conf.typ
*.pdf
*.gz

View File

@ -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:

View File

@ -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
View 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
View 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 ]; };
});
}

Binary file not shown.

View File

@ -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
View 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"),
)
],
)