= Spruce - A tool for building CVs
:toc:
:toclevels: 1
:toc-title: Contents

== Overview

Spruce is a tool that generates a PDF document from a CV written in JSON.
The PDF generation is completed in two steps:

1. The application parses the JSON document and generates a TEX file using the TEX template files located in the https://codeflow.dananglin.me.uk/apollo/spruce/src/branch/main/internal/cmd/templates/tex[templates] directory.
2. The application then uses ConTeXt to generate the final PDF document from the generated TEX file.

== Requirements

Below is a list of required tools for installing and using spruce.

=== Go

A minimum version of Go 1.21.0 is required for installing spruce.
Please go https://go.dev/dl/[here] to download the latest version.

=== ConTeXt

ConTeXt is required for generating the PDF documentation.
You can go to the https://wiki.contextgarden.net/Installation[installation page] to find out how
to install ConTeXt for your Operating System.

=== The Carlito font (ttf-carlito)

Carlito is a free, metric compatible alternative to the Calibri font from Microsoft and is used when generating the PDF documentation.

For Debian/Ubuntu distributions you can use `apt` to install the font.
[source,console]
----
apt install font-crosextra-carlito
----

For Arch Linux you can use `pacman`.
[source,console]
----
pacman -S ttf-carlito
----

Alternatively you can download the font from https://fontlibrary.org/en/font/carlito[Font Library].

Once Carlito is installed you'll need to update ConTeXt so it can find the font when generating the PDF:
[source,console]
----
OSFONTDIR=/usr/share/fonts
mtxrun --script fonts --reload
----

=== Mage (Optional)

The project includes a https://codeflow.dananglin.me.uk/apollo/spruce/src/branch/main/magefiles/mage.go[magefile] for automating the build and installation of the spruce binary.
With Mage the build information is built into the binary when it is compiled.
You can visit the https://magefile.org[website] for instructions on how to install Mage.

== Installation

=== With Mage

You can install spruce with Mage using the following commands:
[source,console]
----
git clone https://codeflow.dananglin.me.uk/apollo/spruce.git
cd spruce
mage install
----

The default install prefix is set to `/usr/local` so spruce will be installed to `/usr/local/bin/spruce`.
If you don't have sudo privileges or you want to change the install prefix you can set the `SPRUCE_INSTALL_PREFIX` environment variable before installing.
[source,console]
----
SPRUCE_INSTALL_PREFIX=~/.local mage install
----

=== With Go

If your `GOBIN` directory is included in your `PATH` then you can install spruce with Go.

[source,console]
----
git clone https://codeflow.dananglin.me.uk/apollo/spruce.git
cd spruce
go install .
----

=== Verifying the installation

If you have installed spruce with Mage, you can get the build information to confirm that you have installed the correct version.
[source,console]
----
$ spruce version --full
Spruce
  Version: v0.1.0-14-ge503dbf
  Git commit: e503dbf
  Go version: go1.21.0
  Build date: 2023-08-12T13:00:51Z
----

== Generating the example PDF Document

Once you've installed spruce you can generate a PDF from the example CV by running the following command:

[source,console]
----
spruce generate --input example/cv.json
----

This will create a file called `cv.pdf` which you can view in your favourite PDF viewer.

== Inspirations

- https://mszep.github.io/pandoc_resume/[The Markdown Resume:] This project uses ConTeXt and pandoc to convert Markdown based CVs into multiple formats including PDF, HTML and DOCX. This is where I discovered ConTeXt.
- https://github.com/melkir/resume/tree/master[melkir/resume:] This project generates CVs using Go and LaTeX.
