code.pablomurad.com

patchwork

Publishes the revisions of your pages as a feed, with notes and readable diffs, written in Go

internal/config/example.yaml raw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# patchwork.yaml
# Relative paths resolve against this file's directory.

site:
  title: My Garden
  # Public address of the site. Feed links and ids are built from it.
  base_url: https://example.com
  timezone: UTC                  # calendar dates are computed in this zone
  author: Your Name
  # The "domain,year" part of feed entry ids (tag: URIs). Pick it once:
  # changing it later makes every feed reader see all entries as new.
  tag_authority: "example.com,2026"
  # Where the host site shows a page, one version, and the history.
  page_url: "/{slug}"
  version_url: "/{slug}/v/{n}"
  history_url: "/{slug}/history"
  # Public paths where the host serves Patchwork's feeds.
  feeds:
    atom: /revisions.atom
    json: /revisions.json
    page_atom: "/{slug}/revisions.atom"
    page_json: "/{slug}/revisions.json"

source:
  mode: folder
  path: ./content
  # "*.md" matches the top level only; "**/*.md" matches at any depth.
  include: ["**/*.md", "**/*.markdown"]
  # Matched against the file name: hidden files, editor and upload leftovers.
  exclude: [".*", "*~", "*.tmp", "*.filepart", "*.part", "*.swp"]
  # path: slugify every directory and the file name ("notes/my-note").
  # datestrip-slugify: file name only, minus a leading YYYY-MM-DD date.
  slug: path

frontmatter:
  note_key: revision            # a new note here publishes a revision
  kind_key: revision_kind       # correction | expansion | position | reorganization
  maturity_key: maturity        # seed | sprout | bloom
  date_key: date                # original publication date, if present
  # Frontmatter keys readers see. Changing them counts as a content change;
  # every other key is ignored.
  diff_keys: [title, summary, tags]

publish:
  # An upload with no new note this soon after a publish is folded into
  # that revision (the typo you spot right after uploading). 0 disables it.
  fold_window: 20m

watch:
  debounce: 3s                  # wait for a burst of file events to settle
  poll: 60s                     # full rescan, in case file events are missed

# Keep the database on a local disk. Network shares break SQLite locking.
# Omit to use the user cache directory.
# db: /var/lib/patchwork/patchwork.db

http:
  addr: 127.0.0.1:8080

feeds:
  limit: 50                     # entries per feed
  excerpt_blocks: 6             # changed blocks shown per entry