Compare commits
12 commits
2025.02.27
...
main
Author | SHA1 | Date | |
---|---|---|---|
03da18cacd | |||
5fb17b3e06 | |||
98ac6ab3fc | |||
a06ad8aaab | |||
49243fd99e | |||
cab11ef3af | |||
45743bd6df | |||
397bc485ec | |||
2ca6473869 | |||
34ca3c9b0e | |||
36b2ae610d | |||
d395a29ca8 |
18 changed files with 113 additions and 63 deletions
2
Justfile
2
Justfile
|
@ -1,5 +1,5 @@
|
||||||
default:
|
default:
|
||||||
guix time-machine --channels=./channels.scm.lock -- shell --container --emulate-fhs --manifest=./manifest.scm -- typst compile ./src/document.typ ./out/resume.pdf --font-path=/usr/share/fonts
|
guix time-machine --channels=./channels.scm.lock -- shell --container --emulate-fhs --manifest=./manifest.scm -- sh -c "mkdir -p ./out && typst compile ./src/document.typ ./out/resume.pdf --font-path=/usr/share/fonts --root=src"
|
||||||
|
|
||||||
fonts:
|
fonts:
|
||||||
guix time-machine --channels=./channels.scm.lock -- shell --container --emulate-fhs --manifest=./manifest.scm -- typst fonts --font-path=/usr/share/fonts
|
guix time-machine --channels=./channels.scm.lock -- shell --container --emulate-fhs --manifest=./manifest.scm -- typst fonts --font-path=/usr/share/fonts
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
(url "https://git.savannah.gnu.org/git/guix.git")
|
(url "https://git.savannah.gnu.org/git/guix.git")
|
||||||
(branch "master")
|
(branch "master")
|
||||||
(commit
|
(commit
|
||||||
"8c483c12e94bcf43e4c44170f1d5fea5fbba4970")
|
"e25cd565bf191691838702d76c764a2a3cd557d3")
|
||||||
(introduction
|
(introduction
|
||||||
(make-channel-introduction
|
(make-channel-introduction
|
||||||
"9edb3f66fd807b096b48283debdcddccfea34bad"
|
"9edb3f66fd807b096b48283debdcddccfea34bad"
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
(url "https://codeberg.org/guix-science/guix-science")
|
(url "https://codeberg.org/guix-science/guix-science")
|
||||||
(branch "master")
|
(branch "master")
|
||||||
(commit
|
(commit
|
||||||
"a82cc47ae408a9a92e1bd038fdb8d46f694ebde3")
|
"b9f41a281365e0681dd78ac4c756c78a5997fa30")
|
||||||
(introduction
|
(introduction
|
||||||
(make-channel-introduction
|
(make-channel-introduction
|
||||||
"b1fe5aaff3ab48e798a4cce02f0212bc91f423dc"
|
"b1fe5aaff3ab48e798a4cce02f0212bc91f423dc"
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
email: "contact@ethanreece.com",
|
email: "contact@ethanreece.com",
|
||||||
phone: "(208) 515-2094",
|
phone: "(208) 515-2094",
|
||||||
location: "Richardson, TX",
|
location: "Richardson, TX",
|
||||||
website: "https://ethanreece.com/"
|
website: "linkedin.com/in/-ethanreece-"
|
||||||
),
|
),
|
||||||
skills: (
|
skills: (
|
||||||
(
|
(
|
||||||
|
@ -12,12 +12,12 @@
|
||||||
items: (
|
items: (
|
||||||
"Linux",
|
"Linux",
|
||||||
"Git",
|
"Git",
|
||||||
"GitHub Actions",
|
|
||||||
"Docker",
|
"Docker",
|
||||||
"Proxmox",
|
"Proxmox",
|
||||||
"Nix",
|
"Nix",
|
||||||
"Guix",
|
"Guix",
|
||||||
"Terraform",
|
"Terraform",
|
||||||
|
"GitHub Actions",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
@ -25,11 +25,10 @@
|
||||||
items: (
|
items: (
|
||||||
"JavaScript",
|
"JavaScript",
|
||||||
"C#",
|
"C#",
|
||||||
"Java",
|
|
||||||
"Rust",
|
"Rust",
|
||||||
|
"Java",
|
||||||
"C",
|
"C",
|
||||||
"C++",
|
"C++",
|
||||||
"Guile/Scheme",
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
@ -50,31 +49,27 @@
|
||||||
(
|
(
|
||||||
title: "The University of Texas at Dallas",
|
title: "The University of Texas at Dallas",
|
||||||
degree: "Bachelor of Science in Computer Science",
|
degree: "Bachelor of Science in Computer Science",
|
||||||
graduation: "May 2026",
|
graduation: "Expected Graduation: December 2025",
|
||||||
gpa: "Current GPA: 3.768",
|
gpa: "Current GPA: 3.801",
|
||||||
coursework: (
|
coursework: (
|
||||||
completed: (
|
completed: (
|
||||||
"Programming Language Paradigms",
|
"Programming Language Paradigms",
|
||||||
"Digital Logic & Computer Design",
|
"Digital Logic & Computer Design",
|
||||||
"Operating Systems Concepts",
|
"Operating Systems Concepts",
|
||||||
"Probability & Statistics in CS/SE",
|
|
||||||
"Data Structures & Algorithmic Analysis",
|
"Data Structures & Algorithmic Analysis",
|
||||||
"Software Engineering",
|
"Software Engineering",
|
||||||
"Systems Programming in UNIX",
|
"Systems Programming in UNIX",
|
||||||
"Computer Architecture (CS 2340)",
|
"Computer Architecture (CS 2340)",
|
||||||
"Discrete Mathematics II",
|
|
||||||
"Database Systems",
|
"Database Systems",
|
||||||
"Advanced Algorithm Design & Analysis",
|
|
||||||
"Linear Algebra",
|
|
||||||
"Theoretical Concepts of Calculus",
|
|
||||||
"Differential Equations with Applications",
|
|
||||||
),
|
|
||||||
current: (
|
|
||||||
"Automata Theory",
|
|
||||||
"Cyber Attack & Defense Lab",
|
"Cyber Attack & Defense Lab",
|
||||||
"Computer Architecture (CS 6304)",
|
"Computer Architecture (CS 6304)",
|
||||||
"Advanced Operating Systems",
|
"Advanced Operating Systems",
|
||||||
),
|
),
|
||||||
|
current: (
|
||||||
|
"Design and Analysis of Computer Algorithms",
|
||||||
|
"Computer Networks",
|
||||||
|
"Real-Time Systems",
|
||||||
|
),
|
||||||
),
|
),
|
||||||
highlights: (
|
highlights: (
|
||||||
"Computer Science Fast Track Program, Systems Track",
|
"Computer Science Fast Track Program, Systems Track",
|
||||||
|
@ -82,7 +77,7 @@
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
work_experience: (
|
experience: (
|
||||||
(
|
(
|
||||||
title: "Scrumfish Software",
|
title: "Scrumfish Software",
|
||||||
location: "Nampa, ID",
|
location: "Nampa, ID",
|
||||||
|
@ -93,6 +88,7 @@
|
||||||
"JavaScript/React",
|
"JavaScript/React",
|
||||||
"Microsoft SQL Server",
|
"Microsoft SQL Server",
|
||||||
"GitHub",
|
"GitHub",
|
||||||
|
"Jira",
|
||||||
),
|
),
|
||||||
highlights: (
|
highlights: (
|
||||||
"Developed ASP.NET APIs for data management, multifactor authentication, and document conversion.",
|
"Developed ASP.NET APIs for data management, multifactor authentication, and document conversion.",
|
||||||
|
@ -118,7 +114,7 @@
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
professional_development: (
|
projects: (
|
||||||
(
|
(
|
||||||
title: "Declarative Laptop Configuration",
|
title: "Declarative Laptop Configuration",
|
||||||
timeframe: "July 2024 – Present",
|
timeframe: "July 2024 – Present",
|
||||||
|
@ -130,8 +126,8 @@
|
||||||
"Git",
|
"Git",
|
||||||
),
|
),
|
||||||
highlights: (
|
highlights: (
|
||||||
"Leveraging Guix and Nix to centralize my laptop user configuration for tracking history and improving maintainability.",
|
"Leverage Guix and Nix to centralize my laptop user configuration for tracking history and improving maintainability.",
|
||||||
"Utilizing the \"time-machine\" function to ensure consistent software versions and to allow rolling back."
|
"Utilize the \"time-machine\" function to ensure consistent software versions and to allow rolling back."
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
@ -149,10 +145,28 @@
|
||||||
"Cloudflare",
|
"Cloudflare",
|
||||||
),
|
),
|
||||||
highlights: (
|
highlights: (
|
||||||
"Managing a physical server using Proxmox, Debian VMs, and Docker for several applications.",
|
"Manage a physical server using Proxmox, Debian VMs, and Docker for several applications.",
|
||||||
"Hosting various services including Forgejo, TrueNAS, Nextcloud, and Vaultwarden.",
|
"Host various services including Forgejo, TrueNAS, Nextcloud, and Vaultwarden.",
|
||||||
"Using Terraform with NixOS, Hetzner, and Cloudflare integrations to centralize configurations for a VPN used to navigate CGNAT limitations.",
|
"Use Terraform with NixOS, Hetzner, and Cloudflare integrations to centralize configurations for a VPN used to navigate CGNAT limitations.",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
title: "Failure-Resistant Distributed Database System",
|
||||||
|
timeframe: "April – May 2025",
|
||||||
|
role: "Course Group Project",
|
||||||
|
skills: (
|
||||||
|
"Rust",
|
||||||
|
"Tokio",
|
||||||
|
"Serde",
|
||||||
|
"Nix",
|
||||||
|
"TCP",
|
||||||
|
"Linux",
|
||||||
|
"GitHub",
|
||||||
|
),
|
||||||
|
highlights: (
|
||||||
|
"Implemented a basic distributed database system with an architecture similar to Amazon Dynamo, designed to tolerate a small number of server failures.",
|
||||||
|
"Demonstrated that transaction logs remain totally ordered, even under a high load.",
|
||||||
|
)
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
highlights: (""),
|
highlights: (""),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
work_experience: (
|
experience: (
|
||||||
(
|
(
|
||||||
title: "",
|
title: "",
|
||||||
location: "",
|
location: "",
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
highlights: (""),
|
highlights: (""),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
professional_development: (
|
projects: (
|
||||||
(
|
(
|
||||||
title: "",
|
title: "",
|
||||||
timeframe: "",
|
timeframe: "",
|
||||||
|
@ -55,8 +55,8 @@
|
||||||
page_resume_content(
|
page_resume_content(
|
||||||
skills: skills,
|
skills: skills,
|
||||||
education: education,
|
education: education,
|
||||||
work_experience: work_experience,
|
experience: experience,
|
||||||
professional_development: professional_development,
|
projects: projects,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
highlights: (""),
|
highlights: (""),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
work_experience: (
|
experience: (
|
||||||
(
|
(
|
||||||
title: "",
|
title: "",
|
||||||
location: "",
|
location: "",
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
highlights: (""),
|
highlights: (""),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
professional_development: (
|
projects: (
|
||||||
(
|
(
|
||||||
title: "",
|
title: "",
|
||||||
timeframe: "",
|
timeframe: "",
|
||||||
|
@ -37,14 +37,14 @@
|
||||||
) = {
|
) = {
|
||||||
import "../../section/skills.typ": section_skills
|
import "../../section/skills.typ": section_skills
|
||||||
import "../../section/education.typ": section_education
|
import "../../section/education.typ": section_education
|
||||||
import "../../section/work_experience.typ": section_work_experience
|
import "../../section/experience.typ": section_experience
|
||||||
import "../../section/professional_development.typ": section_professional_development
|
import "../../section/projects.typ": section_projects
|
||||||
|
|
||||||
grid(
|
grid(
|
||||||
gutter: 1.7em,
|
gutter: 1.1em,
|
||||||
section_skills(skills: skills),
|
section_skills(skills: skills),
|
||||||
section_education(education: education),
|
section_education(education: education),
|
||||||
section_work_experience(work_experience: work_experience),
|
section_experience(experience: experience),
|
||||||
section_professional_development(professional_development: professional_development),
|
section_projects(projects: projects),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
grid(
|
grid(
|
||||||
columns: 4,
|
columns: 4,
|
||||||
rows: 1,
|
rows: 1,
|
||||||
gutter: 4em,
|
gutter: 3em,
|
||||||
email,
|
email,
|
||||||
phone,
|
phone,
|
||||||
location,
|
location,
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
title: "",
|
title: "",
|
||||||
subtitle: "",
|
subtitle: "",
|
||||||
role: "",
|
role: "",
|
||||||
|
role_subtitle: "",
|
||||||
timeframe: "",
|
timeframe: "",
|
||||||
skills: (""),
|
skills: (""),
|
||||||
highlights: (""),
|
highlights: (""),
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: "",
|
title: "",
|
||||||
subtitle: "",
|
subtitle: "",
|
||||||
role: "",
|
role: "",
|
||||||
|
role_subtitle: "",
|
||||||
timeframe: "",
|
timeframe: "",
|
||||||
skills: (""),
|
skills: (""),
|
||||||
highlights: (""),
|
highlights: (""),
|
||||||
|
@ -15,6 +16,7 @@
|
||||||
title: title,
|
title: title,
|
||||||
subtitle: subtitle,
|
subtitle: subtitle,
|
||||||
role: role,
|
role: role,
|
||||||
|
role_subtitle: role_subtitle,
|
||||||
timeframe: timeframe,
|
timeframe: timeframe,
|
||||||
skills: skills,
|
skills: skills,
|
||||||
),
|
),
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
title: "",
|
title: "",
|
||||||
subtitle: "",
|
subtitle: "",
|
||||||
role: "",
|
role: "",
|
||||||
|
role_subtitle: "",
|
||||||
timeframe: "",
|
timeframe: "",
|
||||||
skills: (""),
|
skills: (""),
|
||||||
) = {
|
) = {
|
||||||
|
@ -23,7 +24,10 @@
|
||||||
subtitle: subtitle,
|
subtitle: subtitle,
|
||||||
),
|
),
|
||||||
section_base_item_heading_timeframe(timeframe: timeframe),
|
section_base_item_heading_timeframe(timeframe: timeframe),
|
||||||
section_base_item_heading_role(role: role),
|
section_base_item_heading_role(
|
||||||
|
title: role,
|
||||||
|
subtitle: role_subtitle,
|
||||||
|
),
|
||||||
section_base_item_heading_skills(skills: skills),
|
section_base_item_heading_skills(skills: skills),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,15 @@
|
||||||
#let section_base_item_heading_role(role: "") = text(
|
#let section_base_item_heading_role(
|
||||||
weight: "light",
|
title: "",
|
||||||
size: .9em,
|
subtitle: "",
|
||||||
role
|
) = {
|
||||||
)
|
import "role/main.typ": section_base_item_heading_role_main
|
||||||
|
import "role/subtitle.typ": section_base_item_heading_role_subtitle
|
||||||
|
|
||||||
|
grid(
|
||||||
|
columns: 2,
|
||||||
|
gutter: 1.5em,
|
||||||
|
align: bottom,
|
||||||
|
section_base_item_heading_role_main(title: title),
|
||||||
|
section_base_item_heading_role_subtitle(subtitle: subtitle),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
5
src/section/base/item/heading/role/main.typ
Normal file
5
src/section/base/item/heading/role/main.typ
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
#let section_base_item_heading_role_main(title: "") = text(
|
||||||
|
weight: "light",
|
||||||
|
size: .9em,
|
||||||
|
title
|
||||||
|
)
|
7
src/section/base/item/heading/role/subtitle.typ
Normal file
7
src/section/base/item/heading/role/subtitle.typ
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
#let section_base_item_heading_role_subtitle(
|
||||||
|
subtitle: "",
|
||||||
|
) = text(
|
||||||
|
size: .85em,
|
||||||
|
weight: "extralight",
|
||||||
|
subtitle
|
||||||
|
)
|
|
@ -1,9 +1,13 @@
|
||||||
#let section_base_item_highlight(
|
#let section_base_item_highlight(
|
||||||
highlight: "",
|
highlight: "",
|
||||||
) = par(
|
) = text(
|
||||||
justify: true,
|
size: 0.95em,
|
||||||
text(
|
if type(highlight) == str {
|
||||||
size: 0.95em,
|
par(
|
||||||
|
justify: true,
|
||||||
|
highlight
|
||||||
|
)
|
||||||
|
} else {
|
||||||
highlight
|
highlight
|
||||||
)
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
import "body.typ": section_base_body
|
import "body.typ": section_base_body
|
||||||
|
|
||||||
grid(
|
grid(
|
||||||
gutter: 1.1em,
|
gutter: 0.8em,
|
||||||
section_base_heading(title: title),
|
section_base_heading(title: title),
|
||||||
section_base_body(body),
|
section_base_body(body),
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
section_base_full(
|
section_base_full(
|
||||||
title: "Education",
|
title: "Education",
|
||||||
items: education.map(school => (
|
items: education.map(school => (
|
||||||
title: school.title,
|
title: school.degree,
|
||||||
role: school.degree,
|
role: school.title,
|
||||||
timeframe: school.graduation,
|
timeframe: school.graduation,
|
||||||
skills: (
|
skills: (
|
||||||
school.gpa,
|
school.gpa,
|
||||||
|
|
|
@ -2,5 +2,8 @@
|
||||||
list: (""),
|
list: (""),
|
||||||
) = text(
|
) = text(
|
||||||
weight: "light",
|
weight: "light",
|
||||||
list.join(", "),
|
par(
|
||||||
|
justify: true,
|
||||||
|
list.join(", ")
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#let section_work_experience(
|
#let section_experience(
|
||||||
work_experience: (
|
experience: (
|
||||||
(
|
(
|
||||||
title: "",
|
title: "",
|
||||||
location: "",
|
location: "",
|
||||||
|
@ -13,12 +13,12 @@
|
||||||
import "base/full.typ": section_base_full
|
import "base/full.typ": section_base_full
|
||||||
|
|
||||||
section_base_full(
|
section_base_full(
|
||||||
title: "Work Experience",
|
title: "Experience",
|
||||||
items: work_experience.map(company => (
|
items: experience.map(company => (
|
||||||
title: company.title,
|
title: company.role,
|
||||||
subtitle: company.location,
|
|
||||||
timeframe: company.timeframe,
|
timeframe: company.timeframe,
|
||||||
role: company.role,
|
role: company.title,
|
||||||
|
role_subtitle: company.location,
|
||||||
skills: company.skills,
|
skills: company.skills,
|
||||||
highlights: company.highlights,
|
highlights: company.highlights,
|
||||||
)),
|
)),
|
|
@ -1,5 +1,5 @@
|
||||||
#let section_professional_development(
|
#let section_projects(
|
||||||
professional_development: (
|
projects: (
|
||||||
(
|
(
|
||||||
title: "",
|
title: "",
|
||||||
timeframe: "",
|
timeframe: "",
|
||||||
|
@ -12,8 +12,8 @@
|
||||||
import "base/full.typ": section_base_full
|
import "base/full.typ": section_base_full
|
||||||
|
|
||||||
section_base_full(
|
section_base_full(
|
||||||
title: "Professional Development",
|
title: "Projects",
|
||||||
items: professional_development.map(item => (
|
items: projects.map(item => (
|
||||||
title: item.title,
|
title: item.title,
|
||||||
timeframe: item.timeframe,
|
timeframe: item.timeframe,
|
||||||
role: item.role,
|
role: item.role,
|
Loading…
Add table
Reference in a new issue