- LaTeX Distribution: TeX Live (recommended) or MiKTeX
- LaTeX Engine: LuaLaTeX (required for fontspec and custom fonts)
- Command Runner:
just(optional, but very convenient)
The following LaTeX packages are required and should be included in your LaTeX distribution:
Core Packages:
article- Base document classfontspec- Font selection for XeLaTeX/LuaLaTeXgeometry- Page layout and marginsxcolor- Color support (withdvipsnamesoption)graphicx- Graphics inclusion
Formatting Packages:
parskip- Paragraph spacingarray- Extended array and tabular environmentsifthen- Conditional commandschangepage- Page layout adjustmentsenumitem- Customize list environmentstitlesec- Section title formattingtextpos- Absolute positioning (withabsoluteoption)fancyhdr- Custom headers and footershyperref- Hyperlinks (withhidelinksoption)tcolorbox- Colored and framed boxes
Utility Packages:
lipsum- Dummy text (for testing)
Note: Some of these may be unused remnants of previous versions.
The template currently requires the following variable fonts (TTF format) in the
common/fonts/ directory:
- Merriweather - Used for resume
- Montserrat - Used for cover letter
Font files should be placed in common/fonts/. Download them manually or use
the /common/fonts/getfont.sh script to fetch them automatically from the Google
Fonts repository.
Example:
cd common/fonts
./getfont.sh merriweather montserratNote: If you download the fonts manually, they may have different file names
than those in the resume.cls and cover.cls files. Adjust as needed.
Create a new font called primaryfont:
\createfont{primaryfont}{Merriweather[opsz,wdth,wght]}This will create the following definitions that can be used throughout the document:
- primaryfontextralight
- primaryfontlight
- primaryfontmedium
- primaryfontbold
- primaryfontextrabold
Then set the main font to and main sans font:
\setmainfont[Color=primary, Path = \@fontpath,RawFeature={+axis={wght=\@fontweightlight}},Renderer=Harfbuzz]{\@primaryfontfile}
\setsansfont[Path=\@fontpath,RawFeature={+axis={wght=\@fontweightlight}},Renderer=Harfbuzz]{\@primaryfontfile}Adjust or add weights as desired in common/fonts.tex.
If you want to include a signature in the cover letter, add a signature.png
file to the common/ directory. It will be displayed at the bottom of the cover
letter. Delete the dummy signature file if you don't want to include one.
- Ensure LuaLaTeX is available:
lualatex --version - Install any missing LaTeX packages
- Download and place the required fonts in
common/fonts/ - Run
justto compile both documentsjust covercompiles only the cover letterjust resumecompiles only the resumejust cleanremoves all binaries, logs, and pdf filesjust showopens resume and cover.just noshowcloses resume and cover.just archive app_namecreates an archive of the current componentsjust extract app_nameextracts an archive
Note: I use Okular for viewing PDFs. It's great
for this purpose because it will hot reload after compiling the latex. Adjust
the make show directive if you use something else.
Keep template-level improvements on main/master, then archive each application. This
avoids maintaining long-lived branches per company.
For each job application:
- (Optional) Start from a prior application archive:
- Extract everything:
./archive.sh -x <archive-name> - Extract only specific sections:
./archive.sh -xrl <archive-name>(resume + cover letter)
- Extract everything:
- Add or update the job posting in
job-desc. - Update shared info files:
common/info/personal.tex- personal informationcommon/info/company.tex- company and role information
- Tailor resume and cover components as needed:
resume/components/*cover/components/*
- Compile (
just) and submit - Archive the final application state:
./archive.sh -c <archive-name>- or
just archive <archive-name>
Use extraction flags to pull only what you want from an archive:
# Extract all sections (default with -x)
./archive.sh -x acme_2026
# Extract only resume + cover letter components
./archive.sh -xrl acme_2026
# Extract only shared info
./archive.sh -xi acme_2026
# Extract only job description
./archive.sh -xj acme_2026This lets you reuse targeted parts without branching for every application.