Personal blog of Jared Watkins. Built with Hugo and deployed to jaredwatkins.com.
Install these once on a fresh Mac before anything else.
Hugo Extended is required (the standard build does not support Sass compilation).
brew install hugoVerify you have the extended build:
hugo version
# Should show "extended" in the outputRequired for Hugo's module system.
brew install goRequired by the TeXify3 theme for SCSS compilation.
brew install sass/sass/sassRequired for PostCSS (used by TeXify3).
brew install nodeAfter cloning the repo, run these from the site root:
PostCSS, autoprefixer, and postcss-import are required by the TeXify3 theme's postcss.config.js:
npm installhugo mod downloadThis pulls all Go module dependencies listed in go.mod:
| Module | Purpose |
|---|---|
github.com/michaelneuper/hugo-texify3 |
Active theme (TeXify3) |
github.com/rootwork/hugo-module-gallery-grid |
Gallery grid shortcode (used in Projects) |
hugo server --configDir config-texify3Uses config-texify3/_default/hugo.toml.
.
├── config-texify3/ # Active theme config (TeXify3)
├── archetypes/
│ └── default.md # Hugo archetype with standard frontmatter
├── assets/
│ └── css/
│ └── custom.css # Site-wide custom CSS (loaded via baseof.html asset pipeline)
├── content/
│ ├── _index.md # Homepage body content
│ ├── posts/ # Blog posts
│ ├── projects/ # Project pages (uses gallery shortcode)
│ └── pages/ # Static pages (about, market-info, etc.)
├── layouts-texify3/ # TeXify3 layout overrides (all theme customizations go here)
│ ├── index.html # Homepage: recent posts + categories/tags sidebar
│ ├── _default/
│ │ ├── _markup/
│ │ │ └── render-image.html # Goldmark image hook: resizing + float CSS classes
│ │ ├── baseof.html # Fixes .Site.Author (removed Hugo 0.124); loads custom.css
│ │ ├── list.html # Removes posts-only section filter so all sections work
│ │ └── rss.xml # Fixes .Site.Author in RSS; corrects XML declaration escaping
│ ├── partials/
│ │ └── footer.html # Fixes .Site.Author removed in Hugo 0.124
│ └── shortcodes/
│ ├── email.html # Obfuscated mailto link (base64, JS decode on click)
│ ├── gallery.html # Gallery override: css.Sass + page bundle resource lookup
│ └── linkcard.html # OG preview card fetched at build time
├── static/
│ ├── .well-known/
│ │ └── openpgpkey/ # WKD (Web Key Directory) for PGP key auto-discovery
│ ├── css/ # Static CSS (legacy; prefer assets/css/ for new styles)
│ ├── images/ # Favicons and site icons
│ └── pics/ # Header/background images
├── Templates/
│ └── Post Template.md # Obsidian post template with Hugo frontmatter
├── go.mod # Hugo module dependencies
├── go.sum # Module checksums
└── package.json # Node dependencies (PostCSS, autoprefixer, postcss-import)
TeXify3's templates reference .Site.Author.name and .Site.Author.email which were removed in Hugo 0.124. Overrides in layouts-texify3/ replace all references with .Site.Params.author.
Affected files: baseof.html, footer.html, rss.xml.
Go's html/template engine escapes the <?xml processing instruction to <?xml. Fixed in layouts-texify3/_default/rss.xml by outputting the declaration via safeHTML rather than as literal text.
The TeXify3 config mounts only layouts-texify3/ as the layouts directory — the main layouts/ directory is not mounted. This prevents site-wide partials from other themes from breaking the TeXify3 build.
Shared shortcodes (e.g. email.html, gallery.html, linkcard.html) live in layouts-texify3/shortcodes/ so they are available under this config.
TeXify3's own Sass files use @import which is deprecated in Dart Sass and will be removed in Dart Sass 3.0. These warnings come from the theme source and are not actionable. Suppressed in config via:
ignoreLogs = ['warning-goldmark-raw-html']When Dart Sass 3.0 drops @import support, the theme author will need to update the Sass files.
The hugo-module-gallery-grid shortcode used resources.ToCSS which was removed in Hugo 0.128. Fixed in layouts-texify3/shortcodes/gallery.html by using css.Sass instead.
TeXify3's default list.html filters where .Data.Pages "Type" "posts" which hides all non-blog sections. Overridden in layouts-texify3/_default/list.html to use .Pages directly so projects and other sections render correctly.
TeXify3 loads extra CSS via params.customCSS = []. Rather than listing paths there, custom.css is loaded directly in baseof.html via Hugo's asset pipeline (minified + fingerprinted):
{{ with resources.Get "css/custom.css" | minify | fingerprint }}
<link rel="stylesheet" href="{{ .RelPermalink }}" ...>
{{ end }}| Shortcode | Usage | Notes |
|---|---|---|
{{< email "addr@example.com" "label" >}} |
Obfuscated email link | Base64-encoded, decoded on click via JS |
{{< linkcard "https://..." >}} |
OG preview card | Fetches OG tags at build time; cached by Hugo |
{{< gallery >}} |
Image gallery grid | Page bundle images; requires hugo-module-gallery-grid |
# 1. Install system deps (Hugo Extended, Go, Dart Sass, Node) — see above
# 2. Clone the repo
git clone <repo-url> jaredwatkins-site
cd jaredwatkins-site
# 3. Install Node packages
npm install
# 4. Download Hugo modules
hugo mod download
# 5. Start the preview server
hugo server --configDir config-texify3