alexkarle.com

Source for alexkarle.com
git clone git://git.alexkarle.com/alexkarle.com.git
Log | Files | Refs | README | LICENSE

mandoc-resume.txt (4580B) [raw]


      1 # Typesetting a Resume with `mandoc(1)`
      2 
      3 _Published: May 18, 2022_
      4 
      5 ## History
      6 
      7 My first real resume was written freshman year of college in a haste
      8 because a friend told me his dad's software company was looking to
      9 hire interns. It was a scraped together Word doc that had typos in
     10 the headers because ALLCAPSWORDS were considered acronyms and are
     11 not subject to the red squiggly spell check. I didn't notice until
     12 someone pointed it out to me after sending it out. I didn't get the
     13 job.
     14 
     15 Updating a resume was always way low on my todo list--the kind of
     16 thing that didn't happen until it was needed. So this first resume
     17 lived on for years in a similar format. Needless to say, I was never
     18 really proud of how my resume looked.
     19 
     20 Towards the end of college, I got really into version controlling
     21 my written assignments. `git` for code wasn't enough--I wanted to
     22 know, without another proofread, that I hadn't fat fingered a typo
     23 into my essay since the last time I proofread it. So I started
     24 writing my non-technical essays in `LaTeX`, which fit well into my
     25 `git` workflow.
     26 
     27 I decided somewhere around then that I would one day rewrite my
     28 resume in `LaTeX`; however, there was no need at the time, since I
     29 had already accepted a return offer to MathWorks. So I put it on
     30 hold.
     31 
     32 As I moved to Linux and OpenBSD on personal computers, the desire
     33 to leave `docx` behind became even greater; but again, updating a
     34 resume just wasn't fun.  I had better things to do, like write
     35 [Gopher clients](https://sr.ht/~akarle/gc/) using `nc(1)` and
     36 `awk(1)` or [install Plan 9](/blog/exploring-plan9.html).
     37 
     38 At this point, it's been years since I've touched `LaTeX`. I don't
     39 have a compiler installed, nor do I remember the Vim setup I had
     40 going that made for a reasonably fast preview cycle. Could I find
     41 it in my [dotfile history](https://sr.ht/~akarle/dotfiles/)? Of
     42 course (`git` for everything!). But the effort to port it kept
     43 looking less appealing until a few months ago when it occurred to
     44 me: _what if I could write a reasonable looking resume in `mdoc(7)`_?
     45 I [had the experience](/blog/my-old-man.html), and UNIX has a long
     46 history of typesetting. It felt like the perfect blend of:
     47 
     48 - Easily versionable
     49 - Plaintext / archivable
     50 - Exportable to PDF
     51 - (IMHO) The right amount of nerdy
     52 
     53 So I set out to do it.
     54 
     55 ## The Results
     56 
     57 See for yourself:
     58 
     59 	$ curl -sS https://alexkarle.com/resume.7 | mandoc -l
     60 
     61 There's of course a [PDF version](https://alexkarle.com/akarle.pdf)
     62 too.
     63 
     64 Overall, I'm really happy with how it turned out!
     65 
     66 ## Lessons Learned
     67 
     68 Originally I thought I'd try to replicate a more traditional resume.
     69 Or at least hide the fact that it's typeset using a man-page tool.
     70 
     71 I discovered pretty quickly though that `mandoc(1)` is focused on
     72 `man` pages and less suited for general typesetting. Reading the
     73 [`roff(7)` man page](https://man.openbsd.org/roff.7#COMPATIBILITY),
     74 things like setting font, margins, etc are pretty limited (which
     75 makes total sense if targeting a terminal more than a printer).
     76 
     77 I realized my options were to switch to `groff(1)`, which looks to
     78 be a more fully featured typesetting tool, or double down on the
     79 man-page appearance.
     80 
     81 For now, I've chosen the latter, mostly because I think it's a cute
     82 hat tip to one of my favorite tools--`man(1)`.
     83 
     84 In lieu of margin/spacing/font adjustments I was able to keep a
     85 relatively compact feeling by:
     86 
     87 - Using `.br` (line breaks) instead of `.Pp` (new paragraphs)
     88 - Using `.Sy` (bold font) instead of `.Ss` (subsections) in WORK EXPERIENCE
     89 - Creating a two column work experience layout using a `-tag` list
     90   (importantly, the list items themselves can be lists for job description!)
     91 
     92 	.Bl -tag -width "YYYY-MM - YYYY-MM" -compact
     93 	.It 2021-10 - Present
     94 	.Em Senior Software Engineer
     95 	.Bl -dash -compact
     96 	.It
     97 	Wrote custom CLI tooling for bug triage and local development
     98 	...
     99 	.El
    100 	.El
    101 
    102 ## Conclusion
    103 
    104 For the first time maybe ever, I'm happy with how my resume looks.
    105 I had a blast learning some fine-grained `roff(7)` commands that
    106 don't show up in regular man-pages even though I removed them in
    107 favor of the classic `NAME`, `SYNOPSIS`, ... `SEE ALSO` layout.
    108 
    109 I am not a lawyer, so I don't know for sure if traditional software
    110 licenses apply to `mdoc(7)` resumes, but the MIT license does mention
    111 "associated documentation" so I put one in the comments of the
    112 source.
    113 
    114 If you like how it looks, feel free to remix it and make it your
    115 own!  If you do, I'd appreciate if you keep the link to this post
    116 and license in the header, but more importantly, I'd love to see
    117 it! My email is in the source :)