Ignacio Ballesteros d913138726 fix(ox-hugo): serve gitignored content and static assets, fix figure shortcode order
- glob.ts: add optional respectGitignore param (default true) so callers
  can opt out of gitignore filtering for generated directories
- build.ts: pass respectGitignore=false when globbing content/ so
  gitignored-but-generated markdown files are always picked up
- static.ts: copy top-level static/ → output/ root with gitignore disabled,
  mirroring Hugo's convention so ox-hugo images at static/ox-hugo/* are
  served at /ox-hugo/* as expected by the exported markdown src paths
- oxhugofm.ts: run replaceFigureWithMdImg before removeHugoShortcode so the
  precise figure regex sees the intact shortcode before the generic {{.*}}
  stripper destroys it; also upgrade figureTagRegex to figureShortcodeRegex
  which matches the full shortcode form ox-hugo actually emits
2026-02-20 11:11:42 +01:00
2023-12-11 15:34:21 -08:00
2026-01-08 09:04:56 +08:00
2026-02-20 10:51:05 +01:00
2026-02-20 10:51:05 +01:00
2023-08-02 20:59:56 -07:00
2025-05-28 16:20:59 -07:00
2023-08-20 08:57:56 -07:00
2023-08-07 23:57:24 -07:00
2023-07-22 17:27:41 -07:00
2025-04-17 19:45:17 -07:00
2021-07-18 09:35:42 -04:00
2025-04-17 19:45:17 -07:00

Quartz v4 — org-roam edition

"[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important." — Richard Hamming

Quartz is a set of tools that helps you publish your digital garden and notes as a website for free.

This fork adds first-class support for org-roam notes via ox-hugo.

🔗 Upstream documentation: https://quartz.jzhao.xyz/

Join the Discord Community

Quick Start

Prerequisites

This project uses Nix. Enter the development shell, which provides Node.js 22, Elixir, and Emacs with ox-hugo:

nix develop

All commands below must be run inside this shell.

npm install

Building from org-roam notes

Your org-roam notes live in a separate directory. Point NOTES_DIR at it:

# Export notes to content/ and build the site
NOTES_DIR=/path/to/notes npm run build:notes

# Export, build, and serve with hot reload
NOTES_DIR=/path/to/notes npm run serve:notes

# Export only (wipes content/ and re-exports all .org files)
NOTES_DIR=/path/to/notes npm run export

The export pipeline runs in four phases:

  1. Wipe content/ clean
  2. Export every .org file via emacs --batch + ox-hugo → Markdown
  3. Transform — post-process the Markdown (citation resolution, etc.)
  4. Index — generate a fallback index.md if none was exported

org-citar references ([cite:@key]) are resolved to clickable Zotero links. With Zotero running and the Better BibTeX plugin installed, no extra configuration is needed — the pipeline detects it automatically and links directly to the PDF in your library.

# Use a local .bib file as fallback when Zotero is not running
BIBTEX_FILE=/path/to/refs.bib NOTES_DIR=/path/to/notes npm run export

# Control warning verbosity for unresolved keys
CITATION_MODE=strict NOTES_DIR=/path/to/notes npm run export
Env var Default Purpose
BIBTEX_FILE Path to .bib file for citation fallback
ZOTERO_URL http://localhost:23119 Zotero Better BibTeX base URL
CITATION_MODE warn silent / warn / strict

Building without org-roam notes

If you manage content/ directly with Markdown files:

# Build the site
npx quartz build

# Build and serve with hot reload
npx quartz build --serve

The site is generated in public/. When serving, visit http://localhost:8080.

Development

npm run check    # type check + format check
npm run format   # auto-format with Prettier
npm run test     # run tests

Sponsors

Description
🌱 a fast, batteries-included static-site generator that transforms Markdown content into fully functional websites
Readme 2.7 GiB
Languages
TypeScript 85.1%
SCSS 8.3%
JavaScript 4.7%
CSS 1.8%