Compare commits

...

12 commits

18 changed files with 113 additions and 63 deletions

View file

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

View file

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

View file

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

View file

@ -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,
) )
) )
) )

View file

@ -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),
) )
} }

View file

@ -9,7 +9,7 @@
grid( grid(
columns: 4, columns: 4,
rows: 1, rows: 1,
gutter: 4em, gutter: 3em,
email, email,
phone, phone,
location, location,

View file

@ -5,6 +5,7 @@
title: "", title: "",
subtitle: "", subtitle: "",
role: "", role: "",
role_subtitle: "",
timeframe: "", timeframe: "",
skills: (""), skills: (""),
highlights: (""), highlights: (""),

View file

@ -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,
), ),

View file

@ -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),
) )
} }

View file

@ -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),
)
}

View file

@ -0,0 +1,5 @@
#let section_base_item_heading_role_main(title: "") = text(
weight: "light",
size: .9em,
title
)

View file

@ -0,0 +1,7 @@
#let section_base_item_heading_role_subtitle(
subtitle: "",
) = text(
size: .85em,
weight: "extralight",
subtitle
)

View file

@ -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
) }
) )

View file

@ -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),
) )

View file

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

View file

@ -2,5 +2,8 @@
list: (""), list: (""),
) = text( ) = text(
weight: "light", weight: "light",
list.join(", "), par(
justify: true,
list.join(", ")
)
) )

View file

@ -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,
)), )),

View file

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