first commit

main
Dozens B. McCuzzins 2023-12-05 22:51:32 -07:00
commit bc51d57fe7
8 changed files with 831 additions and 0 deletions

2
.gitignore vendored 100644
View File

@ -0,0 +1,2 @@
resume.toml
resume.pdf

8
LICENSE 100644
View File

@ -0,0 +1,8 @@
POSTCARD LICENSE
Copyright 2023-12-05 christopher.p.brown@gmail.com
You are free to use this software under the following conditions:
1. SEND THE AUTHOR A NICE POSTCARD

46
README.md 100644
View File

@ -0,0 +1,46 @@
# resume.toml
## Movitation
1. Keep your resume in plain, organized, highly-editable text.
2. Separation of concerns: write content first. worry about formatting later.
3. Version control: keep your resume text in a git repository. track your changes. create new branches for large edits or for tailoring your resume while applying to a specific role.
## About
This is a resume builder.
Data is stored in `resume.toml`.
It is validated against jsonresume's [json-schema][4].
And it is extracted as json with [taplo][1].
[1]: https://taplo.tamasfe.dev/
[4]: https://github.com/jsonresume/resume-schema/blob/master/schema.json
It is converted to [groff][2] markup
via [mustache][3] templates,
and then exported to pdf.
[2]: https://www.gnu.org/software/groff/manual/groff.html
[3]: https://mustache.github.io/
## You Will Need
1. GNU groff version 1.23.0: for typesetting and pdf output (with the ms macro package; it *should* be installed anywhere groff is installed)
2. mustache 4.2.0: for templates
3. taplo 0.8.1: toml toolkit. Provides conversion to JSON, formatting, and validation.
4. jq 1.6: json queries
5. (optional) just 1.14.0: just a command runner
## Frequently Questioned Answers
Why TOML?
: Because YAML is a drag.
: Because JSON, while highly serializable, is highly annoying to write with its strict, verbose syntax.
: Because while I love GNU Recfiles, they are just a little too annoying to query

BIN
example.pdf 100644

Binary file not shown.

117
example.toml 100644
View File

@ -0,0 +1,117 @@
"$schema" = "https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json"
[basics]
name = "Richard Hendriks"
label = "Programmer"
image = ""
email = "richard.hendriks@mail.com"
phone = "(912) 555-4321"
url = "http://richardhendricks.example.com"
summary = 'Richard hails from Tulsa. He has earned degrees from the University of Oklahoma and Stanford. (Go Sooners and Cardinal!) Before starting Pied Piper, he worked for Hooli as a part time software developer. While his work focuses on applied information theory, mostly optimizing lossless compression schema of both the length-limited and adaptive variants, his non-work interests range widely, everything from quantum computing to chaos theory. He could tell you about it, but THAT would NOT be a "length-limited" conversation!'
[basics.location]
address = "2712 Broadway St"
postalCode = "CA 94115"
city = "San Francisco"
countryCode = "US"
region = "California"
[[basics.profiles]]
network = "Twitter"
username = "neutralthoughts"
url = ""
[[basics.profiles]]
network = "SoundCloud"
username = "dandymusicnl"
url = "https://soundcloud.example.com/dandymusicnl"
[[work]]
name = "Pied Piper"
location = "Palo Alto, CA"
description = "Awesome compression company"
position = "CEO/President"
url = "http://piedpiper.example.com"
startDate = "2013-12-01"
endDate = "2014-12-01"
summary = "Pied Piper is a multi-platform technology based on a proprietary universal compression algorithm that has consistently fielded high Weisman Scores™ that are not merely competitive, but approach the theoretical limit of lossless compression."
highlights = [
"Build an algorithm for artist to detect if their music was violating copy right infringement laws",
"Successfully won Techcrunch Disrupt",
"Optimized an algorithm that holds the current world record for Weisman Scores",
]
[[volunteer]]
organization = "CoderDojo"
position = "Teacher"
url = "http://coderdojo.example.com/"
startDate = "2012-01-01"
endDate = "2013-01-01"
summary = "Global movement of free coding clubs for young people."
highlights = ["Awarded 'Teacher of the Month'"]
[[education]]
institution = "University of Oklahoma"
url = "https://www.ou.edu/"
area = "Information Technology"
studyType = "Bachelor"
startDate = "2011-06-01"
endDate = "2014-01-01"
score = "4.0"
courses = ["DB1101 - Basic SQL", "CS2011 - Java Introduction"]
[[awards]]
title = "Digital Compression Pioneer Award"
date = "2014-11-01"
awarder = "Techcrunch"
summary = "There is no spoon."
[[publications]]
name = "Video compression for 3d media"
publisher = "Hooli"
releaseDate = "2014-10-01"
url = "http://en.wikipedia.org/wiki/Silicon_Valley_(TV_series)"
summary = "Innovative middle-out compression algorithm that changes the way we store data."
[[skills]]
name = "Web Development"
level = "Master"
keywords = ["HTML", "CSS", "Javascript"]
[[skills]]
name = "Compression"
level = "Master"
keywords = ["Mpeg", "MP4", "GIF"]
[[languages]]
language = "English"
fluency = "Native speaker"
[[interests]]
name = "Wildlife"
keywords = ["Ferrets", "Unicorns"]
[[references]]
name = "Erlich Bachman"
reference = "It is my pleasure to recommend Richard, his performance working as a consultant for Main St. Company proved that he will be a valuable addition to any company."
[[projects]]
name = "Miss Direction"
description = "A mapping engine that misguides you"
highlights = [
"Won award at AIHacks 2016",
"Built by all women team of newbie programmers",
"Using modern technologies such as GoogleMaps, Chrome Extension and Javascript",
]
keywords = ["GoogleMaps", "Chrome Extension", "Javascript"]
startDate = "2016-08-24"
endDate = "2016-08-24"
url = "missdirection.example.com"
roles = ["Team lead", "Designer"]
entity = "Smoogle"
type = "application"
[meta]
canonical = "https://raw.githubusercontent.com/jsonresume/resume-schema/master/sample.resume.json"
version = "v1.0.0"
lastModified = "2017-12-24T15:53:00"

30
justfile 100644
View File

@ -0,0 +1,30 @@
# show all recipes
default:
just --list --unsorted
# convert to json
json:
taplo get -f resume.toml -o json
# format toml
fmt:
taplo fmt resume.toml
# validate toml
validate:
taplo lint resume.toml
# make groff
groff:
just json | mustache - resume.template
# make pdf
pdf:
just groff | groff -ms -t -Tpdf > resume.pdf
# example
example:
taplo get -f example.toml -o json \
| mustache - resume.template \
| groff -ms -t -Tpdf \
> example.pdf

130
resume.template 100644
View File

@ -0,0 +1,130 @@
.EH ''''
.OH ''''
.nr HM .5i
.nr FM .5i
.TS H
center tab(;);
cbx s
c s
c s
cfI s.
.TH
./" ============
./" == HEADER ==
./" ============
{{#basics}}
{{name}}
{{email}} - {{phone}}
{{#profiles}} {{{url}}} {{/profiles}}
.sp 1
T{
{{{summary}}}
T}
{{/basics}}
.sp 1
.
.
.
./" ==========
./" == WORK ==
./" ==========
.T&
lbv1 s
- -
{{#work}}
lb r
l r
{{#highlights}}
l s
{{/highlights}}
{{/work}}
l l.
Experience
.ds
{{#work}}
{{{name}}};{{{location}}}
{{{position}}};{{startDate}}-{{endDate}}
{{#highlights}}
T{
.IP \(bu
{{{.}}}
T}
{{/highlights}}
.de
.sp 1
{{/work}}
;
.
.
.
.\" ============
.\" == SKILLS ==
.\" ============
.T&
lb s
- -
{{#skills}}
l s
{{/skills}}
l s.
Skills
{{#skills}}
{{{name}}}: {{#keywords}} {{{.}}} {{/keywords}}
{{/skills}}
;
.
.
.
.\" ============
.\" == AWARDS ==
.\" ============
.T&
lb s
- -
{{#awards}}
l r
{{/awards}}
l r.
Awards
{{#awards}}
{{title}}, {{awarder}};{{date}}
{{/awards}}
;
.
.
.
.\" ===============
.\" == EDUCATION ==
.\" ===============
.T&
lb s
- -
{{#education}}
l r
{{/education}}
l l.
Education
{{#education}}
{{institution}}, {{area}};{{startDate}}-{{endDate}}
{{/education}}
;
.
.
.
.\" ===============
.\" == INTERESTS ==
.\" ===============
.T&
lb s
- -
{{#interests}}
l s
{{/interests}}
l s.
Interests
{{#interests}}
{{name}}: {{#keywords}} {{{.}}} {{/keywords}}
{{/interests}}
;
.TE

498
schema.json 100644
View File

@ -0,0 +1,498 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"additionalProperties": false,
"definitions": {
"iso8601": {
"type": "string",
"description": "Similar to the standard date type, but each section after the year is optional. e.g. 2014-06-29 or 2023-04",
"pattern": "^([1-2][0-9]{3}-[0-1][0-9]-[0-3][0-9]|[1-2][0-9]{3}-[0-1][0-9]|[1-2][0-9]{3})$"
}
},
"properties": {
"$schema": {
"type": "string",
"description": "link to the version of the schema that can validate the resume",
"format": "uri"
},
"basics": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string"
},
"label": {
"type": "string",
"description": "e.g. Web Developer"
},
"image": {
"type": "string",
"description": "URL (as per RFC 3986) to a image in JPEG or PNG format"
},
"email": {
"type": "string",
"description": "e.g. thomas@gmail.com",
"format": "email"
},
"phone": {
"type": "string",
"description": "Phone numbers are stored as strings so use any format you like, e.g. 712-117-2923"
},
"url": {
"type": "string",
"description": "URL (as per RFC 3986) to your website, e.g. personal homepage",
"format": "uri"
},
"summary": {
"type": "string",
"description": "Write a short 2-3 sentence biography about yourself"
},
"location": {
"type": "object",
"additionalProperties": true,
"properties": {
"address": {
"type": "string",
"description": "To add multiple address lines, use \n. For example, 1234 Glücklichkeit Straße\nHinterhaus 5. Etage li."
},
"postalCode": {
"type": "string"
},
"city": {
"type": "string"
},
"countryCode": {
"type": "string",
"description": "code as per ISO-3166-1 ALPHA-2, e.g. US, AU, IN"
},
"region": {
"type": "string",
"description": "The general region where you live. Can be a US state, or a province, for instance."
}
}
},
"profiles": {
"type": "array",
"description": "Specify any number of social networks that you participate in",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"network": {
"type": "string",
"description": "e.g. Facebook or Twitter"
},
"username": {
"type": "string",
"description": "e.g. neutralthoughts"
},
"url": {
"type": "string",
"description": "e.g. http://twitter.example.com/neutralthoughts",
"format": "uri"
}
}
}
}
}
},
"work": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "e.g. Facebook"
},
"location": {
"type": "string",
"description": "e.g. Menlo Park, CA"
},
"description": {
"type": "string",
"description": "e.g. Social Media Company"
},
"position": {
"type": "string",
"description": "e.g. Software Engineer"
},
"url": {
"type": "string",
"description": "e.g. http://facebook.example.com",
"format": "uri"
},
"startDate": {
"$ref": "#/definitions/iso8601"
},
"endDate": {
"$ref": "#/definitions/iso8601"
},
"summary": {
"type": "string",
"description": "Give an overview of your responsibilities at the company"
},
"highlights": {
"type": "array",
"description": "Specify multiple accomplishments",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. Increased profits by 20% from 2011-2012 through viral advertising"
}
}
}
}
},
"volunteer": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"organization": {
"type": "string",
"description": "e.g. Facebook"
},
"position": {
"type": "string",
"description": "e.g. Software Engineer"
},
"url": {
"type": "string",
"description": "e.g. http://facebook.example.com",
"format": "uri"
},
"startDate": {
"$ref": "#/definitions/iso8601"
},
"endDate": {
"$ref": "#/definitions/iso8601"
},
"summary": {
"type": "string",
"description": "Give an overview of your responsibilities at the company"
},
"highlights": {
"type": "array",
"description": "Specify accomplishments and achievements",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. Increased profits by 20% from 2011-2012 through viral advertising"
}
}
}
}
},
"education": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"institution": {
"type": "string",
"description": "e.g. Massachusetts Institute of Technology"
},
"url": {
"type": "string",
"description": "e.g. http://facebook.example.com",
"format": "uri"
},
"area": {
"type": "string",
"description": "e.g. Arts"
},
"studyType": {
"type": "string",
"description": "e.g. Bachelor"
},
"startDate": {
"$ref": "#/definitions/iso8601"
},
"endDate": {
"$ref": "#/definitions/iso8601"
},
"score": {
"type": "string",
"description": "grade point average, e.g. 3.67/4.0"
},
"courses": {
"type": "array",
"description": "List notable courses/subjects",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. H1302 - Introduction to American history"
}
}
}
}
},
"awards": {
"type": "array",
"description": "Specify any awards you have received throughout your professional career",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"title": {
"type": "string",
"description": "e.g. One of the 100 greatest minds of the century"
},
"date": {
"$ref": "#/definitions/iso8601"
},
"awarder": {
"type": "string",
"description": "e.g. Time Magazine"
},
"summary": {
"type": "string",
"description": "e.g. Received for my work with Quantum Physics"
}
}
}
},
"certificates": {
"type": "array",
"description": "Specify any certificates you have received throughout your professional career",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "e.g. Certified Kubernetes Administrator"
},
"date": {
"$ref": "#/definitions/iso8601"
},
"url": {
"type": "string",
"description": "e.g. http://example.com",
"format": "uri"
},
"issuer": {
"type": "string",
"description": "e.g. CNCF"
}
}
}
},
"publications": {
"type": "array",
"description": "Specify your publications through your career",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "e.g. The World Wide Web"
},
"publisher": {
"type": "string",
"description": "e.g. IEEE, Computer Magazine"
},
"releaseDate": {
"$ref": "#/definitions/iso8601"
},
"url": {
"type": "string",
"description": "e.g. http://www.computer.org.example.com/csdl/mags/co/1996/10/rx069-abs.html",
"format": "uri"
},
"summary": {
"type": "string",
"description": "Short summary of publication. e.g. Discussion of the World Wide Web, HTTP, HTML."
}
}
}
},
"skills": {
"type": "array",
"description": "List out your professional skill-set",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "e.g. Web Development"
},
"level": {
"type": "string",
"description": "e.g. Master"
},
"keywords": {
"type": "array",
"description": "List some keywords pertaining to this skill",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. HTML"
}
}
}
}
},
"languages": {
"type": "array",
"description": "List any other languages you speak",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"language": {
"type": "string",
"description": "e.g. English, Spanish"
},
"fluency": {
"type": "string",
"description": "e.g. Fluent, Beginner"
}
}
}
},
"interests": {
"type": "array",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "e.g. Philosophy"
},
"keywords": {
"type": "array",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. Friedrich Nietzsche"
}
}
}
}
},
"references": {
"type": "array",
"description": "List references you have received",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "e.g. Timothy Cook"
},
"reference": {
"type": "string",
"description": "e.g. Joe blogs was a great employee, who turned up to work at least once a week. He exceeded my expectations when it came to doing nothing."
}
}
}
},
"projects": {
"type": "array",
"description": "Specify career projects",
"additionalItems": false,
"items": {
"type": "object",
"additionalProperties": true,
"properties": {
"name": {
"type": "string",
"description": "e.g. The World Wide Web"
},
"description": {
"type": "string",
"description": "Short summary of project. e.g. Collated works of 2017."
},
"highlights": {
"type": "array",
"description": "Specify multiple features",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. Directs you close but not quite there"
}
},
"keywords": {
"type": "array",
"description": "Specify special elements involved",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. AngularJS"
}
},
"startDate": {
"$ref": "#/definitions/iso8601"
},
"endDate": {
"$ref": "#/definitions/iso8601"
},
"url": {
"type": "string",
"format": "uri",
"description": "e.g. http://www.computer.org/csdl/mags/co/1996/10/rx069-abs.html"
},
"roles": {
"type": "array",
"description": "Specify your role on this project or in company",
"additionalItems": false,
"items": {
"type": "string",
"description": "e.g. Team Lead, Speaker, Writer"
}
},
"entity": {
"type": "string",
"description": "Specify the relevant company/entity affiliations e.g. 'greenpeace', 'corporationXYZ'"
},
"type": {
"type": "string",
"description": " e.g. 'volunteering', 'presentation', 'talk', 'application', 'conference'"
}
}
}
},
"meta": {
"type": "object",
"description": "The schema version and any other tooling configuration lives here",
"additionalProperties": true,
"properties": {
"canonical": {
"type": "string",
"description": "URL (as per RFC 3986) to latest version of this document",
"format": "uri"
},
"version": {
"type": "string",
"description": "A version field which follows semver - e.g. v1.0.0"
},
"lastModified": {
"type": "string",
"description": "Using ISO 8601 with YYYY-MM-DDThh:mm:ss"
}
}
}
},
"title": "Resume Schema",
"type": "object"
}