pages.adoc = \
src/content/en/about.adoc \
src/content/eo/pri.adoc \
src/content/es/acerca.adoc \
src/content/fr/a-propos.adoc \
src/content/pt/sobre.adoc \
homes.adoc = \
src/content/en/index.adoc \
src/content/eo/index.adoc \
src/content/es/index.adoc \
src/content/fr/index.adoc \
src/content/pt/index.adoc \
articles.adoc = \
src/content/en/blog/2018/07/17/guix-nixos.adoc \
src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc \
src/content/en/blog/2018/12/21/ytdl-subs.adoc \
src/content/en/blog/2019/06/02/nixos-stateless-workstation.adoc \
src/content/en/blog/2020/08/10/guix-srht.adoc \
src/content/en/blog/2020/08/31/database-i-wish-i-had.adoc \
src/content/en/blog/2020/10/05/cargo2nix.adoc \
src/content/en/blog/2020/10/05/swift2nix.adoc \
src/content/en/blog/2020/10/19/feature-flags.adoc \
src/content/en/blog/2020/10/20/wrong-interviewing.adoc \
src/content/en/blog/2020/11/07/diy-bugs.adoc \
src/content/en/blog/2020/11/08/paradigm-shift-review.adoc \
src/content/en/blog/2020/11/12/database-parsers-trees.adoc \
src/content/en/blog/2020/11/14/local-first-review.adoc \
src/content/en/blog/2021/01/26/remembering-ann.adoc \
src/content/en/blog/2021/02/17/fallible.adoc \
src/content/en/blog/2021/04/29/relational-review.adoc \
src/content/en/pastebin/2016/04/05/rpn.adoc \
src/content/en/pastebin/2018/07/11/nix-pinning.adoc \
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.adoc \
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.adoc \
src/content/en/pastebin/2018/07/13/guixbuilder.adoc \
src/content/en/pastebin/2018/07/13/nix-strpad.adoc \
src/content/en/pastebin/2018/07/25/nix-exps.adoc \
src/content/en/pastebin/2018/07/25/nix-showdrv.adoc \
src/content/en/pastebin/2019/06/08/inconsistent-hash.adoc \
src/content/en/pastebin/2019/12/29/raku-tuple-type.adoc \
src/content/en/pastebin/2020/01/04/guix-import-failure.adoc \
src/content/en/pastebin/2020/02/14/guix-shebang.adoc \
src/content/en/pastebin/2020/11/27/guix-build-local.adoc \
src/content/en/pastebin/2020/12/15/guix-pack-fail.adoc \
src/content/en/pastebin/2021/04/03/naive-slugify-js.adoc \
src/content/en/pastebin/2021/06/08/reading-session-pt1.adoc \
src/content/en/pastebin/2021/06/22/curl-wget.adoc \
src/content/en/pastebin/2021/08/11/h1-spacing.adoc \
src/content/en/pastebin/2021/09/02/sicp-3-19.adoc \
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.adoc \
src/content/en/pastebin/2022/07/14/git-cleanup.adoc \
src/content/en/pastebin/2023/07/22/funcallable-amop.adoc \
src/content/en/podcast/2020/12/19/test-entry.adoc \
src/content/en/screencast/2021/02/07/autoqemu.adoc \
src/content/en/slide/2020/10/19/feature-flags.adoc \
src/content/en/slide/2020/11/14/local-first-hype.adoc \
src/content/en/til/2020/08/12/filename-timestamp.adoc \
src/content/en/til/2020/08/13/code-jekyll.adoc \
src/content/en/til/2020/08/14/browse-git.adoc \
src/content/en/til/2020/08/16/git-search.adoc \
src/content/en/til/2020/08/28/grep-online.adoc \
src/content/en/til/2020/09/04/cli-email-fun-profit.adoc \
src/content/en/til/2020/09/05/oldschool-pr.adoc \
src/content/en/til/2020/10/11/search-git-history.adoc \
src/content/en/til/2020/11/08/find-broken-symlink.adoc \
src/content/en/til/2020/11/12/diy-nix-bash-ci.adoc \
src/content/en/til/2020/11/12/git-bisect-automation.adoc \
src/content/en/til/2020/11/12/useful-bashvars.adoc \
src/content/en/til/2020/11/14/gpodder-media.adoc \
src/content/en/til/2020/11/30/git-notes-ci.adoc \
src/content/en/til/2020/12/15/shellcheck-repo.adoc \
src/content/en/til/2020/12/29/svg.adoc \
src/content/en/til/2021/01/12/curl-awk-emails.adoc \
src/content/en/til/2021/01/17/posix-shebang.adoc \
src/content/en/til/2021/04/24/cl-generic-precedence.adoc \
src/content/en/til/2021/04/24/clojure-autocurry.adoc \
src/content/en/til/2021/04/24/scm-nif.adoc \
src/content/en/til/2021/07/23/git-tls-gpg.adoc \
src/content/en/til/2021/08/11/js-bigint-reviver.adoc \
src/content/en/til/2026/09/05/multiline-sh-comments.adoc \
src/content/pt/hea/2020/08/12/arquivo-datado.adoc \
slides.eslaides = \
src/content/en/slide/2020/10/19/feature-flags.eslaides \
src/content/en/slide/2020/11/14/local-first-hype.eslaides \
categories.adoc = \
src/content/en/blog/categories.adoc \
src/content/en/pastebin/categories.adoc \
src/content/en/podcast/categories.adoc \
src/content/en/screencast/categories.adoc \
src/content/en/slide/categories.adoc \
src/content/en/til/categories.adoc \
src/content/pt/hea/categorias.adoc \
indexes.adoc = \
src/content/en/blog/index.adoc \
src/content/en/pastebin/index.adoc \
src/content/en/podcast/index.adoc \
src/content/en/screencast/index.adoc \
src/content/en/slide/index.adoc \
src/content/en/til/index.adoc \
src/content/pt/hea/index.adoc \
feeds.xml = \
src/content/en/blog/feed.xml \
src/content/en/pastebin/feed.xml \
src/content/en/podcast/feed.xml \
src/content/en/screencast/feed.xml \
src/content/en/slide/feed.xml \
src/content/en/til/feed.xml \
src/content/pt/hea/feed.xml \
images.svg = \
src/content/img/atom.svg \
src/content/img/envelope.svg \
src/content/img/favicon.svg \
src/content/img/link.svg \
src/content/img/lock.svg \
src/content/img/logo.svg \
src/content/img/monogram-filled.svg \
src/content/img/thumb.svg \
src/content/img/wordmark-filled.svg \
src/content/img/wordmark.svg \
sources.media = \
src/content/en/podcast/2020/12/19/test-entry.flac \
src/content/en/podcast/2020/12/19/test-entry.ogg \
src/content/en/screencast/2021/02/07/autoqemu.webm \
sources.tarballs = \
src/content/en/blog/2020/10/05/cargo2nix-demo.tar.gz \
src/content/en/blog/2020/10/05/cargo2nix.tar.gz \
src/content/en/blog/2020/10/05/swift2nix-demo.tar.gz \
src/content/en/blog/2020/10/05/swift2nix.tar.gz \
src/content/en/blog/2021/02/17/fallible.tar.gz \
src/content/en/screencast/2021/02/07/autoqemu.tar.gz \
sources.extras = \
src/content/en/blog/2020/10/05/cargo2nix-demo.tar.gz \
src/content/en/blog/2020/10/05/cargo2nix.tar.gz \
src/content/en/blog/2020/10/05/swift2nix-demo.tar.gz \
src/content/en/blog/2020/10/05/swift2nix.tar.gz \
src/content/en/blog/2021/02/17/fallible.tar.gz \
src/content/en/podcast/2020/12/19/test-entry.flac \
src/content/en/podcast/2020/12/19/test-entry.ogg \
src/content/en/screencast/2021/02/07/autoqemu.tar.gz \
src/content/en/screencast/2021/02/07/autoqemu.webm \
src/content/l/multiline-sh \
sources.po = \
po/en.po \
po/eo.po \
po/es.po \
po/euandre.org.pot \
po/fr.po \
po/pt.po \
music.ly = \
music.ogg = \
music.include = \
src/content/l/multiline-sh: src/content/en/til/2026/09/05/multiline-sh-comments.html
root.dir = src/content
comments.archives = src/comments.mastodon.json src/comments.lemmy.json
comments.dir = src/comments
comments.map = src/comments.txt
img.dir = img
src/content/en/about.htmlbody src/content/en/about.snippets src/content/en/about.json: src/content/en/about.adoc
src/content/eo/pri.htmlbody src/content/eo/pri.snippets src/content/eo/pri.json: src/content/eo/pri.adoc
src/content/es/acerca.htmlbody src/content/es/acerca.snippets src/content/es/acerca.json: src/content/es/acerca.adoc
src/content/fr/a-propos.htmlbody src/content/fr/a-propos.snippets src/content/fr/a-propos.json: src/content/fr/a-propos.adoc
src/content/pt/sobre.htmlbody src/content/pt/sobre.snippets src/content/pt/sobre.json: src/content/pt/sobre.adoc
src/content/en/blog/2018/07/17/guix-nixos.htmlbody src/content/en/blog/2018/07/17/guix-nixos.snippets src/content/en/blog/2018/07/17/guix-nixos.json: src/content/en/blog/2018/07/17/guix-nixos.adoc
src/content/en/blog/2018/08/01/npm-ci-reproducibility.htmlbody src/content/en/blog/2018/08/01/npm-ci-reproducibility.snippets src/content/en/blog/2018/08/01/npm-ci-reproducibility.json: src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc
src/content/en/blog/2018/12/21/ytdl-subs.htmlbody src/content/en/blog/2018/12/21/ytdl-subs.snippets src/content/en/blog/2018/12/21/ytdl-subs.json: src/content/en/blog/2018/12/21/ytdl-subs.adoc
src/content/en/blog/2019/06/02/nixos-stateless-workstation.htmlbody src/content/en/blog/2019/06/02/nixos-stateless-workstation.snippets src/content/en/blog/2019/06/02/nixos-stateless-workstation.json: src/content/en/blog/2019/06/02/nixos-stateless-workstation.adoc
src/content/en/blog/2020/08/10/guix-srht.htmlbody src/content/en/blog/2020/08/10/guix-srht.snippets src/content/en/blog/2020/08/10/guix-srht.json: src/content/en/blog/2020/08/10/guix-srht.adoc
src/content/en/blog/2020/08/31/database-i-wish-i-had.htmlbody src/content/en/blog/2020/08/31/database-i-wish-i-had.snippets src/content/en/blog/2020/08/31/database-i-wish-i-had.json: src/content/en/blog/2020/08/31/database-i-wish-i-had.adoc
src/content/en/blog/2020/10/05/cargo2nix.htmlbody src/content/en/blog/2020/10/05/cargo2nix.snippets src/content/en/blog/2020/10/05/cargo2nix.json: src/content/en/blog/2020/10/05/cargo2nix.adoc
src/content/en/blog/2020/10/05/swift2nix.htmlbody src/content/en/blog/2020/10/05/swift2nix.snippets src/content/en/blog/2020/10/05/swift2nix.json: src/content/en/blog/2020/10/05/swift2nix.adoc
src/content/en/blog/2020/10/19/feature-flags.htmlbody src/content/en/blog/2020/10/19/feature-flags.snippets src/content/en/blog/2020/10/19/feature-flags.json: src/content/en/blog/2020/10/19/feature-flags.adoc
src/content/en/blog/2020/10/20/wrong-interviewing.htmlbody src/content/en/blog/2020/10/20/wrong-interviewing.snippets src/content/en/blog/2020/10/20/wrong-interviewing.json: src/content/en/blog/2020/10/20/wrong-interviewing.adoc
src/content/en/blog/2020/11/07/diy-bugs.htmlbody src/content/en/blog/2020/11/07/diy-bugs.snippets src/content/en/blog/2020/11/07/diy-bugs.json: src/content/en/blog/2020/11/07/diy-bugs.adoc
src/content/en/blog/2020/11/08/paradigm-shift-review.htmlbody src/content/en/blog/2020/11/08/paradigm-shift-review.snippets src/content/en/blog/2020/11/08/paradigm-shift-review.json: src/content/en/blog/2020/11/08/paradigm-shift-review.adoc
src/content/en/blog/2020/11/12/database-parsers-trees.htmlbody src/content/en/blog/2020/11/12/database-parsers-trees.snippets src/content/en/blog/2020/11/12/database-parsers-trees.json: src/content/en/blog/2020/11/12/database-parsers-trees.adoc
src/content/en/blog/2020/11/14/local-first-review.htmlbody src/content/en/blog/2020/11/14/local-first-review.snippets src/content/en/blog/2020/11/14/local-first-review.json: src/content/en/blog/2020/11/14/local-first-review.adoc
src/content/en/blog/2021/01/26/remembering-ann.htmlbody src/content/en/blog/2021/01/26/remembering-ann.snippets src/content/en/blog/2021/01/26/remembering-ann.json: src/content/en/blog/2021/01/26/remembering-ann.adoc
src/content/en/blog/2021/02/17/fallible.htmlbody src/content/en/blog/2021/02/17/fallible.snippets src/content/en/blog/2021/02/17/fallible.json: src/content/en/blog/2021/02/17/fallible.adoc
src/content/en/blog/2021/04/29/relational-review.htmlbody src/content/en/blog/2021/04/29/relational-review.snippets src/content/en/blog/2021/04/29/relational-review.json: src/content/en/blog/2021/04/29/relational-review.adoc
src/content/en/pastebin/2016/04/05/rpn.htmlbody src/content/en/pastebin/2016/04/05/rpn.snippets src/content/en/pastebin/2016/04/05/rpn.json: src/content/en/pastebin/2016/04/05/rpn.adoc
src/content/en/pastebin/2018/07/11/nix-pinning.htmlbody src/content/en/pastebin/2018/07/11/nix-pinning.snippets src/content/en/pastebin/2018/07/11/nix-pinning.json: src/content/en/pastebin/2018/07/11/nix-pinning.adoc
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.htmlbody src/content/en/pastebin/2018/07/13/guix-nixos-systemd.snippets src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.adoc
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.htmlbody src/content/en/pastebin/2018/07/13/guixbuilder-nixos.snippets src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.adoc
src/content/en/pastebin/2018/07/13/guixbuilder.htmlbody src/content/en/pastebin/2018/07/13/guixbuilder.snippets src/content/en/pastebin/2018/07/13/guixbuilder.json: src/content/en/pastebin/2018/07/13/guixbuilder.adoc
src/content/en/pastebin/2018/07/13/nix-strpad.htmlbody src/content/en/pastebin/2018/07/13/nix-strpad.snippets src/content/en/pastebin/2018/07/13/nix-strpad.json: src/content/en/pastebin/2018/07/13/nix-strpad.adoc
src/content/en/pastebin/2018/07/25/nix-exps.htmlbody src/content/en/pastebin/2018/07/25/nix-exps.snippets src/content/en/pastebin/2018/07/25/nix-exps.json: src/content/en/pastebin/2018/07/25/nix-exps.adoc
src/content/en/pastebin/2018/07/25/nix-showdrv.htmlbody src/content/en/pastebin/2018/07/25/nix-showdrv.snippets src/content/en/pastebin/2018/07/25/nix-showdrv.json: src/content/en/pastebin/2018/07/25/nix-showdrv.adoc
src/content/en/pastebin/2019/06/08/inconsistent-hash.htmlbody src/content/en/pastebin/2019/06/08/inconsistent-hash.snippets src/content/en/pastebin/2019/06/08/inconsistent-hash.json: src/content/en/pastebin/2019/06/08/inconsistent-hash.adoc
src/content/en/pastebin/2019/12/29/raku-tuple-type.htmlbody src/content/en/pastebin/2019/12/29/raku-tuple-type.snippets src/content/en/pastebin/2019/12/29/raku-tuple-type.json: src/content/en/pastebin/2019/12/29/raku-tuple-type.adoc
src/content/en/pastebin/2020/01/04/guix-import-failure.htmlbody src/content/en/pastebin/2020/01/04/guix-import-failure.snippets src/content/en/pastebin/2020/01/04/guix-import-failure.json: src/content/en/pastebin/2020/01/04/guix-import-failure.adoc
src/content/en/pastebin/2020/02/14/guix-shebang.htmlbody src/content/en/pastebin/2020/02/14/guix-shebang.snippets src/content/en/pastebin/2020/02/14/guix-shebang.json: src/content/en/pastebin/2020/02/14/guix-shebang.adoc
src/content/en/pastebin/2020/11/27/guix-build-local.htmlbody src/content/en/pastebin/2020/11/27/guix-build-local.snippets src/content/en/pastebin/2020/11/27/guix-build-local.json: src/content/en/pastebin/2020/11/27/guix-build-local.adoc
src/content/en/pastebin/2020/12/15/guix-pack-fail.htmlbody src/content/en/pastebin/2020/12/15/guix-pack-fail.snippets src/content/en/pastebin/2020/12/15/guix-pack-fail.json: src/content/en/pastebin/2020/12/15/guix-pack-fail.adoc
src/content/en/pastebin/2021/04/03/naive-slugify-js.htmlbody src/content/en/pastebin/2021/04/03/naive-slugify-js.snippets src/content/en/pastebin/2021/04/03/naive-slugify-js.json: src/content/en/pastebin/2021/04/03/naive-slugify-js.adoc
src/content/en/pastebin/2021/06/08/reading-session-pt1.htmlbody src/content/en/pastebin/2021/06/08/reading-session-pt1.snippets src/content/en/pastebin/2021/06/08/reading-session-pt1.json: src/content/en/pastebin/2021/06/08/reading-session-pt1.adoc
src/content/en/pastebin/2021/06/22/curl-wget.htmlbody src/content/en/pastebin/2021/06/22/curl-wget.snippets src/content/en/pastebin/2021/06/22/curl-wget.json: src/content/en/pastebin/2021/06/22/curl-wget.adoc
src/content/en/pastebin/2021/08/11/h1-spacing.htmlbody src/content/en/pastebin/2021/08/11/h1-spacing.snippets src/content/en/pastebin/2021/08/11/h1-spacing.json: src/content/en/pastebin/2021/08/11/h1-spacing.adoc
src/content/en/pastebin/2021/09/02/sicp-3-19.htmlbody src/content/en/pastebin/2021/09/02/sicp-3-19.snippets src/content/en/pastebin/2021/09/02/sicp-3-19.json: src/content/en/pastebin/2021/09/02/sicp-3-19.adoc
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.htmlbody src/content/en/pastebin/2021/09/03/sicp-persistent-queue.snippets src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.adoc
src/content/en/pastebin/2022/07/14/git-cleanup.htmlbody src/content/en/pastebin/2022/07/14/git-cleanup.snippets src/content/en/pastebin/2022/07/14/git-cleanup.json: src/content/en/pastebin/2022/07/14/git-cleanup.adoc
src/content/en/pastebin/2023/07/22/funcallable-amop.htmlbody src/content/en/pastebin/2023/07/22/funcallable-amop.snippets src/content/en/pastebin/2023/07/22/funcallable-amop.json: src/content/en/pastebin/2023/07/22/funcallable-amop.adoc
src/content/en/podcast/2020/12/19/test-entry.htmlbody src/content/en/podcast/2020/12/19/test-entry.snippets src/content/en/podcast/2020/12/19/test-entry.json: src/content/en/podcast/2020/12/19/test-entry.adoc
src/content/en/screencast/2021/02/07/autoqemu.htmlbody src/content/en/screencast/2021/02/07/autoqemu.snippets src/content/en/screencast/2021/02/07/autoqemu.json: src/content/en/screencast/2021/02/07/autoqemu.adoc
src/content/en/slide/2020/10/19/feature-flags.htmlbody src/content/en/slide/2020/10/19/feature-flags.snippets src/content/en/slide/2020/10/19/feature-flags.json: src/content/en/slide/2020/10/19/feature-flags.adoc
src/content/en/slide/2020/11/14/local-first-hype.htmlbody src/content/en/slide/2020/11/14/local-first-hype.snippets src/content/en/slide/2020/11/14/local-first-hype.json: src/content/en/slide/2020/11/14/local-first-hype.adoc
src/content/en/til/2020/08/12/filename-timestamp.htmlbody src/content/en/til/2020/08/12/filename-timestamp.snippets src/content/en/til/2020/08/12/filename-timestamp.json: src/content/en/til/2020/08/12/filename-timestamp.adoc
src/content/en/til/2020/08/13/code-jekyll.htmlbody src/content/en/til/2020/08/13/code-jekyll.snippets src/content/en/til/2020/08/13/code-jekyll.json: src/content/en/til/2020/08/13/code-jekyll.adoc
src/content/en/til/2020/08/14/browse-git.htmlbody src/content/en/til/2020/08/14/browse-git.snippets src/content/en/til/2020/08/14/browse-git.json: src/content/en/til/2020/08/14/browse-git.adoc
src/content/en/til/2020/08/16/git-search.htmlbody src/content/en/til/2020/08/16/git-search.snippets src/content/en/til/2020/08/16/git-search.json: src/content/en/til/2020/08/16/git-search.adoc
src/content/en/til/2020/08/28/grep-online.htmlbody src/content/en/til/2020/08/28/grep-online.snippets src/content/en/til/2020/08/28/grep-online.json: src/content/en/til/2020/08/28/grep-online.adoc
src/content/en/til/2020/09/04/cli-email-fun-profit.htmlbody src/content/en/til/2020/09/04/cli-email-fun-profit.snippets src/content/en/til/2020/09/04/cli-email-fun-profit.json: src/content/en/til/2020/09/04/cli-email-fun-profit.adoc
src/content/en/til/2020/09/05/oldschool-pr.htmlbody src/content/en/til/2020/09/05/oldschool-pr.snippets src/content/en/til/2020/09/05/oldschool-pr.json: src/content/en/til/2020/09/05/oldschool-pr.adoc
src/content/en/til/2020/10/11/search-git-history.htmlbody src/content/en/til/2020/10/11/search-git-history.snippets src/content/en/til/2020/10/11/search-git-history.json: src/content/en/til/2020/10/11/search-git-history.adoc
src/content/en/til/2020/11/08/find-broken-symlink.htmlbody src/content/en/til/2020/11/08/find-broken-symlink.snippets src/content/en/til/2020/11/08/find-broken-symlink.json: src/content/en/til/2020/11/08/find-broken-symlink.adoc
src/content/en/til/2020/11/12/diy-nix-bash-ci.htmlbody src/content/en/til/2020/11/12/diy-nix-bash-ci.snippets src/content/en/til/2020/11/12/diy-nix-bash-ci.json: src/content/en/til/2020/11/12/diy-nix-bash-ci.adoc
src/content/en/til/2020/11/12/git-bisect-automation.htmlbody src/content/en/til/2020/11/12/git-bisect-automation.snippets src/content/en/til/2020/11/12/git-bisect-automation.json: src/content/en/til/2020/11/12/git-bisect-automation.adoc
src/content/en/til/2020/11/12/useful-bashvars.htmlbody src/content/en/til/2020/11/12/useful-bashvars.snippets src/content/en/til/2020/11/12/useful-bashvars.json: src/content/en/til/2020/11/12/useful-bashvars.adoc
src/content/en/til/2020/11/14/gpodder-media.htmlbody src/content/en/til/2020/11/14/gpodder-media.snippets src/content/en/til/2020/11/14/gpodder-media.json: src/content/en/til/2020/11/14/gpodder-media.adoc
src/content/en/til/2020/11/30/git-notes-ci.htmlbody src/content/en/til/2020/11/30/git-notes-ci.snippets src/content/en/til/2020/11/30/git-notes-ci.json: src/content/en/til/2020/11/30/git-notes-ci.adoc
src/content/en/til/2020/12/15/shellcheck-repo.htmlbody src/content/en/til/2020/12/15/shellcheck-repo.snippets src/content/en/til/2020/12/15/shellcheck-repo.json: src/content/en/til/2020/12/15/shellcheck-repo.adoc
src/content/en/til/2020/12/29/svg.htmlbody src/content/en/til/2020/12/29/svg.snippets src/content/en/til/2020/12/29/svg.json: src/content/en/til/2020/12/29/svg.adoc
src/content/en/til/2021/01/12/curl-awk-emails.htmlbody src/content/en/til/2021/01/12/curl-awk-emails.snippets src/content/en/til/2021/01/12/curl-awk-emails.json: src/content/en/til/2021/01/12/curl-awk-emails.adoc
src/content/en/til/2021/01/17/posix-shebang.htmlbody src/content/en/til/2021/01/17/posix-shebang.snippets src/content/en/til/2021/01/17/posix-shebang.json: src/content/en/til/2021/01/17/posix-shebang.adoc
src/content/en/til/2021/04/24/cl-generic-precedence.htmlbody src/content/en/til/2021/04/24/cl-generic-precedence.snippets src/content/en/til/2021/04/24/cl-generic-precedence.json: src/content/en/til/2021/04/24/cl-generic-precedence.adoc
src/content/en/til/2021/04/24/clojure-autocurry.htmlbody src/content/en/til/2021/04/24/clojure-autocurry.snippets src/content/en/til/2021/04/24/clojure-autocurry.json: src/content/en/til/2021/04/24/clojure-autocurry.adoc
src/content/en/til/2021/04/24/scm-nif.htmlbody src/content/en/til/2021/04/24/scm-nif.snippets src/content/en/til/2021/04/24/scm-nif.json: src/content/en/til/2021/04/24/scm-nif.adoc
src/content/en/til/2021/07/23/git-tls-gpg.htmlbody src/content/en/til/2021/07/23/git-tls-gpg.snippets src/content/en/til/2021/07/23/git-tls-gpg.json: src/content/en/til/2021/07/23/git-tls-gpg.adoc
src/content/en/til/2021/08/11/js-bigint-reviver.htmlbody src/content/en/til/2021/08/11/js-bigint-reviver.snippets src/content/en/til/2021/08/11/js-bigint-reviver.json: src/content/en/til/2021/08/11/js-bigint-reviver.adoc
src/content/en/til/2026/09/05/multiline-sh-comments.htmlbody src/content/en/til/2026/09/05/multiline-sh-comments.snippets src/content/en/til/2026/09/05/multiline-sh-comments.json: src/content/en/til/2026/09/05/multiline-sh-comments.adoc
src/content/pt/hea/2020/08/12/arquivo-datado.htmlbody src/content/pt/hea/2020/08/12/arquivo-datado.snippets src/content/pt/hea/2020/08/12/arquivo-datado.json: src/content/pt/hea/2020/08/12/arquivo-datado.adoc
src/content/en/blog/index.htmlbody src/content/en/blog/index.snippets src/content/en/blog/index.json: src/content/en/blog/index.adoc
src/content/en/pastebin/index.htmlbody src/content/en/pastebin/index.snippets src/content/en/pastebin/index.json: src/content/en/pastebin/index.adoc
src/content/en/podcast/index.htmlbody src/content/en/podcast/index.snippets src/content/en/podcast/index.json: src/content/en/podcast/index.adoc
src/content/en/screencast/index.htmlbody src/content/en/screencast/index.snippets src/content/en/screencast/index.json: src/content/en/screencast/index.adoc
src/content/en/slide/index.htmlbody src/content/en/slide/index.snippets src/content/en/slide/index.json: src/content/en/slide/index.adoc
src/content/en/til/index.htmlbody src/content/en/til/index.snippets src/content/en/til/index.json: src/content/en/til/index.adoc
src/content/pt/hea/index.htmlbody src/content/pt/hea/index.snippets src/content/pt/hea/index.json: src/content/pt/hea/index.adoc
src/content/en/blog/categories.htmlbody src/content/en/blog/categories.snippets src/content/en/blog/categories.json: src/content/en/blog/categories.adoc
src/content/en/pastebin/categories.htmlbody src/content/en/pastebin/categories.snippets src/content/en/pastebin/categories.json: src/content/en/pastebin/categories.adoc
src/content/en/podcast/categories.htmlbody src/content/en/podcast/categories.snippets src/content/en/podcast/categories.json: src/content/en/podcast/categories.adoc
src/content/en/screencast/categories.htmlbody src/content/en/screencast/categories.snippets src/content/en/screencast/categories.json: src/content/en/screencast/categories.adoc
src/content/en/slide/categories.htmlbody src/content/en/slide/categories.snippets src/content/en/slide/categories.json: src/content/en/slide/categories.adoc
src/content/en/til/categories.htmlbody src/content/en/til/categories.snippets src/content/en/til/categories.json: src/content/en/til/categories.adoc
src/content/pt/hea/categorias.htmlbody src/content/pt/hea/categorias.snippets src/content/pt/hea/categorias.json: src/content/pt/hea/categorias.adoc
src/content/en/index.htmlbody src/content/en/index.snippets src/content/en/index.json: src/content/en/index.adoc
src/content/eo/index.htmlbody src/content/eo/index.snippets src/content/eo/index.json: src/content/eo/index.adoc
src/content/es/index.htmlbody src/content/es/index.snippets src/content/es/index.json: src/content/es/index.adoc
src/content/fr/index.htmlbody src/content/fr/index.snippets src/content/fr/index.json: src/content/fr/index.adoc
src/content/pt/index.htmlbody src/content/pt/index.snippets src/content/pt/index.json: src/content/pt/index.adoc
src/content/en/about.html: src/content/en/about.json src/content/en/about.htmlbody
src/content/eo/pri.html: src/content/eo/pri.json src/content/eo/pri.htmlbody
src/content/es/acerca.html: src/content/es/acerca.json src/content/es/acerca.htmlbody
src/content/fr/a-propos.html: src/content/fr/a-propos.json src/content/fr/a-propos.htmlbody
src/content/pt/sobre.html: src/content/pt/sobre.json src/content/pt/sobre.htmlbody
src/content/en/blog/2018/07/17/guix-nixos.html: src/content/en/blog/2018/07/17/guix-nixos.json src/content/en/blog/2018/07/17/guix-nixos.htmlbody
src/content/en/blog/2018/08/01/npm-ci-reproducibility.html: src/content/en/blog/2018/08/01/npm-ci-reproducibility.json src/content/en/blog/2018/08/01/npm-ci-reproducibility.htmlbody
src/content/en/blog/2018/12/21/ytdl-subs.html: src/content/en/blog/2018/12/21/ytdl-subs.json src/content/en/blog/2018/12/21/ytdl-subs.htmlbody
src/content/en/blog/2019/06/02/nixos-stateless-workstation.html: src/content/en/blog/2019/06/02/nixos-stateless-workstation.json src/content/en/blog/2019/06/02/nixos-stateless-workstation.htmlbody
src/content/en/blog/2020/08/10/guix-srht.html: src/content/en/blog/2020/08/10/guix-srht.json src/content/en/blog/2020/08/10/guix-srht.htmlbody
src/content/en/blog/2020/08/31/database-i-wish-i-had.html: src/content/en/blog/2020/08/31/database-i-wish-i-had.json src/content/en/blog/2020/08/31/database-i-wish-i-had.htmlbody
src/content/en/blog/2020/10/05/cargo2nix.html: src/content/en/blog/2020/10/05/cargo2nix.json src/content/en/blog/2020/10/05/cargo2nix.htmlbody
src/content/en/blog/2020/10/05/swift2nix.html: src/content/en/blog/2020/10/05/swift2nix.json src/content/en/blog/2020/10/05/swift2nix.htmlbody
src/content/en/blog/2020/10/19/feature-flags.html: src/content/en/blog/2020/10/19/feature-flags.json src/content/en/blog/2020/10/19/feature-flags.htmlbody
src/content/en/blog/2020/10/20/wrong-interviewing.html: src/content/en/blog/2020/10/20/wrong-interviewing.json src/content/en/blog/2020/10/20/wrong-interviewing.htmlbody
src/content/en/blog/2020/11/07/diy-bugs.html: src/content/en/blog/2020/11/07/diy-bugs.json src/content/en/blog/2020/11/07/diy-bugs.htmlbody
src/content/en/blog/2020/11/08/paradigm-shift-review.html: src/content/en/blog/2020/11/08/paradigm-shift-review.json src/content/en/blog/2020/11/08/paradigm-shift-review.htmlbody
src/content/en/blog/2020/11/12/database-parsers-trees.html: src/content/en/blog/2020/11/12/database-parsers-trees.json src/content/en/blog/2020/11/12/database-parsers-trees.htmlbody
src/content/en/blog/2020/11/14/local-first-review.html: src/content/en/blog/2020/11/14/local-first-review.json src/content/en/blog/2020/11/14/local-first-review.htmlbody
src/content/en/blog/2021/01/26/remembering-ann.html: src/content/en/blog/2021/01/26/remembering-ann.json src/content/en/blog/2021/01/26/remembering-ann.htmlbody
src/content/en/blog/2021/02/17/fallible.html: src/content/en/blog/2021/02/17/fallible.json src/content/en/blog/2021/02/17/fallible.htmlbody
src/content/en/blog/2021/04/29/relational-review.html: src/content/en/blog/2021/04/29/relational-review.json src/content/en/blog/2021/04/29/relational-review.htmlbody
src/content/en/pastebin/2016/04/05/rpn.html: src/content/en/pastebin/2016/04/05/rpn.json src/content/en/pastebin/2016/04/05/rpn.htmlbody
src/content/en/pastebin/2018/07/11/nix-pinning.html: src/content/en/pastebin/2018/07/11/nix-pinning.json src/content/en/pastebin/2018/07/11/nix-pinning.htmlbody
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.html: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json src/content/en/pastebin/2018/07/13/guix-nixos-systemd.htmlbody
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.html: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json src/content/en/pastebin/2018/07/13/guixbuilder-nixos.htmlbody
src/content/en/pastebin/2018/07/13/guixbuilder.html: src/content/en/pastebin/2018/07/13/guixbuilder.json src/content/en/pastebin/2018/07/13/guixbuilder.htmlbody
src/content/en/pastebin/2018/07/13/nix-strpad.html: src/content/en/pastebin/2018/07/13/nix-strpad.json src/content/en/pastebin/2018/07/13/nix-strpad.htmlbody
src/content/en/pastebin/2018/07/25/nix-exps.html: src/content/en/pastebin/2018/07/25/nix-exps.json src/content/en/pastebin/2018/07/25/nix-exps.htmlbody
src/content/en/pastebin/2018/07/25/nix-showdrv.html: src/content/en/pastebin/2018/07/25/nix-showdrv.json src/content/en/pastebin/2018/07/25/nix-showdrv.htmlbody
src/content/en/pastebin/2019/06/08/inconsistent-hash.html: src/content/en/pastebin/2019/06/08/inconsistent-hash.json src/content/en/pastebin/2019/06/08/inconsistent-hash.htmlbody
src/content/en/pastebin/2019/12/29/raku-tuple-type.html: src/content/en/pastebin/2019/12/29/raku-tuple-type.json src/content/en/pastebin/2019/12/29/raku-tuple-type.htmlbody
src/content/en/pastebin/2020/01/04/guix-import-failure.html: src/content/en/pastebin/2020/01/04/guix-import-failure.json src/content/en/pastebin/2020/01/04/guix-import-failure.htmlbody
src/content/en/pastebin/2020/02/14/guix-shebang.html: src/content/en/pastebin/2020/02/14/guix-shebang.json src/content/en/pastebin/2020/02/14/guix-shebang.htmlbody
src/content/en/pastebin/2020/11/27/guix-build-local.html: src/content/en/pastebin/2020/11/27/guix-build-local.json src/content/en/pastebin/2020/11/27/guix-build-local.htmlbody
src/content/en/pastebin/2020/12/15/guix-pack-fail.html: src/content/en/pastebin/2020/12/15/guix-pack-fail.json src/content/en/pastebin/2020/12/15/guix-pack-fail.htmlbody
src/content/en/pastebin/2021/04/03/naive-slugify-js.html: src/content/en/pastebin/2021/04/03/naive-slugify-js.json src/content/en/pastebin/2021/04/03/naive-slugify-js.htmlbody
src/content/en/pastebin/2021/06/08/reading-session-pt1.html: src/content/en/pastebin/2021/06/08/reading-session-pt1.json src/content/en/pastebin/2021/06/08/reading-session-pt1.htmlbody
src/content/en/pastebin/2021/06/22/curl-wget.html: src/content/en/pastebin/2021/06/22/curl-wget.json src/content/en/pastebin/2021/06/22/curl-wget.htmlbody
src/content/en/pastebin/2021/08/11/h1-spacing.html: src/content/en/pastebin/2021/08/11/h1-spacing.json src/content/en/pastebin/2021/08/11/h1-spacing.htmlbody
src/content/en/pastebin/2021/09/02/sicp-3-19.html: src/content/en/pastebin/2021/09/02/sicp-3-19.json src/content/en/pastebin/2021/09/02/sicp-3-19.htmlbody
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.html: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json src/content/en/pastebin/2021/09/03/sicp-persistent-queue.htmlbody
src/content/en/pastebin/2022/07/14/git-cleanup.html: src/content/en/pastebin/2022/07/14/git-cleanup.json src/content/en/pastebin/2022/07/14/git-cleanup.htmlbody
src/content/en/pastebin/2023/07/22/funcallable-amop.html: src/content/en/pastebin/2023/07/22/funcallable-amop.json src/content/en/pastebin/2023/07/22/funcallable-amop.htmlbody
src/content/en/podcast/2020/12/19/test-entry.html: src/content/en/podcast/2020/12/19/test-entry.json src/content/en/podcast/2020/12/19/test-entry.htmlbody
src/content/en/screencast/2021/02/07/autoqemu.html: src/content/en/screencast/2021/02/07/autoqemu.json src/content/en/screencast/2021/02/07/autoqemu.htmlbody
src/content/en/slide/2020/10/19/feature-flags.html: src/content/en/slide/2020/10/19/feature-flags.json src/content/en/slide/2020/10/19/feature-flags.htmlbody
src/content/en/slide/2020/11/14/local-first-hype.html: src/content/en/slide/2020/11/14/local-first-hype.json src/content/en/slide/2020/11/14/local-first-hype.htmlbody
src/content/en/til/2020/08/12/filename-timestamp.html: src/content/en/til/2020/08/12/filename-timestamp.json src/content/en/til/2020/08/12/filename-timestamp.htmlbody
src/content/en/til/2020/08/13/code-jekyll.html: src/content/en/til/2020/08/13/code-jekyll.json src/content/en/til/2020/08/13/code-jekyll.htmlbody
src/content/en/til/2020/08/14/browse-git.html: src/content/en/til/2020/08/14/browse-git.json src/content/en/til/2020/08/14/browse-git.htmlbody
src/content/en/til/2020/08/16/git-search.html: src/content/en/til/2020/08/16/git-search.json src/content/en/til/2020/08/16/git-search.htmlbody
src/content/en/til/2020/08/28/grep-online.html: src/content/en/til/2020/08/28/grep-online.json src/content/en/til/2020/08/28/grep-online.htmlbody
src/content/en/til/2020/09/04/cli-email-fun-profit.html: src/content/en/til/2020/09/04/cli-email-fun-profit.json src/content/en/til/2020/09/04/cli-email-fun-profit.htmlbody
src/content/en/til/2020/09/05/oldschool-pr.html: src/content/en/til/2020/09/05/oldschool-pr.json src/content/en/til/2020/09/05/oldschool-pr.htmlbody
src/content/en/til/2020/10/11/search-git-history.html: src/content/en/til/2020/10/11/search-git-history.json src/content/en/til/2020/10/11/search-git-history.htmlbody
src/content/en/til/2020/11/08/find-broken-symlink.html: src/content/en/til/2020/11/08/find-broken-symlink.json src/content/en/til/2020/11/08/find-broken-symlink.htmlbody
src/content/en/til/2020/11/12/diy-nix-bash-ci.html: src/content/en/til/2020/11/12/diy-nix-bash-ci.json src/content/en/til/2020/11/12/diy-nix-bash-ci.htmlbody
src/content/en/til/2020/11/12/git-bisect-automation.html: src/content/en/til/2020/11/12/git-bisect-automation.json src/content/en/til/2020/11/12/git-bisect-automation.htmlbody
src/content/en/til/2020/11/12/useful-bashvars.html: src/content/en/til/2020/11/12/useful-bashvars.json src/content/en/til/2020/11/12/useful-bashvars.htmlbody
src/content/en/til/2020/11/14/gpodder-media.html: src/content/en/til/2020/11/14/gpodder-media.json src/content/en/til/2020/11/14/gpodder-media.htmlbody
src/content/en/til/2020/11/30/git-notes-ci.html: src/content/en/til/2020/11/30/git-notes-ci.json src/content/en/til/2020/11/30/git-notes-ci.htmlbody
src/content/en/til/2020/12/15/shellcheck-repo.html: src/content/en/til/2020/12/15/shellcheck-repo.json src/content/en/til/2020/12/15/shellcheck-repo.htmlbody
src/content/en/til/2020/12/29/svg.html: src/content/en/til/2020/12/29/svg.json src/content/en/til/2020/12/29/svg.htmlbody
src/content/en/til/2021/01/12/curl-awk-emails.html: src/content/en/til/2021/01/12/curl-awk-emails.json src/content/en/til/2021/01/12/curl-awk-emails.htmlbody
src/content/en/til/2021/01/17/posix-shebang.html: src/content/en/til/2021/01/17/posix-shebang.json src/content/en/til/2021/01/17/posix-shebang.htmlbody
src/content/en/til/2021/04/24/cl-generic-precedence.html: src/content/en/til/2021/04/24/cl-generic-precedence.json src/content/en/til/2021/04/24/cl-generic-precedence.htmlbody
src/content/en/til/2021/04/24/clojure-autocurry.html: src/content/en/til/2021/04/24/clojure-autocurry.json src/content/en/til/2021/04/24/clojure-autocurry.htmlbody
src/content/en/til/2021/04/24/scm-nif.html: src/content/en/til/2021/04/24/scm-nif.json src/content/en/til/2021/04/24/scm-nif.htmlbody
src/content/en/til/2021/07/23/git-tls-gpg.html: src/content/en/til/2021/07/23/git-tls-gpg.json src/content/en/til/2021/07/23/git-tls-gpg.htmlbody
src/content/en/til/2021/08/11/js-bigint-reviver.html: src/content/en/til/2021/08/11/js-bigint-reviver.json src/content/en/til/2021/08/11/js-bigint-reviver.htmlbody
src/content/en/til/2026/09/05/multiline-sh-comments.html: src/content/en/til/2026/09/05/multiline-sh-comments.json src/content/en/til/2026/09/05/multiline-sh-comments.htmlbody
src/content/pt/hea/2020/08/12/arquivo-datado.html: src/content/pt/hea/2020/08/12/arquivo-datado.json src/content/pt/hea/2020/08/12/arquivo-datado.htmlbody
src/content/en/blog/index.html: src/content/en/blog/index.json src/content/en/blog/index.htmlbody
src/content/en/pastebin/index.html: src/content/en/pastebin/index.json src/content/en/pastebin/index.htmlbody
src/content/en/podcast/index.html: src/content/en/podcast/index.json src/content/en/podcast/index.htmlbody
src/content/en/screencast/index.html: src/content/en/screencast/index.json src/content/en/screencast/index.htmlbody
src/content/en/slide/index.html: src/content/en/slide/index.json src/content/en/slide/index.htmlbody
src/content/en/til/index.html: src/content/en/til/index.json src/content/en/til/index.htmlbody
src/content/pt/hea/index.html: src/content/pt/hea/index.json src/content/pt/hea/index.htmlbody
src/content/en/blog/categories.html: src/content/en/blog/categories.json src/content/en/blog/categories.htmlbody
src/content/en/pastebin/categories.html: src/content/en/pastebin/categories.json src/content/en/pastebin/categories.htmlbody
src/content/en/podcast/categories.html: src/content/en/podcast/categories.json src/content/en/podcast/categories.htmlbody
src/content/en/screencast/categories.html: src/content/en/screencast/categories.json src/content/en/screencast/categories.htmlbody
src/content/en/slide/categories.html: src/content/en/slide/categories.json src/content/en/slide/categories.htmlbody
src/content/en/til/categories.html: src/content/en/til/categories.json src/content/en/til/categories.htmlbody
src/content/pt/hea/categorias.html: src/content/pt/hea/categorias.json src/content/pt/hea/categorias.htmlbody
src/content/en/index.html: src/content/en/index.json src/content/en/index.htmlbody
src/content/eo/index.html: src/content/eo/index.json src/content/eo/index.htmlbody
src/content/es/index.html: src/content/es/index.json src/content/es/index.htmlbody
src/content/fr/index.html: src/content/fr/index.json src/content/fr/index.htmlbody
src/content/pt/index.html: src/content/pt/index.json src/content/pt/index.htmlbody
src/content/en/about.updatedat-check: src/content/en/about.json
src/content/eo/pri.updatedat-check: src/content/eo/pri.json
src/content/es/acerca.updatedat-check: src/content/es/acerca.json
src/content/fr/a-propos.updatedat-check: src/content/fr/a-propos.json
src/content/pt/sobre.updatedat-check: src/content/pt/sobre.json
src/content/en/blog/2018/07/17/guix-nixos.updatedat-check: src/content/en/blog/2018/07/17/guix-nixos.json
src/content/en/blog/2018/08/01/npm-ci-reproducibility.updatedat-check: src/content/en/blog/2018/08/01/npm-ci-reproducibility.json
src/content/en/blog/2018/12/21/ytdl-subs.updatedat-check: src/content/en/blog/2018/12/21/ytdl-subs.json
src/content/en/blog/2019/06/02/nixos-stateless-workstation.updatedat-check: src/content/en/blog/2019/06/02/nixos-stateless-workstation.json
src/content/en/blog/2020/08/10/guix-srht.updatedat-check: src/content/en/blog/2020/08/10/guix-srht.json
src/content/en/blog/2020/08/31/database-i-wish-i-had.updatedat-check: src/content/en/blog/2020/08/31/database-i-wish-i-had.json
src/content/en/blog/2020/10/05/cargo2nix.updatedat-check: src/content/en/blog/2020/10/05/cargo2nix.json
src/content/en/blog/2020/10/05/swift2nix.updatedat-check: src/content/en/blog/2020/10/05/swift2nix.json
src/content/en/blog/2020/10/19/feature-flags.updatedat-check: src/content/en/blog/2020/10/19/feature-flags.json
src/content/en/blog/2020/10/20/wrong-interviewing.updatedat-check: src/content/en/blog/2020/10/20/wrong-interviewing.json
src/content/en/blog/2020/11/07/diy-bugs.updatedat-check: src/content/en/blog/2020/11/07/diy-bugs.json
src/content/en/blog/2020/11/08/paradigm-shift-review.updatedat-check: src/content/en/blog/2020/11/08/paradigm-shift-review.json
src/content/en/blog/2020/11/12/database-parsers-trees.updatedat-check: src/content/en/blog/2020/11/12/database-parsers-trees.json
src/content/en/blog/2020/11/14/local-first-review.updatedat-check: src/content/en/blog/2020/11/14/local-first-review.json
src/content/en/blog/2021/01/26/remembering-ann.updatedat-check: src/content/en/blog/2021/01/26/remembering-ann.json
src/content/en/blog/2021/02/17/fallible.updatedat-check: src/content/en/blog/2021/02/17/fallible.json
src/content/en/blog/2021/04/29/relational-review.updatedat-check: src/content/en/blog/2021/04/29/relational-review.json
src/content/en/pastebin/2016/04/05/rpn.updatedat-check: src/content/en/pastebin/2016/04/05/rpn.json
src/content/en/pastebin/2018/07/11/nix-pinning.updatedat-check: src/content/en/pastebin/2018/07/11/nix-pinning.json
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.updatedat-check: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.updatedat-check: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json
src/content/en/pastebin/2018/07/13/guixbuilder.updatedat-check: src/content/en/pastebin/2018/07/13/guixbuilder.json
src/content/en/pastebin/2018/07/13/nix-strpad.updatedat-check: src/content/en/pastebin/2018/07/13/nix-strpad.json
src/content/en/pastebin/2018/07/25/nix-exps.updatedat-check: src/content/en/pastebin/2018/07/25/nix-exps.json
src/content/en/pastebin/2018/07/25/nix-showdrv.updatedat-check: src/content/en/pastebin/2018/07/25/nix-showdrv.json
src/content/en/pastebin/2019/06/08/inconsistent-hash.updatedat-check: src/content/en/pastebin/2019/06/08/inconsistent-hash.json
src/content/en/pastebin/2019/12/29/raku-tuple-type.updatedat-check: src/content/en/pastebin/2019/12/29/raku-tuple-type.json
src/content/en/pastebin/2020/01/04/guix-import-failure.updatedat-check: src/content/en/pastebin/2020/01/04/guix-import-failure.json
src/content/en/pastebin/2020/02/14/guix-shebang.updatedat-check: src/content/en/pastebin/2020/02/14/guix-shebang.json
src/content/en/pastebin/2020/11/27/guix-build-local.updatedat-check: src/content/en/pastebin/2020/11/27/guix-build-local.json
src/content/en/pastebin/2020/12/15/guix-pack-fail.updatedat-check: src/content/en/pastebin/2020/12/15/guix-pack-fail.json
src/content/en/pastebin/2021/04/03/naive-slugify-js.updatedat-check: src/content/en/pastebin/2021/04/03/naive-slugify-js.json
src/content/en/pastebin/2021/06/08/reading-session-pt1.updatedat-check: src/content/en/pastebin/2021/06/08/reading-session-pt1.json
src/content/en/pastebin/2021/06/22/curl-wget.updatedat-check: src/content/en/pastebin/2021/06/22/curl-wget.json
src/content/en/pastebin/2021/08/11/h1-spacing.updatedat-check: src/content/en/pastebin/2021/08/11/h1-spacing.json
src/content/en/pastebin/2021/09/02/sicp-3-19.updatedat-check: src/content/en/pastebin/2021/09/02/sicp-3-19.json
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.updatedat-check: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json
src/content/en/pastebin/2022/07/14/git-cleanup.updatedat-check: src/content/en/pastebin/2022/07/14/git-cleanup.json
src/content/en/pastebin/2023/07/22/funcallable-amop.updatedat-check: src/content/en/pastebin/2023/07/22/funcallable-amop.json
src/content/en/podcast/2020/12/19/test-entry.updatedat-check: src/content/en/podcast/2020/12/19/test-entry.json
src/content/en/screencast/2021/02/07/autoqemu.updatedat-check: src/content/en/screencast/2021/02/07/autoqemu.json
src/content/en/slide/2020/10/19/feature-flags.updatedat-check: src/content/en/slide/2020/10/19/feature-flags.json
src/content/en/slide/2020/11/14/local-first-hype.updatedat-check: src/content/en/slide/2020/11/14/local-first-hype.json
src/content/en/til/2020/08/12/filename-timestamp.updatedat-check: src/content/en/til/2020/08/12/filename-timestamp.json
src/content/en/til/2020/08/13/code-jekyll.updatedat-check: src/content/en/til/2020/08/13/code-jekyll.json
src/content/en/til/2020/08/14/browse-git.updatedat-check: src/content/en/til/2020/08/14/browse-git.json
src/content/en/til/2020/08/16/git-search.updatedat-check: src/content/en/til/2020/08/16/git-search.json
src/content/en/til/2020/08/28/grep-online.updatedat-check: src/content/en/til/2020/08/28/grep-online.json
src/content/en/til/2020/09/04/cli-email-fun-profit.updatedat-check: src/content/en/til/2020/09/04/cli-email-fun-profit.json
src/content/en/til/2020/09/05/oldschool-pr.updatedat-check: src/content/en/til/2020/09/05/oldschool-pr.json
src/content/en/til/2020/10/11/search-git-history.updatedat-check: src/content/en/til/2020/10/11/search-git-history.json
src/content/en/til/2020/11/08/find-broken-symlink.updatedat-check: src/content/en/til/2020/11/08/find-broken-symlink.json
src/content/en/til/2020/11/12/diy-nix-bash-ci.updatedat-check: src/content/en/til/2020/11/12/diy-nix-bash-ci.json
src/content/en/til/2020/11/12/git-bisect-automation.updatedat-check: src/content/en/til/2020/11/12/git-bisect-automation.json
src/content/en/til/2020/11/12/useful-bashvars.updatedat-check: src/content/en/til/2020/11/12/useful-bashvars.json
src/content/en/til/2020/11/14/gpodder-media.updatedat-check: src/content/en/til/2020/11/14/gpodder-media.json
src/content/en/til/2020/11/30/git-notes-ci.updatedat-check: src/content/en/til/2020/11/30/git-notes-ci.json
src/content/en/til/2020/12/15/shellcheck-repo.updatedat-check: src/content/en/til/2020/12/15/shellcheck-repo.json
src/content/en/til/2020/12/29/svg.updatedat-check: src/content/en/til/2020/12/29/svg.json
src/content/en/til/2021/01/12/curl-awk-emails.updatedat-check: src/content/en/til/2021/01/12/curl-awk-emails.json
src/content/en/til/2021/01/17/posix-shebang.updatedat-check: src/content/en/til/2021/01/17/posix-shebang.json
src/content/en/til/2021/04/24/cl-generic-precedence.updatedat-check: src/content/en/til/2021/04/24/cl-generic-precedence.json
src/content/en/til/2021/04/24/clojure-autocurry.updatedat-check: src/content/en/til/2021/04/24/clojure-autocurry.json
src/content/en/til/2021/04/24/scm-nif.updatedat-check: src/content/en/til/2021/04/24/scm-nif.json
src/content/en/til/2021/07/23/git-tls-gpg.updatedat-check: src/content/en/til/2021/07/23/git-tls-gpg.json
src/content/en/til/2021/08/11/js-bigint-reviver.updatedat-check: src/content/en/til/2021/08/11/js-bigint-reviver.json
src/content/en/til/2026/09/05/multiline-sh-comments.updatedat-check: src/content/en/til/2026/09/05/multiline-sh-comments.json
src/content/pt/hea/2020/08/12/arquivo-datado.updatedat-check: src/content/pt/hea/2020/08/12/arquivo-datado.json
src/content/en/blog/index.updatedat-check: src/content/en/blog/index.json
src/content/en/pastebin/index.updatedat-check: src/content/en/pastebin/index.json
src/content/en/podcast/index.updatedat-check: src/content/en/podcast/index.json
src/content/en/screencast/index.updatedat-check: src/content/en/screencast/index.json
src/content/en/slide/index.updatedat-check: src/content/en/slide/index.json
src/content/en/til/index.updatedat-check: src/content/en/til/index.json
src/content/pt/hea/index.updatedat-check: src/content/pt/hea/index.json
src/content/en/blog/categories.updatedat-check: src/content/en/blog/categories.json
src/content/en/pastebin/categories.updatedat-check: src/content/en/pastebin/categories.json
src/content/en/podcast/categories.updatedat-check: src/content/en/podcast/categories.json
src/content/en/screencast/categories.updatedat-check: src/content/en/screencast/categories.json
src/content/en/slide/categories.updatedat-check: src/content/en/slide/categories.json
src/content/en/til/categories.updatedat-check: src/content/en/til/categories.json
src/content/pt/hea/categorias.updatedat-check: src/content/pt/hea/categorias.json
src/content/en/index.updatedat-check: src/content/en/index.json
src/content/eo/index.updatedat-check: src/content/eo/index.json
src/content/es/index.updatedat-check: src/content/es/index.json
src/content/fr/index.updatedat-check: src/content/fr/index.json
src/content/pt/index.updatedat-check: src/content/pt/index.json
src/content/en/about.links-internal-check: src/content/en/about.links
src/content/eo/pri.links-internal-check: src/content/eo/pri.links
src/content/es/acerca.links-internal-check: src/content/es/acerca.links
src/content/fr/a-propos.links-internal-check: src/content/fr/a-propos.links
src/content/pt/sobre.links-internal-check: src/content/pt/sobre.links
src/content/en/blog/2018/07/17/guix-nixos.links-internal-check: src/content/en/blog/2018/07/17/guix-nixos.links
src/content/en/blog/2018/08/01/npm-ci-reproducibility.links-internal-check: src/content/en/blog/2018/08/01/npm-ci-reproducibility.links
src/content/en/blog/2018/12/21/ytdl-subs.links-internal-check: src/content/en/blog/2018/12/21/ytdl-subs.links
src/content/en/blog/2019/06/02/nixos-stateless-workstation.links-internal-check: src/content/en/blog/2019/06/02/nixos-stateless-workstation.links
src/content/en/blog/2020/08/10/guix-srht.links-internal-check: src/content/en/blog/2020/08/10/guix-srht.links
src/content/en/blog/2020/08/31/database-i-wish-i-had.links-internal-check: src/content/en/blog/2020/08/31/database-i-wish-i-had.links
src/content/en/blog/2020/10/05/cargo2nix.links-internal-check: src/content/en/blog/2020/10/05/cargo2nix.links
src/content/en/blog/2020/10/05/swift2nix.links-internal-check: src/content/en/blog/2020/10/05/swift2nix.links
src/content/en/blog/2020/10/19/feature-flags.links-internal-check: src/content/en/blog/2020/10/19/feature-flags.links
src/content/en/blog/2020/10/20/wrong-interviewing.links-internal-check: src/content/en/blog/2020/10/20/wrong-interviewing.links
src/content/en/blog/2020/11/07/diy-bugs.links-internal-check: src/content/en/blog/2020/11/07/diy-bugs.links
src/content/en/blog/2020/11/08/paradigm-shift-review.links-internal-check: src/content/en/blog/2020/11/08/paradigm-shift-review.links
src/content/en/blog/2020/11/12/database-parsers-trees.links-internal-check: src/content/en/blog/2020/11/12/database-parsers-trees.links
src/content/en/blog/2020/11/14/local-first-review.links-internal-check: src/content/en/blog/2020/11/14/local-first-review.links
src/content/en/blog/2021/01/26/remembering-ann.links-internal-check: src/content/en/blog/2021/01/26/remembering-ann.links
src/content/en/blog/2021/02/17/fallible.links-internal-check: src/content/en/blog/2021/02/17/fallible.links
src/content/en/blog/2021/04/29/relational-review.links-internal-check: src/content/en/blog/2021/04/29/relational-review.links
src/content/en/pastebin/2016/04/05/rpn.links-internal-check: src/content/en/pastebin/2016/04/05/rpn.links
src/content/en/pastebin/2018/07/11/nix-pinning.links-internal-check: src/content/en/pastebin/2018/07/11/nix-pinning.links
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.links-internal-check: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.links
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.links-internal-check: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.links
src/content/en/pastebin/2018/07/13/guixbuilder.links-internal-check: src/content/en/pastebin/2018/07/13/guixbuilder.links
src/content/en/pastebin/2018/07/13/nix-strpad.links-internal-check: src/content/en/pastebin/2018/07/13/nix-strpad.links
src/content/en/pastebin/2018/07/25/nix-exps.links-internal-check: src/content/en/pastebin/2018/07/25/nix-exps.links
src/content/en/pastebin/2018/07/25/nix-showdrv.links-internal-check: src/content/en/pastebin/2018/07/25/nix-showdrv.links
src/content/en/pastebin/2019/06/08/inconsistent-hash.links-internal-check: src/content/en/pastebin/2019/06/08/inconsistent-hash.links
src/content/en/pastebin/2019/12/29/raku-tuple-type.links-internal-check: src/content/en/pastebin/2019/12/29/raku-tuple-type.links
src/content/en/pastebin/2020/01/04/guix-import-failure.links-internal-check: src/content/en/pastebin/2020/01/04/guix-import-failure.links
src/content/en/pastebin/2020/02/14/guix-shebang.links-internal-check: src/content/en/pastebin/2020/02/14/guix-shebang.links
src/content/en/pastebin/2020/11/27/guix-build-local.links-internal-check: src/content/en/pastebin/2020/11/27/guix-build-local.links
src/content/en/pastebin/2020/12/15/guix-pack-fail.links-internal-check: src/content/en/pastebin/2020/12/15/guix-pack-fail.links
src/content/en/pastebin/2021/04/03/naive-slugify-js.links-internal-check: src/content/en/pastebin/2021/04/03/naive-slugify-js.links
src/content/en/pastebin/2021/06/08/reading-session-pt1.links-internal-check: src/content/en/pastebin/2021/06/08/reading-session-pt1.links
src/content/en/pastebin/2021/06/22/curl-wget.links-internal-check: src/content/en/pastebin/2021/06/22/curl-wget.links
src/content/en/pastebin/2021/08/11/h1-spacing.links-internal-check: src/content/en/pastebin/2021/08/11/h1-spacing.links
src/content/en/pastebin/2021/09/02/sicp-3-19.links-internal-check: src/content/en/pastebin/2021/09/02/sicp-3-19.links
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.links-internal-check: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.links
src/content/en/pastebin/2022/07/14/git-cleanup.links-internal-check: src/content/en/pastebin/2022/07/14/git-cleanup.links
src/content/en/pastebin/2023/07/22/funcallable-amop.links-internal-check: src/content/en/pastebin/2023/07/22/funcallable-amop.links
src/content/en/podcast/2020/12/19/test-entry.links-internal-check: src/content/en/podcast/2020/12/19/test-entry.links
src/content/en/screencast/2021/02/07/autoqemu.links-internal-check: src/content/en/screencast/2021/02/07/autoqemu.links
src/content/en/slide/2020/10/19/feature-flags.links-internal-check: src/content/en/slide/2020/10/19/feature-flags.links
src/content/en/slide/2020/11/14/local-first-hype.links-internal-check: src/content/en/slide/2020/11/14/local-first-hype.links
src/content/en/til/2020/08/12/filename-timestamp.links-internal-check: src/content/en/til/2020/08/12/filename-timestamp.links
src/content/en/til/2020/08/13/code-jekyll.links-internal-check: src/content/en/til/2020/08/13/code-jekyll.links
src/content/en/til/2020/08/14/browse-git.links-internal-check: src/content/en/til/2020/08/14/browse-git.links
src/content/en/til/2020/08/16/git-search.links-internal-check: src/content/en/til/2020/08/16/git-search.links
src/content/en/til/2020/08/28/grep-online.links-internal-check: src/content/en/til/2020/08/28/grep-online.links
src/content/en/til/2020/09/04/cli-email-fun-profit.links-internal-check: src/content/en/til/2020/09/04/cli-email-fun-profit.links
src/content/en/til/2020/09/05/oldschool-pr.links-internal-check: src/content/en/til/2020/09/05/oldschool-pr.links
src/content/en/til/2020/10/11/search-git-history.links-internal-check: src/content/en/til/2020/10/11/search-git-history.links
src/content/en/til/2020/11/08/find-broken-symlink.links-internal-check: src/content/en/til/2020/11/08/find-broken-symlink.links
src/content/en/til/2020/11/12/diy-nix-bash-ci.links-internal-check: src/content/en/til/2020/11/12/diy-nix-bash-ci.links
src/content/en/til/2020/11/12/git-bisect-automation.links-internal-check: src/content/en/til/2020/11/12/git-bisect-automation.links
src/content/en/til/2020/11/12/useful-bashvars.links-internal-check: src/content/en/til/2020/11/12/useful-bashvars.links
src/content/en/til/2020/11/14/gpodder-media.links-internal-check: src/content/en/til/2020/11/14/gpodder-media.links
src/content/en/til/2020/11/30/git-notes-ci.links-internal-check: src/content/en/til/2020/11/30/git-notes-ci.links
src/content/en/til/2020/12/15/shellcheck-repo.links-internal-check: src/content/en/til/2020/12/15/shellcheck-repo.links
src/content/en/til/2020/12/29/svg.links-internal-check: src/content/en/til/2020/12/29/svg.links
src/content/en/til/2021/01/12/curl-awk-emails.links-internal-check: src/content/en/til/2021/01/12/curl-awk-emails.links
src/content/en/til/2021/01/17/posix-shebang.links-internal-check: src/content/en/til/2021/01/17/posix-shebang.links
src/content/en/til/2021/04/24/cl-generic-precedence.links-internal-check: src/content/en/til/2021/04/24/cl-generic-precedence.links
src/content/en/til/2021/04/24/clojure-autocurry.links-internal-check: src/content/en/til/2021/04/24/clojure-autocurry.links
src/content/en/til/2021/04/24/scm-nif.links-internal-check: src/content/en/til/2021/04/24/scm-nif.links
src/content/en/til/2021/07/23/git-tls-gpg.links-internal-check: src/content/en/til/2021/07/23/git-tls-gpg.links
src/content/en/til/2021/08/11/js-bigint-reviver.links-internal-check: src/content/en/til/2021/08/11/js-bigint-reviver.links
src/content/en/til/2026/09/05/multiline-sh-comments.links-internal-check: src/content/en/til/2026/09/05/multiline-sh-comments.links
src/content/pt/hea/2020/08/12/arquivo-datado.links-internal-check: src/content/pt/hea/2020/08/12/arquivo-datado.links
src/content/en/blog/index.links-internal-check: src/content/en/blog/index.links
src/content/en/pastebin/index.links-internal-check: src/content/en/pastebin/index.links
src/content/en/podcast/index.links-internal-check: src/content/en/podcast/index.links
src/content/en/screencast/index.links-internal-check: src/content/en/screencast/index.links
src/content/en/slide/index.links-internal-check: src/content/en/slide/index.links
src/content/en/til/index.links-internal-check: src/content/en/til/index.links
src/content/pt/hea/index.links-internal-check: src/content/pt/hea/index.links
src/content/en/blog/categories.links-internal-check: src/content/en/blog/categories.links
src/content/en/pastebin/categories.links-internal-check: src/content/en/pastebin/categories.links
src/content/en/podcast/categories.links-internal-check: src/content/en/podcast/categories.links
src/content/en/screencast/categories.links-internal-check: src/content/en/screencast/categories.links
src/content/en/slide/categories.links-internal-check: src/content/en/slide/categories.links
src/content/en/til/categories.links-internal-check: src/content/en/til/categories.links
src/content/pt/hea/categorias.links-internal-check: src/content/pt/hea/categorias.links
src/content/en/index.links-internal-check: src/content/en/index.links
src/content/eo/index.links-internal-check: src/content/eo/index.links
src/content/es/index.links-internal-check: src/content/es/index.links
src/content/fr/index.links-internal-check: src/content/fr/index.links
src/content/pt/index.links-internal-check: src/content/pt/index.links
src/content/en/about.caslinks: src/content/en/about.links
src/content/eo/pri.caslinks: src/content/eo/pri.links
src/content/es/acerca.caslinks: src/content/es/acerca.links
src/content/fr/a-propos.caslinks: src/content/fr/a-propos.links
src/content/pt/sobre.caslinks: src/content/pt/sobre.links
src/content/en/blog/2018/07/17/guix-nixos.caslinks: src/content/en/blog/2018/07/17/guix-nixos.links
src/content/en/blog/2018/08/01/npm-ci-reproducibility.caslinks: src/content/en/blog/2018/08/01/npm-ci-reproducibility.links
src/content/en/blog/2018/12/21/ytdl-subs.caslinks: src/content/en/blog/2018/12/21/ytdl-subs.links
src/content/en/blog/2019/06/02/nixos-stateless-workstation.caslinks: src/content/en/blog/2019/06/02/nixos-stateless-workstation.links
src/content/en/blog/2020/08/10/guix-srht.caslinks: src/content/en/blog/2020/08/10/guix-srht.links
src/content/en/blog/2020/08/31/database-i-wish-i-had.caslinks: src/content/en/blog/2020/08/31/database-i-wish-i-had.links
src/content/en/blog/2020/10/05/cargo2nix.caslinks: src/content/en/blog/2020/10/05/cargo2nix.links
src/content/en/blog/2020/10/05/swift2nix.caslinks: src/content/en/blog/2020/10/05/swift2nix.links
src/content/en/blog/2020/10/19/feature-flags.caslinks: src/content/en/blog/2020/10/19/feature-flags.links
src/content/en/blog/2020/10/20/wrong-interviewing.caslinks: src/content/en/blog/2020/10/20/wrong-interviewing.links
src/content/en/blog/2020/11/07/diy-bugs.caslinks: src/content/en/blog/2020/11/07/diy-bugs.links
src/content/en/blog/2020/11/08/paradigm-shift-review.caslinks: src/content/en/blog/2020/11/08/paradigm-shift-review.links
src/content/en/blog/2020/11/12/database-parsers-trees.caslinks: src/content/en/blog/2020/11/12/database-parsers-trees.links
src/content/en/blog/2020/11/14/local-first-review.caslinks: src/content/en/blog/2020/11/14/local-first-review.links
src/content/en/blog/2021/01/26/remembering-ann.caslinks: src/content/en/blog/2021/01/26/remembering-ann.links
src/content/en/blog/2021/02/17/fallible.caslinks: src/content/en/blog/2021/02/17/fallible.links
src/content/en/blog/2021/04/29/relational-review.caslinks: src/content/en/blog/2021/04/29/relational-review.links
src/content/en/pastebin/2016/04/05/rpn.caslinks: src/content/en/pastebin/2016/04/05/rpn.links
src/content/en/pastebin/2018/07/11/nix-pinning.caslinks: src/content/en/pastebin/2018/07/11/nix-pinning.links
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.caslinks: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.links
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.caslinks: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.links
src/content/en/pastebin/2018/07/13/guixbuilder.caslinks: src/content/en/pastebin/2018/07/13/guixbuilder.links
src/content/en/pastebin/2018/07/13/nix-strpad.caslinks: src/content/en/pastebin/2018/07/13/nix-strpad.links
src/content/en/pastebin/2018/07/25/nix-exps.caslinks: src/content/en/pastebin/2018/07/25/nix-exps.links
src/content/en/pastebin/2018/07/25/nix-showdrv.caslinks: src/content/en/pastebin/2018/07/25/nix-showdrv.links
src/content/en/pastebin/2019/06/08/inconsistent-hash.caslinks: src/content/en/pastebin/2019/06/08/inconsistent-hash.links
src/content/en/pastebin/2019/12/29/raku-tuple-type.caslinks: src/content/en/pastebin/2019/12/29/raku-tuple-type.links
src/content/en/pastebin/2020/01/04/guix-import-failure.caslinks: src/content/en/pastebin/2020/01/04/guix-import-failure.links
src/content/en/pastebin/2020/02/14/guix-shebang.caslinks: src/content/en/pastebin/2020/02/14/guix-shebang.links
src/content/en/pastebin/2020/11/27/guix-build-local.caslinks: src/content/en/pastebin/2020/11/27/guix-build-local.links
src/content/en/pastebin/2020/12/15/guix-pack-fail.caslinks: src/content/en/pastebin/2020/12/15/guix-pack-fail.links
src/content/en/pastebin/2021/04/03/naive-slugify-js.caslinks: src/content/en/pastebin/2021/04/03/naive-slugify-js.links
src/content/en/pastebin/2021/06/08/reading-session-pt1.caslinks: src/content/en/pastebin/2021/06/08/reading-session-pt1.links
src/content/en/pastebin/2021/06/22/curl-wget.caslinks: src/content/en/pastebin/2021/06/22/curl-wget.links
src/content/en/pastebin/2021/08/11/h1-spacing.caslinks: src/content/en/pastebin/2021/08/11/h1-spacing.links
src/content/en/pastebin/2021/09/02/sicp-3-19.caslinks: src/content/en/pastebin/2021/09/02/sicp-3-19.links
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.caslinks: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.links
src/content/en/pastebin/2022/07/14/git-cleanup.caslinks: src/content/en/pastebin/2022/07/14/git-cleanup.links
src/content/en/pastebin/2023/07/22/funcallable-amop.caslinks: src/content/en/pastebin/2023/07/22/funcallable-amop.links
src/content/en/podcast/2020/12/19/test-entry.caslinks: src/content/en/podcast/2020/12/19/test-entry.links
src/content/en/screencast/2021/02/07/autoqemu.caslinks: src/content/en/screencast/2021/02/07/autoqemu.links
src/content/en/slide/2020/10/19/feature-flags.caslinks: src/content/en/slide/2020/10/19/feature-flags.links
src/content/en/slide/2020/11/14/local-first-hype.caslinks: src/content/en/slide/2020/11/14/local-first-hype.links
src/content/en/til/2020/08/12/filename-timestamp.caslinks: src/content/en/til/2020/08/12/filename-timestamp.links
src/content/en/til/2020/08/13/code-jekyll.caslinks: src/content/en/til/2020/08/13/code-jekyll.links
src/content/en/til/2020/08/14/browse-git.caslinks: src/content/en/til/2020/08/14/browse-git.links
src/content/en/til/2020/08/16/git-search.caslinks: src/content/en/til/2020/08/16/git-search.links
src/content/en/til/2020/08/28/grep-online.caslinks: src/content/en/til/2020/08/28/grep-online.links
src/content/en/til/2020/09/04/cli-email-fun-profit.caslinks: src/content/en/til/2020/09/04/cli-email-fun-profit.links
src/content/en/til/2020/09/05/oldschool-pr.caslinks: src/content/en/til/2020/09/05/oldschool-pr.links
src/content/en/til/2020/10/11/search-git-history.caslinks: src/content/en/til/2020/10/11/search-git-history.links
src/content/en/til/2020/11/08/find-broken-symlink.caslinks: src/content/en/til/2020/11/08/find-broken-symlink.links
src/content/en/til/2020/11/12/diy-nix-bash-ci.caslinks: src/content/en/til/2020/11/12/diy-nix-bash-ci.links
src/content/en/til/2020/11/12/git-bisect-automation.caslinks: src/content/en/til/2020/11/12/git-bisect-automation.links
src/content/en/til/2020/11/12/useful-bashvars.caslinks: src/content/en/til/2020/11/12/useful-bashvars.links
src/content/en/til/2020/11/14/gpodder-media.caslinks: src/content/en/til/2020/11/14/gpodder-media.links
src/content/en/til/2020/11/30/git-notes-ci.caslinks: src/content/en/til/2020/11/30/git-notes-ci.links
src/content/en/til/2020/12/15/shellcheck-repo.caslinks: src/content/en/til/2020/12/15/shellcheck-repo.links
src/content/en/til/2020/12/29/svg.caslinks: src/content/en/til/2020/12/29/svg.links
src/content/en/til/2021/01/12/curl-awk-emails.caslinks: src/content/en/til/2021/01/12/curl-awk-emails.links
src/content/en/til/2021/01/17/posix-shebang.caslinks: src/content/en/til/2021/01/17/posix-shebang.links
src/content/en/til/2021/04/24/cl-generic-precedence.caslinks: src/content/en/til/2021/04/24/cl-generic-precedence.links
src/content/en/til/2021/04/24/clojure-autocurry.caslinks: src/content/en/til/2021/04/24/clojure-autocurry.links
src/content/en/til/2021/04/24/scm-nif.caslinks: src/content/en/til/2021/04/24/scm-nif.links
src/content/en/til/2021/07/23/git-tls-gpg.caslinks: src/content/en/til/2021/07/23/git-tls-gpg.links
src/content/en/til/2021/08/11/js-bigint-reviver.caslinks: src/content/en/til/2021/08/11/js-bigint-reviver.links
src/content/en/til/2026/09/05/multiline-sh-comments.caslinks: src/content/en/til/2026/09/05/multiline-sh-comments.links
src/content/pt/hea/2020/08/12/arquivo-datado.caslinks: src/content/pt/hea/2020/08/12/arquivo-datado.links
src/content/en/blog/index.caslinks: src/content/en/blog/index.links
src/content/en/pastebin/index.caslinks: src/content/en/pastebin/index.links
src/content/en/podcast/index.caslinks: src/content/en/podcast/index.links
src/content/en/screencast/index.caslinks: src/content/en/screencast/index.links
src/content/en/slide/index.caslinks: src/content/en/slide/index.links
src/content/en/til/index.caslinks: src/content/en/til/index.links
src/content/pt/hea/index.caslinks: src/content/pt/hea/index.links
src/content/en/blog/categories.caslinks: src/content/en/blog/categories.links
src/content/en/pastebin/categories.caslinks: src/content/en/pastebin/categories.links
src/content/en/podcast/categories.caslinks: src/content/en/podcast/categories.links
src/content/en/screencast/categories.caslinks: src/content/en/screencast/categories.links
src/content/en/slide/categories.caslinks: src/content/en/slide/categories.links
src/content/en/til/categories.caslinks: src/content/en/til/categories.links
src/content/pt/hea/categorias.caslinks: src/content/pt/hea/categorias.links
src/content/en/index.caslinks: src/content/en/index.links
src/content/eo/index.caslinks: src/content/eo/index.links
src/content/es/index.caslinks: src/content/es/index.links
src/content/fr/index.caslinks: src/content/fr/index.links
src/content/pt/index.caslinks: src/content/pt/index.links
src/content/en/blog/2018/07/17/guix-nixos.feedentry: src/content/en/blog/2018/07/17/guix-nixos.json src/content/en/blog/2018/07/17/guix-nixos.htmlbody
src/content/en/blog/2018/08/01/npm-ci-reproducibility.feedentry: src/content/en/blog/2018/08/01/npm-ci-reproducibility.json src/content/en/blog/2018/08/01/npm-ci-reproducibility.htmlbody
src/content/en/blog/2018/12/21/ytdl-subs.feedentry: src/content/en/blog/2018/12/21/ytdl-subs.json src/content/en/blog/2018/12/21/ytdl-subs.htmlbody
src/content/en/blog/2019/06/02/nixos-stateless-workstation.feedentry: src/content/en/blog/2019/06/02/nixos-stateless-workstation.json src/content/en/blog/2019/06/02/nixos-stateless-workstation.htmlbody
src/content/en/blog/2020/08/10/guix-srht.feedentry: src/content/en/blog/2020/08/10/guix-srht.json src/content/en/blog/2020/08/10/guix-srht.htmlbody
src/content/en/blog/2020/08/31/database-i-wish-i-had.feedentry: src/content/en/blog/2020/08/31/database-i-wish-i-had.json src/content/en/blog/2020/08/31/database-i-wish-i-had.htmlbody
src/content/en/blog/2020/10/05/cargo2nix.feedentry: src/content/en/blog/2020/10/05/cargo2nix.json src/content/en/blog/2020/10/05/cargo2nix.htmlbody
src/content/en/blog/2020/10/05/swift2nix.feedentry: src/content/en/blog/2020/10/05/swift2nix.json src/content/en/blog/2020/10/05/swift2nix.htmlbody
src/content/en/blog/2020/10/19/feature-flags.feedentry: src/content/en/blog/2020/10/19/feature-flags.json src/content/en/blog/2020/10/19/feature-flags.htmlbody
src/content/en/blog/2020/10/20/wrong-interviewing.feedentry: src/content/en/blog/2020/10/20/wrong-interviewing.json src/content/en/blog/2020/10/20/wrong-interviewing.htmlbody
src/content/en/blog/2020/11/07/diy-bugs.feedentry: src/content/en/blog/2020/11/07/diy-bugs.json src/content/en/blog/2020/11/07/diy-bugs.htmlbody
src/content/en/blog/2020/11/08/paradigm-shift-review.feedentry: src/content/en/blog/2020/11/08/paradigm-shift-review.json src/content/en/blog/2020/11/08/paradigm-shift-review.htmlbody
src/content/en/blog/2020/11/12/database-parsers-trees.feedentry: src/content/en/blog/2020/11/12/database-parsers-trees.json src/content/en/blog/2020/11/12/database-parsers-trees.htmlbody
src/content/en/blog/2020/11/14/local-first-review.feedentry: src/content/en/blog/2020/11/14/local-first-review.json src/content/en/blog/2020/11/14/local-first-review.htmlbody
src/content/en/blog/2021/01/26/remembering-ann.feedentry: src/content/en/blog/2021/01/26/remembering-ann.json src/content/en/blog/2021/01/26/remembering-ann.htmlbody
src/content/en/blog/2021/02/17/fallible.feedentry: src/content/en/blog/2021/02/17/fallible.json src/content/en/blog/2021/02/17/fallible.htmlbody
src/content/en/blog/2021/04/29/relational-review.feedentry: src/content/en/blog/2021/04/29/relational-review.json src/content/en/blog/2021/04/29/relational-review.htmlbody
src/content/en/pastebin/2016/04/05/rpn.feedentry: src/content/en/pastebin/2016/04/05/rpn.json src/content/en/pastebin/2016/04/05/rpn.htmlbody
src/content/en/pastebin/2018/07/11/nix-pinning.feedentry: src/content/en/pastebin/2018/07/11/nix-pinning.json src/content/en/pastebin/2018/07/11/nix-pinning.htmlbody
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.feedentry: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json src/content/en/pastebin/2018/07/13/guix-nixos-systemd.htmlbody
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.feedentry: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json src/content/en/pastebin/2018/07/13/guixbuilder-nixos.htmlbody
src/content/en/pastebin/2018/07/13/guixbuilder.feedentry: src/content/en/pastebin/2018/07/13/guixbuilder.json src/content/en/pastebin/2018/07/13/guixbuilder.htmlbody
src/content/en/pastebin/2018/07/13/nix-strpad.feedentry: src/content/en/pastebin/2018/07/13/nix-strpad.json src/content/en/pastebin/2018/07/13/nix-strpad.htmlbody
src/content/en/pastebin/2018/07/25/nix-exps.feedentry: src/content/en/pastebin/2018/07/25/nix-exps.json src/content/en/pastebin/2018/07/25/nix-exps.htmlbody
src/content/en/pastebin/2018/07/25/nix-showdrv.feedentry: src/content/en/pastebin/2018/07/25/nix-showdrv.json src/content/en/pastebin/2018/07/25/nix-showdrv.htmlbody
src/content/en/pastebin/2019/06/08/inconsistent-hash.feedentry: src/content/en/pastebin/2019/06/08/inconsistent-hash.json src/content/en/pastebin/2019/06/08/inconsistent-hash.htmlbody
src/content/en/pastebin/2019/12/29/raku-tuple-type.feedentry: src/content/en/pastebin/2019/12/29/raku-tuple-type.json src/content/en/pastebin/2019/12/29/raku-tuple-type.htmlbody
src/content/en/pastebin/2020/01/04/guix-import-failure.feedentry: src/content/en/pastebin/2020/01/04/guix-import-failure.json src/content/en/pastebin/2020/01/04/guix-import-failure.htmlbody
src/content/en/pastebin/2020/02/14/guix-shebang.feedentry: src/content/en/pastebin/2020/02/14/guix-shebang.json src/content/en/pastebin/2020/02/14/guix-shebang.htmlbody
src/content/en/pastebin/2020/11/27/guix-build-local.feedentry: src/content/en/pastebin/2020/11/27/guix-build-local.json src/content/en/pastebin/2020/11/27/guix-build-local.htmlbody
src/content/en/pastebin/2020/12/15/guix-pack-fail.feedentry: src/content/en/pastebin/2020/12/15/guix-pack-fail.json src/content/en/pastebin/2020/12/15/guix-pack-fail.htmlbody
src/content/en/pastebin/2021/04/03/naive-slugify-js.feedentry: src/content/en/pastebin/2021/04/03/naive-slugify-js.json src/content/en/pastebin/2021/04/03/naive-slugify-js.htmlbody
src/content/en/pastebin/2021/06/08/reading-session-pt1.feedentry: src/content/en/pastebin/2021/06/08/reading-session-pt1.json src/content/en/pastebin/2021/06/08/reading-session-pt1.htmlbody
src/content/en/pastebin/2021/06/22/curl-wget.feedentry: src/content/en/pastebin/2021/06/22/curl-wget.json src/content/en/pastebin/2021/06/22/curl-wget.htmlbody
src/content/en/pastebin/2021/08/11/h1-spacing.feedentry: src/content/en/pastebin/2021/08/11/h1-spacing.json src/content/en/pastebin/2021/08/11/h1-spacing.htmlbody
src/content/en/pastebin/2021/09/02/sicp-3-19.feedentry: src/content/en/pastebin/2021/09/02/sicp-3-19.json src/content/en/pastebin/2021/09/02/sicp-3-19.htmlbody
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.feedentry: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json src/content/en/pastebin/2021/09/03/sicp-persistent-queue.htmlbody
src/content/en/pastebin/2022/07/14/git-cleanup.feedentry: src/content/en/pastebin/2022/07/14/git-cleanup.json src/content/en/pastebin/2022/07/14/git-cleanup.htmlbody
src/content/en/pastebin/2023/07/22/funcallable-amop.feedentry: src/content/en/pastebin/2023/07/22/funcallable-amop.json src/content/en/pastebin/2023/07/22/funcallable-amop.htmlbody
src/content/en/podcast/2020/12/19/test-entry.feedentry: src/content/en/podcast/2020/12/19/test-entry.json src/content/en/podcast/2020/12/19/test-entry.htmlbody
src/content/en/screencast/2021/02/07/autoqemu.feedentry: src/content/en/screencast/2021/02/07/autoqemu.json src/content/en/screencast/2021/02/07/autoqemu.htmlbody
src/content/en/slide/2020/10/19/feature-flags.feedentry: src/content/en/slide/2020/10/19/feature-flags.json src/content/en/slide/2020/10/19/feature-flags.htmlbody
src/content/en/slide/2020/11/14/local-first-hype.feedentry: src/content/en/slide/2020/11/14/local-first-hype.json src/content/en/slide/2020/11/14/local-first-hype.htmlbody
src/content/en/til/2020/08/12/filename-timestamp.feedentry: src/content/en/til/2020/08/12/filename-timestamp.json src/content/en/til/2020/08/12/filename-timestamp.htmlbody
src/content/en/til/2020/08/13/code-jekyll.feedentry: src/content/en/til/2020/08/13/code-jekyll.json src/content/en/til/2020/08/13/code-jekyll.htmlbody
src/content/en/til/2020/08/14/browse-git.feedentry: src/content/en/til/2020/08/14/browse-git.json src/content/en/til/2020/08/14/browse-git.htmlbody
src/content/en/til/2020/08/16/git-search.feedentry: src/content/en/til/2020/08/16/git-search.json src/content/en/til/2020/08/16/git-search.htmlbody
src/content/en/til/2020/08/28/grep-online.feedentry: src/content/en/til/2020/08/28/grep-online.json src/content/en/til/2020/08/28/grep-online.htmlbody
src/content/en/til/2020/09/04/cli-email-fun-profit.feedentry: src/content/en/til/2020/09/04/cli-email-fun-profit.json src/content/en/til/2020/09/04/cli-email-fun-profit.htmlbody
src/content/en/til/2020/09/05/oldschool-pr.feedentry: src/content/en/til/2020/09/05/oldschool-pr.json src/content/en/til/2020/09/05/oldschool-pr.htmlbody
src/content/en/til/2020/10/11/search-git-history.feedentry: src/content/en/til/2020/10/11/search-git-history.json src/content/en/til/2020/10/11/search-git-history.htmlbody
src/content/en/til/2020/11/08/find-broken-symlink.feedentry: src/content/en/til/2020/11/08/find-broken-symlink.json src/content/en/til/2020/11/08/find-broken-symlink.htmlbody
src/content/en/til/2020/11/12/diy-nix-bash-ci.feedentry: src/content/en/til/2020/11/12/diy-nix-bash-ci.json src/content/en/til/2020/11/12/diy-nix-bash-ci.htmlbody
src/content/en/til/2020/11/12/git-bisect-automation.feedentry: src/content/en/til/2020/11/12/git-bisect-automation.json src/content/en/til/2020/11/12/git-bisect-automation.htmlbody
src/content/en/til/2020/11/12/useful-bashvars.feedentry: src/content/en/til/2020/11/12/useful-bashvars.json src/content/en/til/2020/11/12/useful-bashvars.htmlbody
src/content/en/til/2020/11/14/gpodder-media.feedentry: src/content/en/til/2020/11/14/gpodder-media.json src/content/en/til/2020/11/14/gpodder-media.htmlbody
src/content/en/til/2020/11/30/git-notes-ci.feedentry: src/content/en/til/2020/11/30/git-notes-ci.json src/content/en/til/2020/11/30/git-notes-ci.htmlbody
src/content/en/til/2020/12/15/shellcheck-repo.feedentry: src/content/en/til/2020/12/15/shellcheck-repo.json src/content/en/til/2020/12/15/shellcheck-repo.htmlbody
src/content/en/til/2020/12/29/svg.feedentry: src/content/en/til/2020/12/29/svg.json src/content/en/til/2020/12/29/svg.htmlbody
src/content/en/til/2021/01/12/curl-awk-emails.feedentry: src/content/en/til/2021/01/12/curl-awk-emails.json src/content/en/til/2021/01/12/curl-awk-emails.htmlbody
src/content/en/til/2021/01/17/posix-shebang.feedentry: src/content/en/til/2021/01/17/posix-shebang.json src/content/en/til/2021/01/17/posix-shebang.htmlbody
src/content/en/til/2021/04/24/cl-generic-precedence.feedentry: src/content/en/til/2021/04/24/cl-generic-precedence.json src/content/en/til/2021/04/24/cl-generic-precedence.htmlbody
src/content/en/til/2021/04/24/clojure-autocurry.feedentry: src/content/en/til/2021/04/24/clojure-autocurry.json src/content/en/til/2021/04/24/clojure-autocurry.htmlbody
src/content/en/til/2021/04/24/scm-nif.feedentry: src/content/en/til/2021/04/24/scm-nif.json src/content/en/til/2021/04/24/scm-nif.htmlbody
src/content/en/til/2021/07/23/git-tls-gpg.feedentry: src/content/en/til/2021/07/23/git-tls-gpg.json src/content/en/til/2021/07/23/git-tls-gpg.htmlbody
src/content/en/til/2021/08/11/js-bigint-reviver.feedentry: src/content/en/til/2021/08/11/js-bigint-reviver.json src/content/en/til/2021/08/11/js-bigint-reviver.htmlbody
src/content/en/til/2026/09/05/multiline-sh-comments.feedentry: src/content/en/til/2026/09/05/multiline-sh-comments.json src/content/en/til/2026/09/05/multiline-sh-comments.htmlbody
src/content/pt/hea/2020/08/12/arquivo-datado.feedentry: src/content/pt/hea/2020/08/12/arquivo-datado.json src/content/pt/hea/2020/08/12/arquivo-datado.htmlbody
src/content/en/blog/2018/07/17/guix-nixos.sortdata: src/content/en/blog/2018/07/17/guix-nixos.json
src/content/en/blog/2018/08/01/npm-ci-reproducibility.sortdata: src/content/en/blog/2018/08/01/npm-ci-reproducibility.json
src/content/en/blog/2018/12/21/ytdl-subs.sortdata: src/content/en/blog/2018/12/21/ytdl-subs.json
src/content/en/blog/2019/06/02/nixos-stateless-workstation.sortdata: src/content/en/blog/2019/06/02/nixos-stateless-workstation.json
src/content/en/blog/2020/08/10/guix-srht.sortdata: src/content/en/blog/2020/08/10/guix-srht.json
src/content/en/blog/2020/08/31/database-i-wish-i-had.sortdata: src/content/en/blog/2020/08/31/database-i-wish-i-had.json
src/content/en/blog/2020/10/05/cargo2nix.sortdata: src/content/en/blog/2020/10/05/cargo2nix.json
src/content/en/blog/2020/10/05/swift2nix.sortdata: src/content/en/blog/2020/10/05/swift2nix.json
src/content/en/blog/2020/10/19/feature-flags.sortdata: src/content/en/blog/2020/10/19/feature-flags.json
src/content/en/blog/2020/10/20/wrong-interviewing.sortdata: src/content/en/blog/2020/10/20/wrong-interviewing.json
src/content/en/blog/2020/11/07/diy-bugs.sortdata: src/content/en/blog/2020/11/07/diy-bugs.json
src/content/en/blog/2020/11/08/paradigm-shift-review.sortdata: src/content/en/blog/2020/11/08/paradigm-shift-review.json
src/content/en/blog/2020/11/12/database-parsers-trees.sortdata: src/content/en/blog/2020/11/12/database-parsers-trees.json
src/content/en/blog/2020/11/14/local-first-review.sortdata: src/content/en/blog/2020/11/14/local-first-review.json
src/content/en/blog/2021/01/26/remembering-ann.sortdata: src/content/en/blog/2021/01/26/remembering-ann.json
src/content/en/blog/2021/02/17/fallible.sortdata: src/content/en/blog/2021/02/17/fallible.json
src/content/en/blog/2021/04/29/relational-review.sortdata: src/content/en/blog/2021/04/29/relational-review.json
src/content/en/pastebin/2016/04/05/rpn.sortdata: src/content/en/pastebin/2016/04/05/rpn.json
src/content/en/pastebin/2018/07/11/nix-pinning.sortdata: src/content/en/pastebin/2018/07/11/nix-pinning.json
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.sortdata: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.sortdata: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json
src/content/en/pastebin/2018/07/13/guixbuilder.sortdata: src/content/en/pastebin/2018/07/13/guixbuilder.json
src/content/en/pastebin/2018/07/13/nix-strpad.sortdata: src/content/en/pastebin/2018/07/13/nix-strpad.json
src/content/en/pastebin/2018/07/25/nix-exps.sortdata: src/content/en/pastebin/2018/07/25/nix-exps.json
src/content/en/pastebin/2018/07/25/nix-showdrv.sortdata: src/content/en/pastebin/2018/07/25/nix-showdrv.json
src/content/en/pastebin/2019/06/08/inconsistent-hash.sortdata: src/content/en/pastebin/2019/06/08/inconsistent-hash.json
src/content/en/pastebin/2019/12/29/raku-tuple-type.sortdata: src/content/en/pastebin/2019/12/29/raku-tuple-type.json
src/content/en/pastebin/2020/01/04/guix-import-failure.sortdata: src/content/en/pastebin/2020/01/04/guix-import-failure.json
src/content/en/pastebin/2020/02/14/guix-shebang.sortdata: src/content/en/pastebin/2020/02/14/guix-shebang.json
src/content/en/pastebin/2020/11/27/guix-build-local.sortdata: src/content/en/pastebin/2020/11/27/guix-build-local.json
src/content/en/pastebin/2020/12/15/guix-pack-fail.sortdata: src/content/en/pastebin/2020/12/15/guix-pack-fail.json
src/content/en/pastebin/2021/04/03/naive-slugify-js.sortdata: src/content/en/pastebin/2021/04/03/naive-slugify-js.json
src/content/en/pastebin/2021/06/08/reading-session-pt1.sortdata: src/content/en/pastebin/2021/06/08/reading-session-pt1.json
src/content/en/pastebin/2021/06/22/curl-wget.sortdata: src/content/en/pastebin/2021/06/22/curl-wget.json
src/content/en/pastebin/2021/08/11/h1-spacing.sortdata: src/content/en/pastebin/2021/08/11/h1-spacing.json
src/content/en/pastebin/2021/09/02/sicp-3-19.sortdata: src/content/en/pastebin/2021/09/02/sicp-3-19.json
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.sortdata: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json
src/content/en/pastebin/2022/07/14/git-cleanup.sortdata: src/content/en/pastebin/2022/07/14/git-cleanup.json
src/content/en/pastebin/2023/07/22/funcallable-amop.sortdata: src/content/en/pastebin/2023/07/22/funcallable-amop.json
src/content/en/podcast/2020/12/19/test-entry.sortdata: src/content/en/podcast/2020/12/19/test-entry.json
src/content/en/screencast/2021/02/07/autoqemu.sortdata: src/content/en/screencast/2021/02/07/autoqemu.json
src/content/en/slide/2020/10/19/feature-flags.sortdata: src/content/en/slide/2020/10/19/feature-flags.json
src/content/en/slide/2020/11/14/local-first-hype.sortdata: src/content/en/slide/2020/11/14/local-first-hype.json
src/content/en/til/2020/08/12/filename-timestamp.sortdata: src/content/en/til/2020/08/12/filename-timestamp.json
src/content/en/til/2020/08/13/code-jekyll.sortdata: src/content/en/til/2020/08/13/code-jekyll.json
src/content/en/til/2020/08/14/browse-git.sortdata: src/content/en/til/2020/08/14/browse-git.json
src/content/en/til/2020/08/16/git-search.sortdata: src/content/en/til/2020/08/16/git-search.json
src/content/en/til/2020/08/28/grep-online.sortdata: src/content/en/til/2020/08/28/grep-online.json
src/content/en/til/2020/09/04/cli-email-fun-profit.sortdata: src/content/en/til/2020/09/04/cli-email-fun-profit.json
src/content/en/til/2020/09/05/oldschool-pr.sortdata: src/content/en/til/2020/09/05/oldschool-pr.json
src/content/en/til/2020/10/11/search-git-history.sortdata: src/content/en/til/2020/10/11/search-git-history.json
src/content/en/til/2020/11/08/find-broken-symlink.sortdata: src/content/en/til/2020/11/08/find-broken-symlink.json
src/content/en/til/2020/11/12/diy-nix-bash-ci.sortdata: src/content/en/til/2020/11/12/diy-nix-bash-ci.json
src/content/en/til/2020/11/12/git-bisect-automation.sortdata: src/content/en/til/2020/11/12/git-bisect-automation.json
src/content/en/til/2020/11/12/useful-bashvars.sortdata: src/content/en/til/2020/11/12/useful-bashvars.json
src/content/en/til/2020/11/14/gpodder-media.sortdata: src/content/en/til/2020/11/14/gpodder-media.json
src/content/en/til/2020/11/30/git-notes-ci.sortdata: src/content/en/til/2020/11/30/git-notes-ci.json
src/content/en/til/2020/12/15/shellcheck-repo.sortdata: src/content/en/til/2020/12/15/shellcheck-repo.json
src/content/en/til/2020/12/29/svg.sortdata: src/content/en/til/2020/12/29/svg.json
src/content/en/til/2021/01/12/curl-awk-emails.sortdata: src/content/en/til/2021/01/12/curl-awk-emails.json
src/content/en/til/2021/01/17/posix-shebang.sortdata: src/content/en/til/2021/01/17/posix-shebang.json
src/content/en/til/2021/04/24/cl-generic-precedence.sortdata: src/content/en/til/2021/04/24/cl-generic-precedence.json
src/content/en/til/2021/04/24/clojure-autocurry.sortdata: src/content/en/til/2021/04/24/clojure-autocurry.json
src/content/en/til/2021/04/24/scm-nif.sortdata: src/content/en/til/2021/04/24/scm-nif.json
src/content/en/til/2021/07/23/git-tls-gpg.sortdata: src/content/en/til/2021/07/23/git-tls-gpg.json
src/content/en/til/2021/08/11/js-bigint-reviver.sortdata: src/content/en/til/2021/08/11/js-bigint-reviver.json
src/content/en/til/2026/09/05/multiline-sh-comments.sortdata: src/content/en/til/2026/09/05/multiline-sh-comments.json
src/content/pt/hea/2020/08/12/arquivo-datado.sortdata: src/content/pt/hea/2020/08/12/arquivo-datado.json
src/content/en/blog/2018/07/17/guix-nixos.html: src/content/en/blog/2018/07/17/guix-nixos.prevnext
src/content/en/blog/2018/08/01/npm-ci-reproducibility.html: src/content/en/blog/2018/08/01/npm-ci-reproducibility.prevnext
src/content/en/blog/2018/12/21/ytdl-subs.html: src/content/en/blog/2018/12/21/ytdl-subs.prevnext
src/content/en/blog/2019/06/02/nixos-stateless-workstation.html: src/content/en/blog/2019/06/02/nixos-stateless-workstation.prevnext
src/content/en/blog/2020/08/10/guix-srht.html: src/content/en/blog/2020/08/10/guix-srht.prevnext
src/content/en/blog/2020/08/31/database-i-wish-i-had.html: src/content/en/blog/2020/08/31/database-i-wish-i-had.prevnext
src/content/en/blog/2020/10/05/cargo2nix.html: src/content/en/blog/2020/10/05/cargo2nix.prevnext
src/content/en/blog/2020/10/05/swift2nix.html: src/content/en/blog/2020/10/05/swift2nix.prevnext
src/content/en/blog/2020/10/19/feature-flags.html: src/content/en/blog/2020/10/19/feature-flags.prevnext
src/content/en/blog/2020/10/20/wrong-interviewing.html: src/content/en/blog/2020/10/20/wrong-interviewing.prevnext
src/content/en/blog/2020/11/07/diy-bugs.html: src/content/en/blog/2020/11/07/diy-bugs.prevnext
src/content/en/blog/2020/11/08/paradigm-shift-review.html: src/content/en/blog/2020/11/08/paradigm-shift-review.prevnext
src/content/en/blog/2020/11/12/database-parsers-trees.html: src/content/en/blog/2020/11/12/database-parsers-trees.prevnext
src/content/en/blog/2020/11/14/local-first-review.html: src/content/en/blog/2020/11/14/local-first-review.prevnext
src/content/en/blog/2021/01/26/remembering-ann.html: src/content/en/blog/2021/01/26/remembering-ann.prevnext
src/content/en/blog/2021/02/17/fallible.html: src/content/en/blog/2021/02/17/fallible.prevnext
src/content/en/blog/2021/04/29/relational-review.html: src/content/en/blog/2021/04/29/relational-review.prevnext
src/content/en/pastebin/2016/04/05/rpn.html: src/content/en/pastebin/2016/04/05/rpn.prevnext
src/content/en/pastebin/2018/07/11/nix-pinning.html: src/content/en/pastebin/2018/07/11/nix-pinning.prevnext
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.html: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.prevnext
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.html: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.prevnext
src/content/en/pastebin/2018/07/13/guixbuilder.html: src/content/en/pastebin/2018/07/13/guixbuilder.prevnext
src/content/en/pastebin/2018/07/13/nix-strpad.html: src/content/en/pastebin/2018/07/13/nix-strpad.prevnext
src/content/en/pastebin/2018/07/25/nix-exps.html: src/content/en/pastebin/2018/07/25/nix-exps.prevnext
src/content/en/pastebin/2018/07/25/nix-showdrv.html: src/content/en/pastebin/2018/07/25/nix-showdrv.prevnext
src/content/en/pastebin/2019/06/08/inconsistent-hash.html: src/content/en/pastebin/2019/06/08/inconsistent-hash.prevnext
src/content/en/pastebin/2019/12/29/raku-tuple-type.html: src/content/en/pastebin/2019/12/29/raku-tuple-type.prevnext
src/content/en/pastebin/2020/01/04/guix-import-failure.html: src/content/en/pastebin/2020/01/04/guix-import-failure.prevnext
src/content/en/pastebin/2020/02/14/guix-shebang.html: src/content/en/pastebin/2020/02/14/guix-shebang.prevnext
src/content/en/pastebin/2020/11/27/guix-build-local.html: src/content/en/pastebin/2020/11/27/guix-build-local.prevnext
src/content/en/pastebin/2020/12/15/guix-pack-fail.html: src/content/en/pastebin/2020/12/15/guix-pack-fail.prevnext
src/content/en/pastebin/2021/04/03/naive-slugify-js.html: src/content/en/pastebin/2021/04/03/naive-slugify-js.prevnext
src/content/en/pastebin/2021/06/08/reading-session-pt1.html: src/content/en/pastebin/2021/06/08/reading-session-pt1.prevnext
src/content/en/pastebin/2021/06/22/curl-wget.html: src/content/en/pastebin/2021/06/22/curl-wget.prevnext
src/content/en/pastebin/2021/08/11/h1-spacing.html: src/content/en/pastebin/2021/08/11/h1-spacing.prevnext
src/content/en/pastebin/2021/09/02/sicp-3-19.html: src/content/en/pastebin/2021/09/02/sicp-3-19.prevnext
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.html: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.prevnext
src/content/en/pastebin/2022/07/14/git-cleanup.html: src/content/en/pastebin/2022/07/14/git-cleanup.prevnext
src/content/en/pastebin/2023/07/22/funcallable-amop.html: src/content/en/pastebin/2023/07/22/funcallable-amop.prevnext
src/content/en/podcast/2020/12/19/test-entry.html: src/content/en/podcast/2020/12/19/test-entry.prevnext
src/content/en/screencast/2021/02/07/autoqemu.html: src/content/en/screencast/2021/02/07/autoqemu.prevnext
src/content/en/slide/2020/10/19/feature-flags.html: src/content/en/slide/2020/10/19/feature-flags.prevnext
src/content/en/slide/2020/11/14/local-first-hype.html: src/content/en/slide/2020/11/14/local-first-hype.prevnext
src/content/en/til/2020/08/12/filename-timestamp.html: src/content/en/til/2020/08/12/filename-timestamp.prevnext
src/content/en/til/2020/08/13/code-jekyll.html: src/content/en/til/2020/08/13/code-jekyll.prevnext
src/content/en/til/2020/08/14/browse-git.html: src/content/en/til/2020/08/14/browse-git.prevnext
src/content/en/til/2020/08/16/git-search.html: src/content/en/til/2020/08/16/git-search.prevnext
src/content/en/til/2020/08/28/grep-online.html: src/content/en/til/2020/08/28/grep-online.prevnext
src/content/en/til/2020/09/04/cli-email-fun-profit.html: src/content/en/til/2020/09/04/cli-email-fun-profit.prevnext
src/content/en/til/2020/09/05/oldschool-pr.html: src/content/en/til/2020/09/05/oldschool-pr.prevnext
src/content/en/til/2020/10/11/search-git-history.html: src/content/en/til/2020/10/11/search-git-history.prevnext
src/content/en/til/2020/11/08/find-broken-symlink.html: src/content/en/til/2020/11/08/find-broken-symlink.prevnext
src/content/en/til/2020/11/12/diy-nix-bash-ci.html: src/content/en/til/2020/11/12/diy-nix-bash-ci.prevnext
src/content/en/til/2020/11/12/git-bisect-automation.html: src/content/en/til/2020/11/12/git-bisect-automation.prevnext
src/content/en/til/2020/11/12/useful-bashvars.html: src/content/en/til/2020/11/12/useful-bashvars.prevnext
src/content/en/til/2020/11/14/gpodder-media.html: src/content/en/til/2020/11/14/gpodder-media.prevnext
src/content/en/til/2020/11/30/git-notes-ci.html: src/content/en/til/2020/11/30/git-notes-ci.prevnext
src/content/en/til/2020/12/15/shellcheck-repo.html: src/content/en/til/2020/12/15/shellcheck-repo.prevnext
src/content/en/til/2020/12/29/svg.html: src/content/en/til/2020/12/29/svg.prevnext
src/content/en/til/2021/01/12/curl-awk-emails.html: src/content/en/til/2021/01/12/curl-awk-emails.prevnext
src/content/en/til/2021/01/17/posix-shebang.html: src/content/en/til/2021/01/17/posix-shebang.prevnext
src/content/en/til/2021/04/24/cl-generic-precedence.html: src/content/en/til/2021/04/24/cl-generic-precedence.prevnext
src/content/en/til/2021/04/24/clojure-autocurry.html: src/content/en/til/2021/04/24/clojure-autocurry.prevnext
src/content/en/til/2021/04/24/scm-nif.html: src/content/en/til/2021/04/24/scm-nif.prevnext
src/content/en/til/2021/07/23/git-tls-gpg.html: src/content/en/til/2021/07/23/git-tls-gpg.prevnext
src/content/en/til/2021/08/11/js-bigint-reviver.html: src/content/en/til/2021/08/11/js-bigint-reviver.prevnext
src/content/en/til/2026/09/05/multiline-sh-comments.html: src/content/en/til/2026/09/05/multiline-sh-comments.prevnext
src/content/pt/hea/2020/08/12/arquivo-datado.html: src/content/pt/hea/2020/08/12/arquivo-datado.prevnext
src/content/en/about.html: src/content/en/about.comments
src/content/eo/pri.html: src/content/eo/pri.comments
src/content/es/acerca.html: src/content/es/acerca.comments
src/content/fr/a-propos.html: src/content/fr/a-propos.comments
src/content/pt/sobre.html: src/content/pt/sobre.comments
src/content/en/blog/2018/07/17/guix-nixos.html: src/content/en/blog/2018/07/17/guix-nixos.comments
src/content/en/blog/2018/08/01/npm-ci-reproducibility.html: src/content/en/blog/2018/08/01/npm-ci-reproducibility.comments
src/content/en/blog/2018/12/21/ytdl-subs.html: src/content/en/blog/2018/12/21/ytdl-subs.comments
src/content/en/blog/2019/06/02/nixos-stateless-workstation.html: src/content/en/blog/2019/06/02/nixos-stateless-workstation.comments
src/content/en/blog/2020/08/10/guix-srht.html: src/content/en/blog/2020/08/10/guix-srht.comments
src/content/en/blog/2020/08/31/database-i-wish-i-had.html: src/content/en/blog/2020/08/31/database-i-wish-i-had.comments
src/content/en/blog/2020/10/05/cargo2nix.html: src/content/en/blog/2020/10/05/cargo2nix.comments
src/content/en/blog/2020/10/05/swift2nix.html: src/content/en/blog/2020/10/05/swift2nix.comments
src/content/en/blog/2020/10/19/feature-flags.html: src/content/en/blog/2020/10/19/feature-flags.comments
src/content/en/blog/2020/10/20/wrong-interviewing.html: src/content/en/blog/2020/10/20/wrong-interviewing.comments
src/content/en/blog/2020/11/07/diy-bugs.html: src/content/en/blog/2020/11/07/diy-bugs.comments
src/content/en/blog/2020/11/08/paradigm-shift-review.html: src/content/en/blog/2020/11/08/paradigm-shift-review.comments
src/content/en/blog/2020/11/12/database-parsers-trees.html: src/content/en/blog/2020/11/12/database-parsers-trees.comments
src/content/en/blog/2020/11/14/local-first-review.html: src/content/en/blog/2020/11/14/local-first-review.comments
src/content/en/blog/2021/01/26/remembering-ann.html: src/content/en/blog/2021/01/26/remembering-ann.comments
src/content/en/blog/2021/02/17/fallible.html: src/content/en/blog/2021/02/17/fallible.comments
src/content/en/blog/2021/04/29/relational-review.html: src/content/en/blog/2021/04/29/relational-review.comments
src/content/en/pastebin/2016/04/05/rpn.html: src/content/en/pastebin/2016/04/05/rpn.comments
src/content/en/pastebin/2018/07/11/nix-pinning.html: src/content/en/pastebin/2018/07/11/nix-pinning.comments
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.html: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.comments
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.html: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.comments
src/content/en/pastebin/2018/07/13/guixbuilder.html: src/content/en/pastebin/2018/07/13/guixbuilder.comments
src/content/en/pastebin/2018/07/13/nix-strpad.html: src/content/en/pastebin/2018/07/13/nix-strpad.comments
src/content/en/pastebin/2018/07/25/nix-exps.html: src/content/en/pastebin/2018/07/25/nix-exps.comments
src/content/en/pastebin/2018/07/25/nix-showdrv.html: src/content/en/pastebin/2018/07/25/nix-showdrv.comments
src/content/en/pastebin/2019/06/08/inconsistent-hash.html: src/content/en/pastebin/2019/06/08/inconsistent-hash.comments
src/content/en/pastebin/2019/12/29/raku-tuple-type.html: src/content/en/pastebin/2019/12/29/raku-tuple-type.comments
src/content/en/pastebin/2020/01/04/guix-import-failure.html: src/content/en/pastebin/2020/01/04/guix-import-failure.comments
src/content/en/pastebin/2020/02/14/guix-shebang.html: src/content/en/pastebin/2020/02/14/guix-shebang.comments
src/content/en/pastebin/2020/11/27/guix-build-local.html: src/content/en/pastebin/2020/11/27/guix-build-local.comments
src/content/en/pastebin/2020/12/15/guix-pack-fail.html: src/content/en/pastebin/2020/12/15/guix-pack-fail.comments
src/content/en/pastebin/2021/04/03/naive-slugify-js.html: src/content/en/pastebin/2021/04/03/naive-slugify-js.comments
src/content/en/pastebin/2021/06/08/reading-session-pt1.html: src/content/en/pastebin/2021/06/08/reading-session-pt1.comments
src/content/en/pastebin/2021/06/22/curl-wget.html: src/content/en/pastebin/2021/06/22/curl-wget.comments
src/content/en/pastebin/2021/08/11/h1-spacing.html: src/content/en/pastebin/2021/08/11/h1-spacing.comments
src/content/en/pastebin/2021/09/02/sicp-3-19.html: src/content/en/pastebin/2021/09/02/sicp-3-19.comments
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.html: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.comments
src/content/en/pastebin/2022/07/14/git-cleanup.html: src/content/en/pastebin/2022/07/14/git-cleanup.comments
src/content/en/pastebin/2023/07/22/funcallable-amop.html: src/content/en/pastebin/2023/07/22/funcallable-amop.comments
src/content/en/podcast/2020/12/19/test-entry.html: src/content/en/podcast/2020/12/19/test-entry.comments
src/content/en/screencast/2021/02/07/autoqemu.html: src/content/en/screencast/2021/02/07/autoqemu.comments
src/content/en/slide/2020/10/19/feature-flags.html: src/content/en/slide/2020/10/19/feature-flags.comments
src/content/en/slide/2020/11/14/local-first-hype.html: src/content/en/slide/2020/11/14/local-first-hype.comments
src/content/en/til/2020/08/12/filename-timestamp.html: src/content/en/til/2020/08/12/filename-timestamp.comments
src/content/en/til/2020/08/13/code-jekyll.html: src/content/en/til/2020/08/13/code-jekyll.comments
src/content/en/til/2020/08/14/browse-git.html: src/content/en/til/2020/08/14/browse-git.comments
src/content/en/til/2020/08/16/git-search.html: src/content/en/til/2020/08/16/git-search.comments
src/content/en/til/2020/08/28/grep-online.html: src/content/en/til/2020/08/28/grep-online.comments
src/content/en/til/2020/09/04/cli-email-fun-profit.html: src/content/en/til/2020/09/04/cli-email-fun-profit.comments
src/content/en/til/2020/09/05/oldschool-pr.html: src/content/en/til/2020/09/05/oldschool-pr.comments
src/content/en/til/2020/10/11/search-git-history.html: src/content/en/til/2020/10/11/search-git-history.comments
src/content/en/til/2020/11/08/find-broken-symlink.html: src/content/en/til/2020/11/08/find-broken-symlink.comments
src/content/en/til/2020/11/12/diy-nix-bash-ci.html: src/content/en/til/2020/11/12/diy-nix-bash-ci.comments
src/content/en/til/2020/11/12/git-bisect-automation.html: src/content/en/til/2020/11/12/git-bisect-automation.comments
src/content/en/til/2020/11/12/useful-bashvars.html: src/content/en/til/2020/11/12/useful-bashvars.comments
src/content/en/til/2020/11/14/gpodder-media.html: src/content/en/til/2020/11/14/gpodder-media.comments
src/content/en/til/2020/11/30/git-notes-ci.html: src/content/en/til/2020/11/30/git-notes-ci.comments
src/content/en/til/2020/12/15/shellcheck-repo.html: src/content/en/til/2020/12/15/shellcheck-repo.comments
src/content/en/til/2020/12/29/svg.html: src/content/en/til/2020/12/29/svg.comments
src/content/en/til/2021/01/12/curl-awk-emails.html: src/content/en/til/2021/01/12/curl-awk-emails.comments
src/content/en/til/2021/01/17/posix-shebang.html: src/content/en/til/2021/01/17/posix-shebang.comments
src/content/en/til/2021/04/24/cl-generic-precedence.html: src/content/en/til/2021/04/24/cl-generic-precedence.comments
src/content/en/til/2021/04/24/clojure-autocurry.html: src/content/en/til/2021/04/24/clojure-autocurry.comments
src/content/en/til/2021/04/24/scm-nif.html: src/content/en/til/2021/04/24/scm-nif.comments
src/content/en/til/2021/07/23/git-tls-gpg.html: src/content/en/til/2021/07/23/git-tls-gpg.comments
src/content/en/til/2021/08/11/js-bigint-reviver.html: src/content/en/til/2021/08/11/js-bigint-reviver.comments
src/content/en/til/2026/09/05/multiline-sh-comments.html: src/content/en/til/2026/09/05/multiline-sh-comments.comments
src/content/pt/hea/2020/08/12/arquivo-datado.html: src/content/pt/hea/2020/08/12/arquivo-datado.comments
src/content/en/blog/index.html: src/content/en/blog/index.comments
src/content/en/pastebin/index.html: src/content/en/pastebin/index.comments
src/content/en/podcast/index.html: src/content/en/podcast/index.comments
src/content/en/screencast/index.html: src/content/en/screencast/index.comments
src/content/en/slide/index.html: src/content/en/slide/index.comments
src/content/en/til/index.html: src/content/en/til/index.comments
src/content/pt/hea/index.html: src/content/pt/hea/index.comments
src/content/en/blog/categories.html: src/content/en/blog/categories.comments
src/content/en/pastebin/categories.html: src/content/en/pastebin/categories.comments
src/content/en/podcast/categories.html: src/content/en/podcast/categories.comments
src/content/en/screencast/categories.html: src/content/en/screencast/categories.comments
src/content/en/slide/categories.html: src/content/en/slide/categories.comments
src/content/en/til/categories.html: src/content/en/til/categories.comments
src/content/pt/hea/categorias.html: src/content/pt/hea/categorias.comments
src/content/en/index.html: src/content/en/index.comments
src/content/eo/index.html: src/content/eo/index.comments
src/content/es/index.html: src/content/es/index.comments
src/content/fr/index.html: src/content/fr/index.comments
src/content/pt/index.html: src/content/pt/index.comments
src/content/en/blog/2018/07/17/guix-nixos.categorydata: src/content/en/blog/2018/07/17/guix-nixos.json
src/content/en/blog/2018/08/01/npm-ci-reproducibility.categorydata: src/content/en/blog/2018/08/01/npm-ci-reproducibility.json
src/content/en/blog/2018/12/21/ytdl-subs.categorydata: src/content/en/blog/2018/12/21/ytdl-subs.json
src/content/en/blog/2019/06/02/nixos-stateless-workstation.categorydata: src/content/en/blog/2019/06/02/nixos-stateless-workstation.json
src/content/en/blog/2020/08/10/guix-srht.categorydata: src/content/en/blog/2020/08/10/guix-srht.json
src/content/en/blog/2020/08/31/database-i-wish-i-had.categorydata: src/content/en/blog/2020/08/31/database-i-wish-i-had.json
src/content/en/blog/2020/10/05/cargo2nix.categorydata: src/content/en/blog/2020/10/05/cargo2nix.json
src/content/en/blog/2020/10/05/swift2nix.categorydata: src/content/en/blog/2020/10/05/swift2nix.json
src/content/en/blog/2020/10/19/feature-flags.categorydata: src/content/en/blog/2020/10/19/feature-flags.json
src/content/en/blog/2020/10/20/wrong-interviewing.categorydata: src/content/en/blog/2020/10/20/wrong-interviewing.json
src/content/en/blog/2020/11/07/diy-bugs.categorydata: src/content/en/blog/2020/11/07/diy-bugs.json
src/content/en/blog/2020/11/08/paradigm-shift-review.categorydata: src/content/en/blog/2020/11/08/paradigm-shift-review.json
src/content/en/blog/2020/11/12/database-parsers-trees.categorydata: src/content/en/blog/2020/11/12/database-parsers-trees.json
src/content/en/blog/2020/11/14/local-first-review.categorydata: src/content/en/blog/2020/11/14/local-first-review.json
src/content/en/blog/2021/01/26/remembering-ann.categorydata: src/content/en/blog/2021/01/26/remembering-ann.json
src/content/en/blog/2021/02/17/fallible.categorydata: src/content/en/blog/2021/02/17/fallible.json
src/content/en/blog/2021/04/29/relational-review.categorydata: src/content/en/blog/2021/04/29/relational-review.json
src/content/en/pastebin/2016/04/05/rpn.categorydata: src/content/en/pastebin/2016/04/05/rpn.json
src/content/en/pastebin/2018/07/11/nix-pinning.categorydata: src/content/en/pastebin/2018/07/11/nix-pinning.json
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.categorydata: src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.categorydata: src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json
src/content/en/pastebin/2018/07/13/guixbuilder.categorydata: src/content/en/pastebin/2018/07/13/guixbuilder.json
src/content/en/pastebin/2018/07/13/nix-strpad.categorydata: src/content/en/pastebin/2018/07/13/nix-strpad.json
src/content/en/pastebin/2018/07/25/nix-exps.categorydata: src/content/en/pastebin/2018/07/25/nix-exps.json
src/content/en/pastebin/2018/07/25/nix-showdrv.categorydata: src/content/en/pastebin/2018/07/25/nix-showdrv.json
src/content/en/pastebin/2019/06/08/inconsistent-hash.categorydata: src/content/en/pastebin/2019/06/08/inconsistent-hash.json
src/content/en/pastebin/2019/12/29/raku-tuple-type.categorydata: src/content/en/pastebin/2019/12/29/raku-tuple-type.json
src/content/en/pastebin/2020/01/04/guix-import-failure.categorydata: src/content/en/pastebin/2020/01/04/guix-import-failure.json
src/content/en/pastebin/2020/02/14/guix-shebang.categorydata: src/content/en/pastebin/2020/02/14/guix-shebang.json
src/content/en/pastebin/2020/11/27/guix-build-local.categorydata: src/content/en/pastebin/2020/11/27/guix-build-local.json
src/content/en/pastebin/2020/12/15/guix-pack-fail.categorydata: src/content/en/pastebin/2020/12/15/guix-pack-fail.json
src/content/en/pastebin/2021/04/03/naive-slugify-js.categorydata: src/content/en/pastebin/2021/04/03/naive-slugify-js.json
src/content/en/pastebin/2021/06/08/reading-session-pt1.categorydata: src/content/en/pastebin/2021/06/08/reading-session-pt1.json
src/content/en/pastebin/2021/06/22/curl-wget.categorydata: src/content/en/pastebin/2021/06/22/curl-wget.json
src/content/en/pastebin/2021/08/11/h1-spacing.categorydata: src/content/en/pastebin/2021/08/11/h1-spacing.json
src/content/en/pastebin/2021/09/02/sicp-3-19.categorydata: src/content/en/pastebin/2021/09/02/sicp-3-19.json
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.categorydata: src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json
src/content/en/pastebin/2022/07/14/git-cleanup.categorydata: src/content/en/pastebin/2022/07/14/git-cleanup.json
src/content/en/pastebin/2023/07/22/funcallable-amop.categorydata: src/content/en/pastebin/2023/07/22/funcallable-amop.json
src/content/en/podcast/2020/12/19/test-entry.categorydata: src/content/en/podcast/2020/12/19/test-entry.json
src/content/en/screencast/2021/02/07/autoqemu.categorydata: src/content/en/screencast/2021/02/07/autoqemu.json
src/content/en/slide/2020/10/19/feature-flags.categorydata: src/content/en/slide/2020/10/19/feature-flags.json
src/content/en/slide/2020/11/14/local-first-hype.categorydata: src/content/en/slide/2020/11/14/local-first-hype.json
src/content/en/til/2020/08/12/filename-timestamp.categorydata: src/content/en/til/2020/08/12/filename-timestamp.json
src/content/en/til/2020/08/13/code-jekyll.categorydata: src/content/en/til/2020/08/13/code-jekyll.json
src/content/en/til/2020/08/14/browse-git.categorydata: src/content/en/til/2020/08/14/browse-git.json
src/content/en/til/2020/08/16/git-search.categorydata: src/content/en/til/2020/08/16/git-search.json
src/content/en/til/2020/08/28/grep-online.categorydata: src/content/en/til/2020/08/28/grep-online.json
src/content/en/til/2020/09/04/cli-email-fun-profit.categorydata: src/content/en/til/2020/09/04/cli-email-fun-profit.json
src/content/en/til/2020/09/05/oldschool-pr.categorydata: src/content/en/til/2020/09/05/oldschool-pr.json
src/content/en/til/2020/10/11/search-git-history.categorydata: src/content/en/til/2020/10/11/search-git-history.json
src/content/en/til/2020/11/08/find-broken-symlink.categorydata: src/content/en/til/2020/11/08/find-broken-symlink.json
src/content/en/til/2020/11/12/diy-nix-bash-ci.categorydata: src/content/en/til/2020/11/12/diy-nix-bash-ci.json
src/content/en/til/2020/11/12/git-bisect-automation.categorydata: src/content/en/til/2020/11/12/git-bisect-automation.json
src/content/en/til/2020/11/12/useful-bashvars.categorydata: src/content/en/til/2020/11/12/useful-bashvars.json
src/content/en/til/2020/11/14/gpodder-media.categorydata: src/content/en/til/2020/11/14/gpodder-media.json
src/content/en/til/2020/11/30/git-notes-ci.categorydata: src/content/en/til/2020/11/30/git-notes-ci.json
src/content/en/til/2020/12/15/shellcheck-repo.categorydata: src/content/en/til/2020/12/15/shellcheck-repo.json
src/content/en/til/2020/12/29/svg.categorydata: src/content/en/til/2020/12/29/svg.json
src/content/en/til/2021/01/12/curl-awk-emails.categorydata: src/content/en/til/2021/01/12/curl-awk-emails.json
src/content/en/til/2021/01/17/posix-shebang.categorydata: src/content/en/til/2021/01/17/posix-shebang.json
src/content/en/til/2021/04/24/cl-generic-precedence.categorydata: src/content/en/til/2021/04/24/cl-generic-precedence.json
src/content/en/til/2021/04/24/clojure-autocurry.categorydata: src/content/en/til/2021/04/24/clojure-autocurry.json
src/content/en/til/2021/04/24/scm-nif.categorydata: src/content/en/til/2021/04/24/scm-nif.json
src/content/en/til/2021/07/23/git-tls-gpg.categorydata: src/content/en/til/2021/07/23/git-tls-gpg.json
src/content/en/til/2021/08/11/js-bigint-reviver.categorydata: src/content/en/til/2021/08/11/js-bigint-reviver.json
src/content/en/til/2026/09/05/multiline-sh-comments.categorydata: src/content/en/til/2026/09/05/multiline-sh-comments.json
src/content/pt/hea/2020/08/12/arquivo-datado.categorydata: src/content/pt/hea/2020/08/12/arquivo-datado.json
src/content/en/blog/index.htmlheader src/content/en/blog/index.htmlfooter: src/content/en/blog/index.json
src/content/en/pastebin/index.htmlheader src/content/en/pastebin/index.htmlfooter: src/content/en/pastebin/index.json
src/content/en/podcast/index.htmlheader src/content/en/podcast/index.htmlfooter: src/content/en/podcast/index.json
src/content/en/screencast/index.htmlheader src/content/en/screencast/index.htmlfooter: src/content/en/screencast/index.json
src/content/en/slide/index.htmlheader src/content/en/slide/index.htmlfooter: src/content/en/slide/index.json
src/content/en/til/index.htmlheader src/content/en/til/index.htmlfooter: src/content/en/til/index.json
src/content/pt/hea/index.htmlheader src/content/pt/hea/index.htmlfooter: src/content/pt/hea/index.json
src/content/en/blog/categories.htmlheader src/content/en/blog/categories.htmlfooter: src/content/en/blog/categories.json
src/content/en/pastebin/categories.htmlheader src/content/en/pastebin/categories.htmlfooter: src/content/en/pastebin/categories.json
src/content/en/podcast/categories.htmlheader src/content/en/podcast/categories.htmlfooter: src/content/en/podcast/categories.json
src/content/en/screencast/categories.htmlheader src/content/en/screencast/categories.htmlfooter: src/content/en/screencast/categories.json
src/content/en/slide/categories.htmlheader src/content/en/slide/categories.htmlfooter: src/content/en/slide/categories.json
src/content/en/til/categories.htmlheader src/content/en/til/categories.htmlfooter: src/content/en/til/categories.json
src/content/pt/hea/categorias.htmlheader src/content/pt/hea/categorias.htmlfooter: src/content/pt/hea/categorias.json
src/content/en/index.htmlheader src/content/en/index.htmlfooter: src/content/en/index.json
src/content/eo/index.htmlheader src/content/eo/index.htmlfooter: src/content/eo/index.json
src/content/es/index.htmlheader src/content/es/index.htmlfooter: src/content/es/index.json
src/content/fr/index.htmlheader src/content/fr/index.htmlfooter: src/content/fr/index.json
src/content/pt/index.htmlheader src/content/pt/index.htmlfooter: src/content/pt/index.json
src/content/en/blog/index.htmllisting: src/content/en/blog/index.json
src/content/en/pastebin/index.htmllisting: src/content/en/pastebin/index.json
src/content/en/podcast/index.htmllisting: src/content/en/podcast/index.json
src/content/en/screencast/index.htmllisting: src/content/en/screencast/index.json
src/content/en/slide/index.htmllisting: src/content/en/slide/index.json
src/content/en/til/index.htmllisting: src/content/en/til/index.json
src/content/pt/hea/index.htmllisting: src/content/pt/hea/index.json
src/content/en/blog/categories.htmllisting: src/content/en/blog/categories.json
src/content/en/pastebin/categories.htmllisting: src/content/en/pastebin/categories.json
src/content/en/podcast/categories.htmllisting: src/content/en/podcast/categories.json
src/content/en/screencast/categories.htmllisting: src/content/en/screencast/categories.json
src/content/en/slide/categories.htmllisting: src/content/en/slide/categories.json
src/content/en/til/categories.htmllisting: src/content/en/til/categories.json
src/content/pt/hea/categorias.htmllisting: src/content/pt/hea/categorias.json
src/content/en/index.htmllisting: src/content/en/index.json
src/content/eo/index.htmllisting: src/content/eo/index.json
src/content/es/index.htmllisting: src/content/es/index.json
src/content/fr/index.htmllisting: src/content/fr/index.json
src/content/pt/index.htmllisting: src/content/pt/index.json
src/content/en/blog/index.html: src/content/en/blog/index.htmlheader src/content/en/blog/index.htmlfooter
src/content/en/pastebin/index.html: src/content/en/pastebin/index.htmlheader src/content/en/pastebin/index.htmlfooter
src/content/en/podcast/index.html: src/content/en/podcast/index.htmlheader src/content/en/podcast/index.htmlfooter
src/content/en/screencast/index.html: src/content/en/screencast/index.htmlheader src/content/en/screencast/index.htmlfooter
src/content/en/slide/index.html: src/content/en/slide/index.htmlheader src/content/en/slide/index.htmlfooter
src/content/en/til/index.html: src/content/en/til/index.htmlheader src/content/en/til/index.htmlfooter
src/content/pt/hea/index.html: src/content/pt/hea/index.htmlheader src/content/pt/hea/index.htmlfooter
src/content/en/blog/categories.html: src/content/en/blog/categories.htmlheader src/content/en/blog/categories.htmlfooter
src/content/en/pastebin/categories.html: src/content/en/pastebin/categories.htmlheader src/content/en/pastebin/categories.htmlfooter
src/content/en/podcast/categories.html: src/content/en/podcast/categories.htmlheader src/content/en/podcast/categories.htmlfooter
src/content/en/screencast/categories.html: src/content/en/screencast/categories.htmlheader src/content/en/screencast/categories.htmlfooter
src/content/en/slide/categories.html: src/content/en/slide/categories.htmlheader src/content/en/slide/categories.htmlfooter
src/content/en/til/categories.html: src/content/en/til/categories.htmlheader src/content/en/til/categories.htmlfooter
src/content/pt/hea/categorias.html: src/content/pt/hea/categorias.htmlheader src/content/pt/hea/categorias.htmlfooter
src/content/en/index.html: src/content/en/index.htmlheader src/content/en/index.htmlfooter
src/content/eo/index.html: src/content/eo/index.htmlheader src/content/eo/index.htmlfooter
src/content/es/index.html: src/content/es/index.htmlheader src/content/es/index.htmlfooter
src/content/fr/index.html: src/content/fr/index.htmlheader src/content/fr/index.htmlfooter
src/content/pt/index.html: src/content/pt/index.htmlheader src/content/pt/index.htmlfooter
src/content/en/blog/index.html: src/content/en/blog/index.htmllisting src/content/en/blog/index.htmlbody
src/content/en/pastebin/index.html: src/content/en/pastebin/index.htmllisting src/content/en/pastebin/index.htmlbody
src/content/en/podcast/index.html: src/content/en/podcast/index.htmllisting src/content/en/podcast/index.htmlbody
src/content/en/screencast/index.html: src/content/en/screencast/index.htmllisting src/content/en/screencast/index.htmlbody
src/content/en/slide/index.html: src/content/en/slide/index.htmllisting src/content/en/slide/index.htmlbody
src/content/en/til/index.html: src/content/en/til/index.htmllisting src/content/en/til/index.htmlbody
src/content/pt/hea/index.html: src/content/pt/hea/index.htmllisting src/content/pt/hea/index.htmlbody
src/content/en/blog/categories.html: src/content/en/blog/categories.htmllisting src/content/en/blog/categories.htmlbody
src/content/en/pastebin/categories.html: src/content/en/pastebin/categories.htmllisting src/content/en/pastebin/categories.htmlbody
src/content/en/podcast/categories.html: src/content/en/podcast/categories.htmllisting src/content/en/podcast/categories.htmlbody
src/content/en/screencast/categories.html: src/content/en/screencast/categories.htmllisting src/content/en/screencast/categories.htmlbody
src/content/en/slide/categories.html: src/content/en/slide/categories.htmllisting src/content/en/slide/categories.htmlbody
src/content/en/til/categories.html: src/content/en/til/categories.htmllisting src/content/en/til/categories.htmlbody
src/content/pt/hea/categorias.html: src/content/pt/hea/categorias.htmllisting src/content/pt/hea/categorias.htmlbody
src/content/en/index.html: src/content/en/index.htmllisting src/content/en/index.htmlbody
src/content/eo/index.html: src/content/eo/index.htmllisting src/content/eo/index.htmlbody
src/content/es/index.html: src/content/es/index.htmllisting src/content/es/index.htmlbody
src/content/fr/index.html: src/content/fr/index.htmllisting src/content/fr/index.htmlbody
src/content/pt/index.html: src/content/pt/index.htmllisting src/content/pt/index.htmlbody
src/content/en/podcast/2020/12/19/test-entry.flac.torrent: src/content/en/podcast/2020/12/19/test-entry.flac
src/content/en/podcast/2020/12/19/test-entry.ogg.torrent: src/content/en/podcast/2020/12/19/test-entry.ogg
src/content/en/screencast/2021/02/07/autoqemu.webm.torrent: src/content/en/screencast/2021/02/07/autoqemu.webm
src/content/en/slide/2020/10/19/feature-flags.ps: src/content/en/slide/2020/10/19/feature-flags.eslaides
src/content/en/slide/2020/11/14/local-first-hype.ps: src/content/en/slide/2020/11/14/local-first-hype.eslaides
src/content/en/slide/2020/10/19/feature-flags.pdf: src/content/en/slide/2020/10/19/feature-flags.ps
src/content/en/slide/2020/11/14/local-first-hype.pdf: src/content/en/slide/2020/11/14/local-first-hype.ps
articles.en.blog.adoc = \
src/content/en/blog/2018/07/17/guix-nixos.adoc \
src/content/en/blog/2018/08/01/npm-ci-reproducibility.adoc \
src/content/en/blog/2018/12/21/ytdl-subs.adoc \
src/content/en/blog/2019/06/02/nixos-stateless-workstation.adoc \
src/content/en/blog/2020/08/10/guix-srht.adoc \
src/content/en/blog/2020/08/31/database-i-wish-i-had.adoc \
src/content/en/blog/2020/10/05/cargo2nix.adoc \
src/content/en/blog/2020/10/05/swift2nix.adoc \
src/content/en/blog/2020/10/19/feature-flags.adoc \
src/content/en/blog/2020/10/20/wrong-interviewing.adoc \
src/content/en/blog/2020/11/07/diy-bugs.adoc \
src/content/en/blog/2020/11/08/paradigm-shift-review.adoc \
src/content/en/blog/2020/11/12/database-parsers-trees.adoc \
src/content/en/blog/2020/11/14/local-first-review.adoc \
src/content/en/blog/2021/01/26/remembering-ann.adoc \
src/content/en/blog/2021/02/17/fallible.adoc \
src/content/en/blog/2021/04/29/relational-review.adoc \
articles.en.blog.sortdata = $(articles.en.blog.adoc:.adoc=.sortdata)
articles.en.blog.indexentry = $(articles.en.blog.adoc:.adoc=.indexentry)
articles.en.blog.feedentry = $(articles.en.blog.adoc:.adoc=.feedentry)
articles.en.blog.categorydata = $(articles.en.blog.adoc:.adoc=.categorydata)
articles.en.blog.prevnext = $(articles.en.blog.adoc:.adoc=.prevnext)
articles.en.blog.homeentry = $(articles.en.blog.adoc:.adoc=.homeentry)
src/content/en/blog/2021/04/29/relational-review.prevnext: src/global.json src/content/en/blog/2021/02/17/fallible.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2021/02/17/fallible.json src/global.json > $@
src/content/en/blog/2021/02/17/fallible.prevnext: src/global.json src/content/en/blog/2021/01/26/remembering-ann.json src/content/en/blog/2021/04/29/relational-review.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2021/01/26/remembering-ann.json -n src/content/en/blog/2021/04/29/relational-review.json src/global.json > $@
src/content/en/blog/2021/01/26/remembering-ann.prevnext: src/global.json src/content/en/blog/2020/11/14/local-first-review.json src/content/en/blog/2021/02/17/fallible.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/11/14/local-first-review.json -n src/content/en/blog/2021/02/17/fallible.json src/global.json > $@
src/content/en/blog/2020/11/14/local-first-review.prevnext: src/global.json src/content/en/blog/2020/11/12/database-parsers-trees.json src/content/en/blog/2021/01/26/remembering-ann.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/11/12/database-parsers-trees.json -n src/content/en/blog/2021/01/26/remembering-ann.json src/global.json > $@
src/content/en/blog/2020/11/12/database-parsers-trees.prevnext: src/global.json src/content/en/blog/2020/11/08/paradigm-shift-review.json src/content/en/blog/2020/11/14/local-first-review.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/11/08/paradigm-shift-review.json -n src/content/en/blog/2020/11/14/local-first-review.json src/global.json > $@
src/content/en/blog/2020/11/08/paradigm-shift-review.prevnext: src/global.json src/content/en/blog/2020/11/07/diy-bugs.json src/content/en/blog/2020/11/12/database-parsers-trees.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/11/07/diy-bugs.json -n src/content/en/blog/2020/11/12/database-parsers-trees.json src/global.json > $@
src/content/en/blog/2020/11/07/diy-bugs.prevnext: src/global.json src/content/en/blog/2020/10/20/wrong-interviewing.json src/content/en/blog/2020/11/08/paradigm-shift-review.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/10/20/wrong-interviewing.json -n src/content/en/blog/2020/11/08/paradigm-shift-review.json src/global.json > $@
src/content/en/blog/2020/10/20/wrong-interviewing.prevnext: src/global.json src/content/en/blog/2020/10/19/feature-flags.json src/content/en/blog/2020/11/07/diy-bugs.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/10/19/feature-flags.json -n src/content/en/blog/2020/11/07/diy-bugs.json src/global.json > $@
src/content/en/blog/2020/10/19/feature-flags.prevnext: src/global.json src/content/en/blog/2020/10/05/cargo2nix.json src/content/en/blog/2020/10/20/wrong-interviewing.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/10/05/cargo2nix.json -n src/content/en/blog/2020/10/20/wrong-interviewing.json src/global.json > $@
src/content/en/blog/2020/10/05/cargo2nix.prevnext: src/global.json src/content/en/blog/2020/10/05/swift2nix.json src/content/en/blog/2020/10/19/feature-flags.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/10/05/swift2nix.json -n src/content/en/blog/2020/10/19/feature-flags.json src/global.json > $@
src/content/en/blog/2020/10/05/swift2nix.prevnext: src/global.json src/content/en/blog/2020/08/31/database-i-wish-i-had.json src/content/en/blog/2020/10/05/cargo2nix.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/08/31/database-i-wish-i-had.json -n src/content/en/blog/2020/10/05/cargo2nix.json src/global.json > $@
src/content/en/blog/2020/08/31/database-i-wish-i-had.prevnext: src/global.json src/content/en/blog/2020/08/10/guix-srht.json src/content/en/blog/2020/10/05/swift2nix.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2020/08/10/guix-srht.json -n src/content/en/blog/2020/10/05/swift2nix.json src/global.json > $@
src/content/en/blog/2020/08/10/guix-srht.prevnext: src/global.json src/content/en/blog/2019/06/02/nixos-stateless-workstation.json src/content/en/blog/2020/08/31/database-i-wish-i-had.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2019/06/02/nixos-stateless-workstation.json -n src/content/en/blog/2020/08/31/database-i-wish-i-had.json src/global.json > $@
src/content/en/blog/2019/06/02/nixos-stateless-workstation.prevnext: src/global.json src/content/en/blog/2018/12/21/ytdl-subs.json src/content/en/blog/2020/08/10/guix-srht.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2018/12/21/ytdl-subs.json -n src/content/en/blog/2020/08/10/guix-srht.json src/global.json > $@
src/content/en/blog/2018/12/21/ytdl-subs.prevnext: src/global.json src/content/en/blog/2018/08/01/npm-ci-reproducibility.json src/content/en/blog/2019/06/02/nixos-stateless-workstation.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2018/08/01/npm-ci-reproducibility.json -n src/content/en/blog/2019/06/02/nixos-stateless-workstation.json src/global.json > $@
src/content/en/blog/2018/08/01/npm-ci-reproducibility.prevnext: src/global.json src/content/en/blog/2018/07/17/guix-nixos.json src/content/en/blog/2018/12/21/ytdl-subs.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/blog/2018/07/17/guix-nixos.json -n src/content/en/blog/2018/12/21/ytdl-subs.json src/global.json > $@
src/content/en/blog/2018/07/17/guix-nixos.prevnext: src/global.json src/content/en/blog/2018/08/01/npm-ci-reproducibility.json
mkdir -p $(@D)
mkwb prevnext -n src/content/en/blog/2018/08/01/npm-ci-reproducibility.json src/global.json > $@
src/content/en/blog/sortdata.txt: deps.mk
mkdir -p $(@D)
printf '%s\n' $(articles.en.blog.sortdata) > $@
src/content/en/blog/feed.xml: src/content/en/blog/sortdata.txt
src/content/en/blog/feed.xml: $(articles.en.blog.sortdata)
src/content/en/blog/index.htmllisting: src/content/en/blog/sortdata.txt
src/content/en/blog/index.htmllisting: $(articles.en.blog.sortdata)
src/content/en/blog/categories.htmllisting: src/content/en/blog/sortdata.txt
src/content/en/blog/categories.htmllisting: $(articles.en.blog.sortdata)
src/content/en/blog/categories.txt: src/content/en/blog/sortdata.txt
src/content/en/blog/categories.txt: $(articles.en.blog.sortdata)
src/content/en/blog/index.htmllisting src/content/en/blog/categories.htmllisting: $(articles.en.blog.indexentry)
src/content/en/blog/categories.txt: $(articles.en.blog.categorydata)
src/content/en/blog/categories.txt src/content/en/blog/feed.xml: $(articles.en.blog.feedentry)
src/content/en/blog/categories.htmllisting src/content/en/blog/categories.xml: src/content/en/blog/categories.txt
articles.en.pastebin.adoc = \
src/content/en/pastebin/2016/04/05/rpn.adoc \
src/content/en/pastebin/2018/07/11/nix-pinning.adoc \
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.adoc \
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.adoc \
src/content/en/pastebin/2018/07/13/guixbuilder.adoc \
src/content/en/pastebin/2018/07/13/nix-strpad.adoc \
src/content/en/pastebin/2018/07/25/nix-exps.adoc \
src/content/en/pastebin/2018/07/25/nix-showdrv.adoc \
src/content/en/pastebin/2019/06/08/inconsistent-hash.adoc \
src/content/en/pastebin/2019/12/29/raku-tuple-type.adoc \
src/content/en/pastebin/2020/01/04/guix-import-failure.adoc \
src/content/en/pastebin/2020/02/14/guix-shebang.adoc \
src/content/en/pastebin/2020/11/27/guix-build-local.adoc \
src/content/en/pastebin/2020/12/15/guix-pack-fail.adoc \
src/content/en/pastebin/2021/04/03/naive-slugify-js.adoc \
src/content/en/pastebin/2021/06/08/reading-session-pt1.adoc \
src/content/en/pastebin/2021/06/22/curl-wget.adoc \
src/content/en/pastebin/2021/08/11/h1-spacing.adoc \
src/content/en/pastebin/2021/09/02/sicp-3-19.adoc \
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.adoc \
src/content/en/pastebin/2022/07/14/git-cleanup.adoc \
src/content/en/pastebin/2023/07/22/funcallable-amop.adoc \
articles.en.pastebin.sortdata = $(articles.en.pastebin.adoc:.adoc=.sortdata)
articles.en.pastebin.indexentry = $(articles.en.pastebin.adoc:.adoc=.indexentry)
articles.en.pastebin.feedentry = $(articles.en.pastebin.adoc:.adoc=.feedentry)
articles.en.pastebin.categorydata = $(articles.en.pastebin.adoc:.adoc=.categorydata)
articles.en.pastebin.prevnext = $(articles.en.pastebin.adoc:.adoc=.prevnext)
articles.en.pastebin.homeentry = $(articles.en.pastebin.adoc:.adoc=.homeentry)
src/content/en/pastebin/2023/07/22/funcallable-amop.prevnext: src/global.json src/content/en/pastebin/2022/07/14/git-cleanup.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2022/07/14/git-cleanup.json src/global.json > $@
src/content/en/pastebin/2022/07/14/git-cleanup.prevnext: src/global.json src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json src/content/en/pastebin/2023/07/22/funcallable-amop.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json -n src/content/en/pastebin/2023/07/22/funcallable-amop.json src/global.json > $@
src/content/en/pastebin/2021/09/03/sicp-persistent-queue.prevnext: src/global.json src/content/en/pastebin/2021/09/02/sicp-3-19.json src/content/en/pastebin/2022/07/14/git-cleanup.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2021/09/02/sicp-3-19.json -n src/content/en/pastebin/2022/07/14/git-cleanup.json src/global.json > $@
src/content/en/pastebin/2021/09/02/sicp-3-19.prevnext: src/global.json src/content/en/pastebin/2021/08/11/h1-spacing.json src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2021/08/11/h1-spacing.json -n src/content/en/pastebin/2021/09/03/sicp-persistent-queue.json src/global.json > $@
src/content/en/pastebin/2021/08/11/h1-spacing.prevnext: src/global.json src/content/en/pastebin/2021/06/22/curl-wget.json src/content/en/pastebin/2021/09/02/sicp-3-19.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2021/06/22/curl-wget.json -n src/content/en/pastebin/2021/09/02/sicp-3-19.json src/global.json > $@
src/content/en/pastebin/2021/06/22/curl-wget.prevnext: src/global.json src/content/en/pastebin/2021/06/08/reading-session-pt1.json src/content/en/pastebin/2021/08/11/h1-spacing.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2021/06/08/reading-session-pt1.json -n src/content/en/pastebin/2021/08/11/h1-spacing.json src/global.json > $@
src/content/en/pastebin/2021/06/08/reading-session-pt1.prevnext: src/global.json src/content/en/pastebin/2021/04/03/naive-slugify-js.json src/content/en/pastebin/2021/06/22/curl-wget.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2021/04/03/naive-slugify-js.json -n src/content/en/pastebin/2021/06/22/curl-wget.json src/global.json > $@
src/content/en/pastebin/2021/04/03/naive-slugify-js.prevnext: src/global.json src/content/en/pastebin/2020/12/15/guix-pack-fail.json src/content/en/pastebin/2021/06/08/reading-session-pt1.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2020/12/15/guix-pack-fail.json -n src/content/en/pastebin/2021/06/08/reading-session-pt1.json src/global.json > $@
src/content/en/pastebin/2020/12/15/guix-pack-fail.prevnext: src/global.json src/content/en/pastebin/2020/11/27/guix-build-local.json src/content/en/pastebin/2021/04/03/naive-slugify-js.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2020/11/27/guix-build-local.json -n src/content/en/pastebin/2021/04/03/naive-slugify-js.json src/global.json > $@
src/content/en/pastebin/2020/11/27/guix-build-local.prevnext: src/global.json src/content/en/pastebin/2020/02/14/guix-shebang.json src/content/en/pastebin/2020/12/15/guix-pack-fail.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2020/02/14/guix-shebang.json -n src/content/en/pastebin/2020/12/15/guix-pack-fail.json src/global.json > $@
src/content/en/pastebin/2020/02/14/guix-shebang.prevnext: src/global.json src/content/en/pastebin/2020/01/04/guix-import-failure.json src/content/en/pastebin/2020/11/27/guix-build-local.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2020/01/04/guix-import-failure.json -n src/content/en/pastebin/2020/11/27/guix-build-local.json src/global.json > $@
src/content/en/pastebin/2020/01/04/guix-import-failure.prevnext: src/global.json src/content/en/pastebin/2019/12/29/raku-tuple-type.json src/content/en/pastebin/2020/02/14/guix-shebang.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2019/12/29/raku-tuple-type.json -n src/content/en/pastebin/2020/02/14/guix-shebang.json src/global.json > $@
src/content/en/pastebin/2019/12/29/raku-tuple-type.prevnext: src/global.json src/content/en/pastebin/2019/06/08/inconsistent-hash.json src/content/en/pastebin/2020/01/04/guix-import-failure.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2019/06/08/inconsistent-hash.json -n src/content/en/pastebin/2020/01/04/guix-import-failure.json src/global.json > $@
src/content/en/pastebin/2019/06/08/inconsistent-hash.prevnext: src/global.json src/content/en/pastebin/2018/07/25/nix-showdrv.json src/content/en/pastebin/2019/12/29/raku-tuple-type.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2018/07/25/nix-showdrv.json -n src/content/en/pastebin/2019/12/29/raku-tuple-type.json src/global.json > $@
src/content/en/pastebin/2018/07/25/nix-showdrv.prevnext: src/global.json src/content/en/pastebin/2018/07/25/nix-exps.json src/content/en/pastebin/2019/06/08/inconsistent-hash.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2018/07/25/nix-exps.json -n src/content/en/pastebin/2019/06/08/inconsistent-hash.json src/global.json > $@
src/content/en/pastebin/2018/07/25/nix-exps.prevnext: src/global.json src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json src/content/en/pastebin/2018/07/25/nix-showdrv.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json -n src/content/en/pastebin/2018/07/25/nix-showdrv.json src/global.json > $@
src/content/en/pastebin/2018/07/13/guix-nixos-systemd.prevnext: src/global.json src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json src/content/en/pastebin/2018/07/25/nix-exps.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json -n src/content/en/pastebin/2018/07/25/nix-exps.json src/global.json > $@
src/content/en/pastebin/2018/07/13/guixbuilder-nixos.prevnext: src/global.json src/content/en/pastebin/2018/07/13/nix-strpad.json src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2018/07/13/nix-strpad.json -n src/content/en/pastebin/2018/07/13/guix-nixos-systemd.json src/global.json > $@
src/content/en/pastebin/2018/07/13/nix-strpad.prevnext: src/global.json src/content/en/pastebin/2018/07/13/guixbuilder.json src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2018/07/13/guixbuilder.json -n src/content/en/pastebin/2018/07/13/guixbuilder-nixos.json src/global.json > $@
src/content/en/pastebin/2018/07/13/guixbuilder.prevnext: src/global.json src/content/en/pastebin/2018/07/11/nix-pinning.json src/content/en/pastebin/2018/07/13/nix-strpad.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2018/07/11/nix-pinning.json -n src/content/en/pastebin/2018/07/13/nix-strpad.json src/global.json > $@
src/content/en/pastebin/2018/07/11/nix-pinning.prevnext: src/global.json src/content/en/pastebin/2016/04/05/rpn.json src/content/en/pastebin/2018/07/13/guixbuilder.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/pastebin/2016/04/05/rpn.json -n src/content/en/pastebin/2018/07/13/guixbuilder.json src/global.json > $@
src/content/en/pastebin/2016/04/05/rpn.prevnext: src/global.json src/content/en/pastebin/2018/07/11/nix-pinning.json
mkdir -p $(@D)
mkwb prevnext -n src/content/en/pastebin/2018/07/11/nix-pinning.json src/global.json > $@
src/content/en/pastebin/sortdata.txt: deps.mk
mkdir -p $(@D)
printf '%s\n' $(articles.en.pastebin.sortdata) > $@
src/content/en/pastebin/feed.xml: src/content/en/pastebin/sortdata.txt
src/content/en/pastebin/feed.xml: $(articles.en.pastebin.sortdata)
src/content/en/pastebin/index.htmllisting: src/content/en/pastebin/sortdata.txt
src/content/en/pastebin/index.htmllisting: $(articles.en.pastebin.sortdata)
src/content/en/pastebin/categories.htmllisting: src/content/en/pastebin/sortdata.txt
src/content/en/pastebin/categories.htmllisting: $(articles.en.pastebin.sortdata)
src/content/en/pastebin/categories.txt: src/content/en/pastebin/sortdata.txt
src/content/en/pastebin/categories.txt: $(articles.en.pastebin.sortdata)
src/content/en/pastebin/index.htmllisting src/content/en/pastebin/categories.htmllisting: $(articles.en.pastebin.indexentry)
src/content/en/pastebin/categories.txt: $(articles.en.pastebin.categorydata)
src/content/en/pastebin/categories.txt src/content/en/pastebin/feed.xml: $(articles.en.pastebin.feedentry)
src/content/en/pastebin/categories.htmllisting src/content/en/pastebin/categories.xml: src/content/en/pastebin/categories.txt
articles.en.podcast.adoc = \
src/content/en/podcast/2020/12/19/test-entry.adoc \
articles.en.podcast.sortdata = $(articles.en.podcast.adoc:.adoc=.sortdata)
articles.en.podcast.indexentry = $(articles.en.podcast.adoc:.adoc=.indexentry)
articles.en.podcast.feedentry = $(articles.en.podcast.adoc:.adoc=.feedentry)
articles.en.podcast.categorydata = $(articles.en.podcast.adoc:.adoc=.categorydata)
articles.en.podcast.prevnext = $(articles.en.podcast.adoc:.adoc=.prevnext)
articles.en.podcast.homeentry = $(articles.en.podcast.adoc:.adoc=.homeentry)
src/content/en/podcast/2020/12/19/test-entry.prevnext: src/global.json
mkdir -p $(@D)
mkwb prevnext src/global.json > $@
src/content/en/podcast/sortdata.txt: deps.mk
mkdir -p $(@D)
printf '%s\n' $(articles.en.podcast.sortdata) > $@
src/content/en/podcast/feed.xml: src/content/en/podcast/sortdata.txt
src/content/en/podcast/feed.xml: $(articles.en.podcast.sortdata)
src/content/en/podcast/index.htmllisting: src/content/en/podcast/sortdata.txt
src/content/en/podcast/index.htmllisting: $(articles.en.podcast.sortdata)
src/content/en/podcast/categories.htmllisting: src/content/en/podcast/sortdata.txt
src/content/en/podcast/categories.htmllisting: $(articles.en.podcast.sortdata)
src/content/en/podcast/categories.txt: src/content/en/podcast/sortdata.txt
src/content/en/podcast/categories.txt: $(articles.en.podcast.sortdata)
src/content/en/podcast/index.htmllisting src/content/en/podcast/categories.htmllisting: $(articles.en.podcast.indexentry)
src/content/en/podcast/categories.txt: $(articles.en.podcast.categorydata)
src/content/en/podcast/categories.txt src/content/en/podcast/feed.xml: $(articles.en.podcast.feedentry)
src/content/en/podcast/categories.htmllisting src/content/en/podcast/categories.xml: src/content/en/podcast/categories.txt
articles.en.screencast.adoc = \
src/content/en/screencast/2021/02/07/autoqemu.adoc \
articles.en.screencast.sortdata = $(articles.en.screencast.adoc:.adoc=.sortdata)
articles.en.screencast.indexentry = $(articles.en.screencast.adoc:.adoc=.indexentry)
articles.en.screencast.feedentry = $(articles.en.screencast.adoc:.adoc=.feedentry)
articles.en.screencast.categorydata = $(articles.en.screencast.adoc:.adoc=.categorydata)
articles.en.screencast.prevnext = $(articles.en.screencast.adoc:.adoc=.prevnext)
articles.en.screencast.homeentry = $(articles.en.screencast.adoc:.adoc=.homeentry)
src/content/en/screencast/2021/02/07/autoqemu.prevnext: src/global.json
mkdir -p $(@D)
mkwb prevnext src/global.json > $@
src/content/en/screencast/sortdata.txt: deps.mk
mkdir -p $(@D)
printf '%s\n' $(articles.en.screencast.sortdata) > $@
src/content/en/screencast/feed.xml: src/content/en/screencast/sortdata.txt
src/content/en/screencast/feed.xml: $(articles.en.screencast.sortdata)
src/content/en/screencast/index.htmllisting: src/content/en/screencast/sortdata.txt
src/content/en/screencast/index.htmllisting: $(articles.en.screencast.sortdata)
src/content/en/screencast/categories.htmllisting: src/content/en/screencast/sortdata.txt
src/content/en/screencast/categories.htmllisting: $(articles.en.screencast.sortdata)
src/content/en/screencast/categories.txt: src/content/en/screencast/sortdata.txt
src/content/en/screencast/categories.txt: $(articles.en.screencast.sortdata)
src/content/en/screencast/index.htmllisting src/content/en/screencast/categories.htmllisting: $(articles.en.screencast.indexentry)
src/content/en/screencast/categories.txt: $(articles.en.screencast.categorydata)
src/content/en/screencast/categories.txt src/content/en/screencast/feed.xml: $(articles.en.screencast.feedentry)
src/content/en/screencast/categories.htmllisting src/content/en/screencast/categories.xml: src/content/en/screencast/categories.txt
articles.en.slide.adoc = \
src/content/en/slide/2020/10/19/feature-flags.adoc \
src/content/en/slide/2020/11/14/local-first-hype.adoc \
articles.en.slide.sortdata = $(articles.en.slide.adoc:.adoc=.sortdata)
articles.en.slide.indexentry = $(articles.en.slide.adoc:.adoc=.indexentry)
articles.en.slide.feedentry = $(articles.en.slide.adoc:.adoc=.feedentry)
articles.en.slide.categorydata = $(articles.en.slide.adoc:.adoc=.categorydata)
articles.en.slide.prevnext = $(articles.en.slide.adoc:.adoc=.prevnext)
articles.en.slide.homeentry = $(articles.en.slide.adoc:.adoc=.homeentry)
src/content/en/slide/2020/11/14/local-first-hype.prevnext: src/global.json src/content/en/slide/2020/10/19/feature-flags.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/slide/2020/10/19/feature-flags.json src/global.json > $@
src/content/en/slide/2020/10/19/feature-flags.prevnext: src/global.json src/content/en/slide/2020/11/14/local-first-hype.json
mkdir -p $(@D)
mkwb prevnext -n src/content/en/slide/2020/11/14/local-first-hype.json src/global.json > $@
src/content/en/slide/sortdata.txt: deps.mk
mkdir -p $(@D)
printf '%s\n' $(articles.en.slide.sortdata) > $@
src/content/en/slide/feed.xml: src/content/en/slide/sortdata.txt
src/content/en/slide/feed.xml: $(articles.en.slide.sortdata)
src/content/en/slide/index.htmllisting: src/content/en/slide/sortdata.txt
src/content/en/slide/index.htmllisting: $(articles.en.slide.sortdata)
src/content/en/slide/categories.htmllisting: src/content/en/slide/sortdata.txt
src/content/en/slide/categories.htmllisting: $(articles.en.slide.sortdata)
src/content/en/slide/categories.txt: src/content/en/slide/sortdata.txt
src/content/en/slide/categories.txt: $(articles.en.slide.sortdata)
src/content/en/slide/index.htmllisting src/content/en/slide/categories.htmllisting: $(articles.en.slide.indexentry)
src/content/en/slide/categories.txt: $(articles.en.slide.categorydata)
src/content/en/slide/categories.txt src/content/en/slide/feed.xml: $(articles.en.slide.feedentry)
src/content/en/slide/categories.htmllisting src/content/en/slide/categories.xml: src/content/en/slide/categories.txt
articles.en.til.adoc = \
src/content/en/til/2020/08/12/filename-timestamp.adoc \
src/content/en/til/2020/08/13/code-jekyll.adoc \
src/content/en/til/2020/08/14/browse-git.adoc \
src/content/en/til/2020/08/16/git-search.adoc \
src/content/en/til/2020/08/28/grep-online.adoc \
src/content/en/til/2020/09/04/cli-email-fun-profit.adoc \
src/content/en/til/2020/09/05/oldschool-pr.adoc \
src/content/en/til/2020/10/11/search-git-history.adoc \
src/content/en/til/2020/11/08/find-broken-symlink.adoc \
src/content/en/til/2020/11/12/diy-nix-bash-ci.adoc \
src/content/en/til/2020/11/12/git-bisect-automation.adoc \
src/content/en/til/2020/11/12/useful-bashvars.adoc \
src/content/en/til/2020/11/14/gpodder-media.adoc \
src/content/en/til/2020/11/30/git-notes-ci.adoc \
src/content/en/til/2020/12/15/shellcheck-repo.adoc \
src/content/en/til/2020/12/29/svg.adoc \
src/content/en/til/2021/01/12/curl-awk-emails.adoc \
src/content/en/til/2021/01/17/posix-shebang.adoc \
src/content/en/til/2021/04/24/cl-generic-precedence.adoc \
src/content/en/til/2021/04/24/clojure-autocurry.adoc \
src/content/en/til/2021/04/24/scm-nif.adoc \
src/content/en/til/2021/07/23/git-tls-gpg.adoc \
src/content/en/til/2021/08/11/js-bigint-reviver.adoc \
src/content/en/til/2026/09/05/multiline-sh-comments.adoc \
articles.en.til.sortdata = $(articles.en.til.adoc:.adoc=.sortdata)
articles.en.til.indexentry = $(articles.en.til.adoc:.adoc=.indexentry)
articles.en.til.feedentry = $(articles.en.til.adoc:.adoc=.feedentry)
articles.en.til.categorydata = $(articles.en.til.adoc:.adoc=.categorydata)
articles.en.til.prevnext = $(articles.en.til.adoc:.adoc=.prevnext)
articles.en.til.homeentry = $(articles.en.til.adoc:.adoc=.homeentry)
src/content/en/til/2026/09/05/multiline-sh-comments.prevnext: src/global.json src/content/en/til/2021/08/11/js-bigint-reviver.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2021/08/11/js-bigint-reviver.json src/global.json > $@
src/content/en/til/2021/08/11/js-bigint-reviver.prevnext: src/global.json src/content/en/til/2021/07/23/git-tls-gpg.json src/content/en/til/2026/09/05/multiline-sh-comments.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2021/07/23/git-tls-gpg.json -n src/content/en/til/2026/09/05/multiline-sh-comments.json src/global.json > $@
src/content/en/til/2021/07/23/git-tls-gpg.prevnext: src/global.json src/content/en/til/2021/04/24/scm-nif.json src/content/en/til/2021/08/11/js-bigint-reviver.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2021/04/24/scm-nif.json -n src/content/en/til/2021/08/11/js-bigint-reviver.json src/global.json > $@
src/content/en/til/2021/04/24/scm-nif.prevnext: src/global.json src/content/en/til/2021/04/24/clojure-autocurry.json src/content/en/til/2021/07/23/git-tls-gpg.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2021/04/24/clojure-autocurry.json -n src/content/en/til/2021/07/23/git-tls-gpg.json src/global.json > $@
src/content/en/til/2021/04/24/clojure-autocurry.prevnext: src/global.json src/content/en/til/2021/04/24/cl-generic-precedence.json src/content/en/til/2021/04/24/scm-nif.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2021/04/24/cl-generic-precedence.json -n src/content/en/til/2021/04/24/scm-nif.json src/global.json > $@
src/content/en/til/2021/04/24/cl-generic-precedence.prevnext: src/global.json src/content/en/til/2021/01/17/posix-shebang.json src/content/en/til/2021/04/24/clojure-autocurry.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2021/01/17/posix-shebang.json -n src/content/en/til/2021/04/24/clojure-autocurry.json src/global.json > $@
src/content/en/til/2021/01/17/posix-shebang.prevnext: src/global.json src/content/en/til/2021/01/12/curl-awk-emails.json src/content/en/til/2021/04/24/cl-generic-precedence.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2021/01/12/curl-awk-emails.json -n src/content/en/til/2021/04/24/cl-generic-precedence.json src/global.json > $@
src/content/en/til/2021/01/12/curl-awk-emails.prevnext: src/global.json src/content/en/til/2020/12/29/svg.json src/content/en/til/2021/01/17/posix-shebang.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/12/29/svg.json -n src/content/en/til/2021/01/17/posix-shebang.json src/global.json > $@
src/content/en/til/2020/12/29/svg.prevnext: src/global.json src/content/en/til/2020/12/15/shellcheck-repo.json src/content/en/til/2021/01/12/curl-awk-emails.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/12/15/shellcheck-repo.json -n src/content/en/til/2021/01/12/curl-awk-emails.json src/global.json > $@
src/content/en/til/2020/12/15/shellcheck-repo.prevnext: src/global.json src/content/en/til/2020/11/30/git-notes-ci.json src/content/en/til/2020/12/29/svg.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/11/30/git-notes-ci.json -n src/content/en/til/2020/12/29/svg.json src/global.json > $@
src/content/en/til/2020/11/30/git-notes-ci.prevnext: src/global.json src/content/en/til/2020/11/14/gpodder-media.json src/content/en/til/2020/12/15/shellcheck-repo.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/11/14/gpodder-media.json -n src/content/en/til/2020/12/15/shellcheck-repo.json src/global.json > $@
src/content/en/til/2020/11/14/gpodder-media.prevnext: src/global.json src/content/en/til/2020/11/12/diy-nix-bash-ci.json src/content/en/til/2020/11/30/git-notes-ci.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/11/12/diy-nix-bash-ci.json -n src/content/en/til/2020/11/30/git-notes-ci.json src/global.json > $@
src/content/en/til/2020/11/12/diy-nix-bash-ci.prevnext: src/global.json src/content/en/til/2020/11/12/git-bisect-automation.json src/content/en/til/2020/11/14/gpodder-media.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/11/12/git-bisect-automation.json -n src/content/en/til/2020/11/14/gpodder-media.json src/global.json > $@
src/content/en/til/2020/11/12/git-bisect-automation.prevnext: src/global.json src/content/en/til/2020/11/12/useful-bashvars.json src/content/en/til/2020/11/12/diy-nix-bash-ci.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/11/12/useful-bashvars.json -n src/content/en/til/2020/11/12/diy-nix-bash-ci.json src/global.json > $@
src/content/en/til/2020/11/12/useful-bashvars.prevnext: src/global.json src/content/en/til/2020/11/08/find-broken-symlink.json src/content/en/til/2020/11/12/git-bisect-automation.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/11/08/find-broken-symlink.json -n src/content/en/til/2020/11/12/git-bisect-automation.json src/global.json > $@
src/content/en/til/2020/11/08/find-broken-symlink.prevnext: src/global.json src/content/en/til/2020/10/11/search-git-history.json src/content/en/til/2020/11/12/useful-bashvars.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/10/11/search-git-history.json -n src/content/en/til/2020/11/12/useful-bashvars.json src/global.json > $@
src/content/en/til/2020/10/11/search-git-history.prevnext: src/global.json src/content/en/til/2020/09/05/oldschool-pr.json src/content/en/til/2020/11/08/find-broken-symlink.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/09/05/oldschool-pr.json -n src/content/en/til/2020/11/08/find-broken-symlink.json src/global.json > $@
src/content/en/til/2020/09/05/oldschool-pr.prevnext: src/global.json src/content/en/til/2020/09/04/cli-email-fun-profit.json src/content/en/til/2020/10/11/search-git-history.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/09/04/cli-email-fun-profit.json -n src/content/en/til/2020/10/11/search-git-history.json src/global.json > $@
src/content/en/til/2020/09/04/cli-email-fun-profit.prevnext: src/global.json src/content/en/til/2020/08/28/grep-online.json src/content/en/til/2020/09/05/oldschool-pr.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/08/28/grep-online.json -n src/content/en/til/2020/09/05/oldschool-pr.json src/global.json > $@
src/content/en/til/2020/08/28/grep-online.prevnext: src/global.json src/content/en/til/2020/08/16/git-search.json src/content/en/til/2020/09/04/cli-email-fun-profit.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/08/16/git-search.json -n src/content/en/til/2020/09/04/cli-email-fun-profit.json src/global.json > $@
src/content/en/til/2020/08/16/git-search.prevnext: src/global.json src/content/en/til/2020/08/14/browse-git.json src/content/en/til/2020/08/28/grep-online.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/08/14/browse-git.json -n src/content/en/til/2020/08/28/grep-online.json src/global.json > $@
src/content/en/til/2020/08/14/browse-git.prevnext: src/global.json src/content/en/til/2020/08/13/code-jekyll.json src/content/en/til/2020/08/16/git-search.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/08/13/code-jekyll.json -n src/content/en/til/2020/08/16/git-search.json src/global.json > $@
src/content/en/til/2020/08/13/code-jekyll.prevnext: src/global.json src/content/en/til/2020/08/12/filename-timestamp.json src/content/en/til/2020/08/14/browse-git.json
mkdir -p $(@D)
mkwb prevnext -p src/content/en/til/2020/08/12/filename-timestamp.json -n src/content/en/til/2020/08/14/browse-git.json src/global.json > $@
src/content/en/til/2020/08/12/filename-timestamp.prevnext: src/global.json src/content/en/til/2020/08/13/code-jekyll.json
mkdir -p $(@D)
mkwb prevnext -n src/content/en/til/2020/08/13/code-jekyll.json src/global.json > $@
src/content/en/til/sortdata.txt: deps.mk
mkdir -p $(@D)
printf '%s\n' $(articles.en.til.sortdata) > $@
src/content/en/til/feed.xml: src/content/en/til/sortdata.txt
src/content/en/til/feed.xml: $(articles.en.til.sortdata)
src/content/en/til/index.htmllisting: src/content/en/til/sortdata.txt
src/content/en/til/index.htmllisting: $(articles.en.til.sortdata)
src/content/en/til/categories.htmllisting: src/content/en/til/sortdata.txt
src/content/en/til/categories.htmllisting: $(articles.en.til.sortdata)
src/content/en/til/categories.txt: src/content/en/til/sortdata.txt
src/content/en/til/categories.txt: $(articles.en.til.sortdata)
src/content/en/til/index.htmllisting src/content/en/til/categories.htmllisting: $(articles.en.til.indexentry)
src/content/en/til/categories.txt: $(articles.en.til.categorydata)
src/content/en/til/categories.txt src/content/en/til/feed.xml: $(articles.en.til.feedentry)
src/content/en/til/categories.htmllisting src/content/en/til/categories.xml: src/content/en/til/categories.txt
articles.pt.hea.adoc = \
src/content/pt/hea/2020/08/12/arquivo-datado.adoc \
articles.pt.hea.sortdata = $(articles.pt.hea.adoc:.adoc=.sortdata)
articles.pt.hea.indexentry = $(articles.pt.hea.adoc:.adoc=.indexentry)
articles.pt.hea.feedentry = $(articles.pt.hea.adoc:.adoc=.feedentry)
articles.pt.hea.categorydata = $(articles.pt.hea.adoc:.adoc=.categorydata)
articles.pt.hea.prevnext = $(articles.pt.hea.adoc:.adoc=.prevnext)
articles.pt.hea.homeentry = $(articles.pt.hea.adoc:.adoc=.homeentry)
src/content/pt/hea/2020/08/12/arquivo-datado.prevnext: src/global.json
mkdir -p $(@D)
mkwb prevnext src/global.json > $@
src/content/pt/hea/sortdata.txt: deps.mk
mkdir -p $(@D)
printf '%s\n' $(articles.pt.hea.sortdata) > $@
src/content/pt/hea/feed.xml: src/content/pt/hea/sortdata.txt
src/content/pt/hea/feed.xml: $(articles.pt.hea.sortdata)
src/content/pt/hea/index.htmllisting: src/content/pt/hea/sortdata.txt
src/content/pt/hea/index.htmllisting: $(articles.pt.hea.sortdata)
src/content/pt/hea/categorias.htmllisting: src/content/pt/hea/sortdata.txt
src/content/pt/hea/categorias.htmllisting: $(articles.pt.hea.sortdata)
src/content/pt/hea/categorias.txt: src/content/pt/hea/sortdata.txt
src/content/pt/hea/categorias.txt: $(articles.pt.hea.sortdata)
src/content/pt/hea/index.htmllisting src/content/pt/hea/categorias.htmllisting: $(articles.pt.hea.indexentry)
src/content/pt/hea/categorias.txt: $(articles.pt.hea.categorydata)
src/content/pt/hea/categorias.txt src/content/pt/hea/feed.xml: $(articles.pt.hea.feedentry)
src/content/pt/hea/categorias.htmllisting src/content/pt/hea/categorias.xml: src/content/pt/hea/categorias.txt
src/content/en/index.htmllisting: src/content/en/blog/sortdata.txt $(articles.en.blog.sortdata) $(articles.en.blog.homeentry) src/content/en/pastebin/sortdata.txt $(articles.en.pastebin.sortdata) $(articles.en.pastebin.homeentry) src/content/en/podcast/sortdata.txt $(articles.en.podcast.sortdata) $(articles.en.podcast.homeentry) src/content/en/screencast/sortdata.txt $(articles.en.screencast.sortdata) $(articles.en.screencast.homeentry) src/content/en/slide/sortdata.txt $(articles.en.slide.sortdata) $(articles.en.slide.homeentry) src/content/en/til/sortdata.txt $(articles.en.til.sortdata) $(articles.en.til.homeentry)
src/content/pt/index.htmllisting: src/content/pt/hea/sortdata.txt $(articles.pt.hea.sortdata) $(articles.pt.hea.homeentry)
translations = \
src/content/eo/index.adoc \
src/content/eo/pri.adoc \
src/content/es/acerca.adoc \
src/content/es/index.adoc \
src/content/fr/a-propos.adoc \
src/content/fr/index.adoc \
src/content/pt/hea/2020/08/12/arquivo-datado.adoc \
src/content/pt/hea/categorias.adoc \
src/content/pt/hea/index.adoc \
src/content/pt/index.adoc \
src/content/pt/sobre.adoc \
src/i18n.en.txt \
src/i18n.eo.txt \
src/i18n.es.txt \
src/i18n.fr.txt \
src/i18n.pt.txt \
src/i18n.stamp: po/po4a.cfg po/en.po po/eo.po po/es.po po/fr.po po/pt.po
po4a po/po4a.cfg
touch $@
$(translations): src/i18n.stamp
translations.txt = src/translations.txt
src/translations.txt: deps.mk
printf '%s\n' \
'src/content/en/index.adoc src/content/pt/index.adoc src/content/fr/index.adoc src/content/eo/index.adoc src/content/es/index.adoc' \
'src/content/en/about.adoc src/content/pt/sobre.adoc src/content/fr/a-propos.adoc src/content/eo/pri.adoc src/content/es/acerca.adoc' \
'src/content/en/til/index.adoc src/content/pt/hea/index.adoc' \
'src/content/en/til/categories.adoc src/content/pt/hea/categorias.adoc' \
'src/content/en/til/2020/08/12/filename-timestamp.adoc src/content/pt/hea/2020/08/12/arquivo-datado.adoc' \
> $@
## mkwb canonical site rules. Sites consume this content by
## inlining it at the end of their generated deps.mk: mkdeps.sh
## runs "mkwb rules" (which prints them) so deps.mk ends up
## self-contained -- no make-time "include" of an external file.
## The site Makefile only needs an "all:" anchor followed by
## "include deps.mk". Order matters: "all:" must come first
## (otherwise deps.mk's first target becomes the default), and
## the canonical rules below must follow deps.mk's variable
## assignments so that "all: $(derived-assets)" can resolve its
## prereq list at parse time.
##
## The including Makefile is expected to define at minimum:
##
## NAME -- site name: the domain it is served from, since
## baseurl.txt is derived as https://$(NAME). Also
## used for the SRCDIR/HTMLDIR install paths.
## VERSION
## DATE
##
## The site must also provide one source file:
##
## src/config.json -- a flat JSON object of strings, the site's
## own settings laid over what mkwb derives.
## Only "email" is required of it, since
## nothing can be derived for the contact
## address; mkwb's defaults stand in for
## every other key it leaves out.
##
## To override any of PREFIX / BINDIR / SHAREDIR / SRCDIR /
## HTMLDIR / PUBURL / BASEURL / FFMFLAGS, set them AFTER the
## include (plain "=", POSIX -- no "?=" conditional assignment),
## or pass "-e" to make to let env vars take precedence.
##
## "clean", "install" and "uninstall" are the site's own, and
## pristine(1) looks for all three in the Makefile itself. The
## rules still name what they act on: "$(derived-assets)" and
## "$(side-assets)" are everything the build produced, and
## "install.txt" and "sources.txt" name what to carry, to the
## $(HTMLDIR) and $(SRCDIR) below.
## Default values. Sites override AFTER the include or via env.
PREFIX = /usr
BINDIR = $(PREFIX)/bin
LIBDIR = $(PREFIX)/lib
INCLUDEDIR = $(PREFIX)/include
SHAREDIR = $(PREFIX)/share
LOCALEDIR = $(SHAREDIR)/locale
MANDIR = $(SHAREDIR)/man
DOCDIR = $(SHAREDIR)/doc/$(NAME)
HTMLDIR = $(SHAREDIR)/html/$(NAME)
SRCDIR = $(PREFIX)/src/$(NAME)
DESTDIR =
## How many of each collection a front page lists.
HOMECOUNT = 3
PUBURL = public.asc.txt
BASEURL = /
FFMFLAGS = -y -hide_banner -loglevel warning
.SUFFIXES:
.SUFFIXES: .adoc .json .snippets .indexentry .feedentry .mapentry .sortdata .xml
.SUFFIXES: .htmlbody .htmlheader .htmlfooter .htmllisting .html .links .caslinks
.SUFFIXES: .comments .homeentry
.SUFFIXES: .txt .categorydata .torrent .flac .ogg .ps .pdf .sentinel
.SUFFIXES: .ly .midi .eslaides
.adoc.json:
mkwb conf src/global.json $< > $@
.adoc.htmlbody:
mkwb htmlbody $< > $@
.htmlbody.html:
mkwb html $< > $@
.json.htmlheader:
mkwb html -H $< > $@
.json.htmlfooter:
mkwb html -F $< > $@
.adoc.snippets:
mkwb snippets $< > $@
.json.indexentry:
mkwb indexentry $< > $@
## The same entry, linked from the root of the language rather
## than the root of the collection, for a front page.
.json.homeentry:
mkwb indexentry -l $< > $@
.htmlbody.feedentry:
mkwb feedentry $< > $@
.json.comments:
mkwb comments $< > $@
.json.mapentry:
mkwb mapentry $< > $@
.json.sortdata:
mkwb sortdata $< > $@
.json.categorydata:
mkwb categorydata $< > $@
.adoc.links:
mkwb links $< > $@
.links.caslinks:
mkwb caslinks $< > $@
.flac.ogg:
ffmpeg $(FFMFLAGS) -i $< -ar 48000 -vn -c:a libvorbis -b:a 320k $@
.eslaides.ps:
eslaides < $< > $@
.ly.midi:
lilypond -o $* $<
## ghostscript stamps a PDF with the wall clock and a fresh uuid,
## so one deck rendered twice was two different files and every
## deploy shipped a slide nobody had touched. The dates are set
## ahead of the input by a DOCINFO pdfmark, and the two XMP uuids
## are named on the command line. -dOmitInfoDate does not reach
## either: it is honoured for an input carrying no pdfmarks of its
## own, and a deck carries plenty.
.ps.pdf:
{ \
printf '%s\n' \
'[ /CreationDate (D:19700101000000Z)' \
'/ModDate (D:19700101000000Z) /DOCINFO pdfmark'; \
cat $<; \
} | ps2pdf \
-sDocumentUUID=00000000-0000-0000-0000-000000000000 \
-sInstanceUUID=00000000-0000-0000-0000-000000000000 \
- > $@
## Derived file lists from auto-generated source lists in deps.mk.
listings.adoc = $(categories.adoc) $(indexes.adoc) $(homes.adoc)
homes.htmllisting = $(homes.adoc:.adoc=.htmllisting)
sources.adoc = $(articles.adoc) $(listings.adoc) $(pages.adoc)
sources.htmlbody = $(sources.adoc:.adoc=.htmlbody)
sources.html = $(sources.adoc:.adoc=.html)
sources.snippets = $(sources.adoc:.adoc=.snippets)
sources.json = $(sources.adoc:.adoc=.json)
sources.links = $(sources.adoc:.adoc=.links)
sources.caslinks = $(sources.adoc:.adoc=.caslinks)
sources.comments = $(sources.adoc:.adoc=.comments)
sources.mapentry = $(sources.adoc:.adoc=.mapentry)
articles.indexentry = $(articles.adoc:.adoc=.indexentry)
articles.homeentry = $(articles.adoc:.adoc=.homeentry)
articles.feedentry = $(articles.adoc:.adoc=.feedentry)
articles.sortdata = $(articles.adoc:.adoc=.sortdata)
articles.prevnext = $(articles.adoc:.adoc=.prevnext)
articles.categorydata = $(articles.adoc:.adoc=.categorydata)
listings.htmlheader = $(listings.adoc:.adoc=.htmlheader)
listings.htmlfooter = $(listings.adoc:.adoc=.htmlfooter)
listings.html = $(listings.adoc:.adoc=.html)
indexes.htmllisting = $(indexes.adoc:.adoc=.htmllisting)
categories.htmllisting = $(categories.adoc:.adoc=.htmllisting)
categories.txt = $(categories.adoc:.adoc=.txt)
categories.xml = $(categories.adoc:.adoc=.xml)
sources.media.torrent = $(sources.media:=.torrent)
music.midi = $(music.ly:.ly=.midi)
music.pdf = $(music.ly:.ly=.pdf)
slides.ps = $(slides.eslaides:.eslaides=.ps)
slides.pdf = $(slides.eslaides:.eslaides=.pdf)
sources = \
$(sources.adoc) \
$(sources.extras) \
$(images.svg) \
$(root.dir)/favicon.ico \
$(root.dir)/favicon.png \
$(root.dir)/style.css \
$(root.dir)/$(PUBURL) \
dynamic-contents = \
$(sources.html) \
$(slides.pdf) \
$(feeds.xml) \
$(sources.media.torrent) \
$(root.dir)/sitemap.xml \
static-contents = \
$(sources.extras) \
$(music.ly) \
$(music.include) \
$(music.ogg) \
$(music.midi) \
$(music.pdf) \
$(images.svg) \
$(root.dir)/favicon.ico \
$(root.dir)/favicon.png \
$(root.dir)/style.css \
$(root.dir)/$(PUBURL) \
$(root.dir)/.well-known/security.txt \
contents = \
$(dynamic-contents) \
$(static-contents) \
all-filelists = \
$(sources.snippets) \
$(categories.xml) \
all-contents = \
$(contents) \
## What a rule writes through ifnew(1), beside a sentinel that
## records the writing: only the exported public key, now that the
## favicons are rendered straight to their own names.
captured-assets = \
$(root.dir)/$(PUBURL) \
captured-assets.sentinel = $(captured-assets:=.sentinel)
derived-assets = \
$(dynamic-contents) \
$(music.midi) \
$(music.pdf) \
$(sources.html) \
$(sources.htmlbody) \
$(sources.snippets) \
$(sources.json) \
$(sources.links) \
$(sources.caslinks) \
$(sources.comments) \
src/comments.sentinel \
$(sources.mapentry) \
src/global.json \
$(translations.txt) \
$(articles.indexentry) \
$(articles.homeentry) \
$(articles.feedentry) \
$(articles.sortdata) \
$(articles.prevnext) \
$(articles.categorydata) \
$(listings.htmlheader) \
$(listings.htmlfooter) \
$(listings.html) \
$(indexes.htmllisting) \
$(categories.htmllisting) \
$(homes.htmllisting) \
$(categories.txt) \
$(categories.xml) \
$(slides.ps) \
$(slides.pdf) \
baseurl.txt \
fingerprint.txt \
expiry.txt \
expiry-epoch.txt \
now.txt \
$(root.dir)/.well-known/security.txt \
src/all-contents.txt \
src/all-filelists.txt \
src/all-symlinks.txt \
src/install.txt \
src/sort-expected.txt \
src/sort-given.txt \
src/sources.txt \
install.txt \
sources.txt \
$(root.dir)/.gitignore \
$(captured-assets.sentinel) \
## Artifacts whose names the rules never write down: a page's
## code blocks are numbered by however many it has, and sortdata
## is named for the date it carries. A glob would have to fix a
## depth, and a page may sit at any of them, so ask find.
side-assets = \
$$(find $(root.dir) -name '*.html.*.txt' 2>/dev/null) \
$$(find $(root.dir) -name '*.sortdata' 2>/dev/null) \
$$(find $(root.dir) -name 'sortdata.txt' 2>/dev/null) \
$(root.dir)/*/*/feed.*.xml \
$(translations) \
src/i18n.stamp \
$(root.dir)/.well-known/ \
src/comments/ \
$$(cat src/all-symlinks.txt 2>/dev/null) \
install.tar \
sources.tar \
## Default target -- builds all derived + captured artifacts.
## $(static-contents) is named too: most of it the site ships, but
## the fallback rules below craft what it doesn't (style.css, the
## favicon), and nothing else asks for those now that no .gz twin
## does.
all: $(derived-assets) $(captured-assets) $(static-contents)
all: install.tar sources.tar
## A page's configuration names the same page in the other
## languages, so it is built after the map that says which those
## are. A site with no translations sets no map, and the variable
## is empty.
$(sources.json): src/global.json $(translations.txt)
## Optional inputs default to empty / stub when the site doesn't
## ship them, so make doesn't bail on a missing prerequisite.
src/symlinks.txt:
: > $@
## The list archive as the list exports it, and the messages split
## out of it. One file is what gets committed; make cuts it up.
## The names are not known in advance, so a stamp stands for them.
src/comments.mbox:
: > $@
## Where the split messages land and which file overrides them is
## the site's to say, so both come from its config rather than from
## here; a site that says nothing gets the defaults it always had.
$(comments.map):
mkdir -p $(@D)
: > $@
src/comments.sentinel: src/comments.mbox
mkwb mbox $(comments.dir) < src/comments.mbox > /dev/null
touch $@
## Comments that did not arrive as mail: one archive per place a
## discussion happens, each read as it stands, since a record needs
## no splitting where an mbox is a stream whose messages make(1)
## cannot name in advance. Which archives those are is $comments_json
## in the site's own config, written out above; a site that holds no
## such discussion names none and waits on nothing.
$(sources.comments): src/comments.sentinel $(comments.map)
$(sources.comments): $(comments.archives)
## A page renders the thread belonging to it, and the site names
## which .comments that is, page by page. Every page waiting on
## every page's thread --- which is what this was --- meant one
## article's .comments being rewritten rebuilt the whole site,
## since a page's .comments is rewritten whenever its .json is.
$(root.dir)/style.css:
mkdir -p $(@D)
: > $@
$(root.dir)/$(img.dir)/favicon.svg:
mkdir -p $(@D)
printf '%s\n' \
'' \
'' > $@
## The links are made in the tree they belong to, so the recipe
## goes there --- and the table it reads is named from here, not
## from there: how far down $(root.dir) sits is the site's to
## choose, and "../" only ever guessed at one answer.
$(root.dir)/.gitignore: src/symlinks.txt
mkdir -p $(@D)
top=$$(pwd) && cd $(root.dir)/ && \
mkwb symlinks "$$top"/src/symlinks.txt > $(@F)
## An empty object stands in when the site ships no src/config.json,
## so the rule below always has its input and the build fails
## naming the setting it wants --- "Missing required $email" ---
## rather than the file. A site that writes one is left alone:
## this is a source file, not a derived asset.
src/config.json:
echo '{}' > $@
## Everything the configuration needs that is not in config.json:
## the three one-line files beside the site, which mkwb reads
## itself, and the four values only make knows. LANGUAGES tells
## mkwb conf whether to path-derive a page's language (a site with
## $(root.dir)//...) or leave it empty (a flat one); empty is
## passed through as such.
src/global.json: src/config.json baseurl.txt fingerprint.txt
mkwb conf -G -n '$(NAME)' -l '$(LANGUAGES)' -u '$(PUBURL)' \
-t '$(translations.txt)' src/config.json > $@
## $* is the target with its suffix off. POSIX promises it "at
## least for inference rules", and both GNU make and BSD make give
## it for an explicit rule too, as long as the suffix is one that
## .SUFFIXES declares --- and every suffix used below is.
$(listings.html):
cat $*.htmlheader $*.htmlbody $*.htmllisting $*.htmlfooter > $@
$(indexes.htmllisting):
mkwb indexbody $*.json > $@
## A language's front page: each collection the navigation lists,
## with the newest $(HOMECOUNT) of it.
$(homes.htmllisting):
mkwb homebody -c $(HOMECOUNT) $*.json > $@
$(categories.htmllisting):
mkwb categoriesbody $*.json > $@
$(categories.txt): src/global.json
mkwb categories src/global.json $(@D) > $@
$(categories.xml): src/global.json
for f in $$(cat $*.txt); do \
c="$$(printf '%s\n' "$$f" | cut -d. -f2)"; \
mkwb feed src/global.json "$$f" \
$(@D)/feed."$$c".xml > $(@D)/feed."$$c".xml; \
printf '%s\n' $(@D)/feed."$$c".xml; \
done > $@
$(feeds.xml): src/global.json
mkwb feed src/global.json $(@D)/sortdata.txt $@ > $@
## An article's neighbours are its own rule, written by the
## site's deps.mk: it knows the collection's order and names the
## two pages either side of each entry, so a change to one entry
## reaches those two pages and no others.
$(root.dir)/$(PUBURL):
mkdir -p $(@D)
: > $@
$(root.dir)/$(PUBURL).sentinel: src/global.json $(root.dir)/$(PUBURL)
out=$$(echo $@ | sed 's/\.sentinel$$//'); \
gpg --export --armour "$$(mkwb get email src/global.json)" | \
ifne ifnew "$$out"
touch $@
## Rendered from the one SVG the site keeps, each straight to its
## own name. A sentinel and an ifnew(1) stood here to hold a
## file's mtime still when convert(1) wrote the same bytes again,
## and nothing downstream is built from a favicon --- it is
## installed and served, not read --- so the mtime bought nothing
## and the indirection cost a target make had no rule for.
## $< is an inference rule's, not an explicit rule's, under POSIX
## make, so each names its source.
$(root.dir)/favicon.ico: $(root.dir)/$(img.dir)/favicon.svg
convert $(root.dir)/$(img.dir)/favicon.svg -strip ico:- > $@
$(root.dir)/favicon.png: $(root.dir)/$(img.dir)/favicon.svg
convert $(root.dir)/$(img.dir)/favicon.svg -strip png:- > $@
$(sources.media.torrent):
src=$$(echo $@ | sed 's/\.torrent$$//'); \
rel=$$(echo "$$src" | cut -d/ -f3-); \
base=$$(basename "$$src"); \
mktorrent -x -f -d -n "$$base" -o $@ \
-w "https://$(NAME)$(BASEURL)$$rel" "$$src"
## Makes its own directory: what it waits on is every page's map
## entry, and a site with no pages yet waits on nothing, so nothing
## else has made the tree it writes into.
$(root.dir)/sitemap.xml: $(sources.mapentry)
mkdir -p $(@D)
mkwb sitemap $(sources.mapentry) > $@
## The site is served from its own name, so the canonical URL is
## derived rather than configured. $(BASEURL) is deliberately not
## folded in: it is the path prefix for in-site links, while this
## is the scheme-and-host every consumer concatenates a rooted path
## onto.
baseurl.txt:
echo 'https://$(NAME)' > $@
## fingerprint.txt / expiry.txt tolerate a missing public key: if
## $(root.dir)/$(PUBURL) is empty (no key was exported), fall back
## to an empty fingerprint and a fixed far-future expiry (2099-12-31
## UTC, epoch 4102444800). check-unit-expiry stays meaningful
## because expiry > now holds; security.txt stays valid (RFC 9116
## requires an Expires line).
fingerprint.txt: $(root.dir)/$(PUBURL)
if [ -s $< ]; then \
gpg --always-trust --no-keyring --show-key --with-colons \
$< | \
awk -F: '/^pub:/ { print $$5 }' > $@; \
else \
: > $@; \
fi
## Rendered in UTC: date(1) writes the offset it is standing in
## otherwise, and then two builds of one site disagree about when
## the key expires because the people running them do not share a
## timezone.
expiry.txt: $(root.dir)/$(PUBURL)
if [ -s $< ]; then \
gpg --always-trust --no-keyring --show-key --with-colons \
$< | \
awk -F: '/^pub:/ { print $$7 }' | \
xargs -I% date -uIs -d@% > $@; \
else \
date -uIs -d '@4102444800' > $@; \
fi
expiry-epoch.txt: expiry.txt
date -d "$$(cat expiry.txt)" '+%s' > $@
now.txt:
now > $@
$(root.dir)/.well-known/security.txt: src/global.json baseurl.txt \
expiry.txt $(root.dir)/$(PUBURL)
mkdir -p $(@D)
printf 'Contact: mailto:%s\n' \
"$$(mkwb get email src/global.json)" > $@
printf 'Expires: %s\n' "$$(cat expiry.txt)" >> $@
if [ -s $(root.dir)/$(PUBURL) ]; then \
printf 'Encryption: %s/$(PUBURL)\n' \
"$$(cat baseurl.txt)" >> $@; \
fi
printf 'Preferred-Languages: en, pt, fr, eo, es, de\n' >> $@
## Each writes out a variable deps.mk defines, so deps.mk is what
## they are made from: without it named here the list is written
## once and then never again, and a page added later is built,
## carried into no tarball, and shipped by nothing.
src/sources.txt: deps.mk
printf '%s\n' $(sources) > $@
src/all-contents.txt: deps.mk
printf '%s\n' $(all-contents) > $@
src/all-filelists.txt: deps.mk src/all-symlinks.txt
printf '%s\n' $(all-filelists) src/all-symlinks.txt > $@
src/all-symlinks.txt: $(root.dir)/.gitignore
sed 's|^|$(root.dir)|' $(root.dir)/.gitignore > $@
src/install.txt: src/all-contents.txt src/all-filelists.txt $(all-filelists)
cat src/all-contents.txt $$(cat src/all-filelists.txt) > $@
sources.txt: src/sources.txt
install.txt: src/install.txt
sources.txt install.txt:
sed 's|^$(root.dir)/||' src/$(@F) > $@
## What a site ships: the pages under one tarball and the sources
## they were built from under another, each carrying exactly what
## its list names. A tarball rather than a directory because it
## travels --- "cat install.tar | ssh host tar -xf - -C /srv/www"
## is the whole of a deployment --- and because installing is then
## the same extraction whether the tree is going next door or
## across a network.
##
## They are side assets, not derived ones: install.tar is built
## from what it archives, so it cannot be one of them.
##
## And it waits on all of that, static contents included. Naming
## only the derived ones held while the rest were sources the
## repository carried; a site that renders its favicon instead has
## nothing to make it, and dtar stops at the first name it cannot
## find.
install.tar: $(derived-assets) $(contents) install.txt
cat install.txt | dtar -C $(root.dir) > $@
## Waits on the sources themselves, not merely on the list naming
## them: some are built --- a rendered favicon, a translated page ---
## and a parallel build that reached this rule first archived them
## empty, which the list alone could not have told it.
sources.tar: sources.txt $(sources)
cat sources.txt | dtar -C $(root.dir) > $@
## ---- check-unit-* targets ---------------------------------------
src/sort-expected.txt:
if [ -n "$(articles.adoc)" ]; then \
dirname $(articles.adoc) | LC_ALL=C sort | \
uniq -c | \
awk '{ printf "%s\t%s\n", $$2, $$1 }'; \
fi > $@
src/sort-given.txt: $(sources.json) src/sort-expected.txt
awk '{ \
"grep \"\\\"sort\\\":\" " $$1 "/*.json | wc -l" | \
getline cnt; \
printf "%s\t%s\n", $$1, cnt; \
}' src/sort-expected.txt > $@
check-unit-sorting: src/sort-expected.txt src/sort-given.txt
diff -U10 src/sort-expected.txt src/sort-given.txt
.SUFFIXES: .updatedat-check
sources.updatedat-check = $(sources.adoc:.adoc=.updatedat-check)
$(sources.updatedat-check):
u=$$(mkwb get updatedat_epoch $*.json); \
d=$$(mkwb get date_epoch $*.json); \
if [ -n "$$u" ] && [ "$$u" -le "$$d" ]; then exit 3; fi
check-unit-updatedat: $(sources.updatedat-check)
.SUFFIXES: .links-internal-check
sources.links-internal-check = $(sources.adoc:.adoc=.links-internal-check)
$(sources.links-internal-check): $(sources.html) $(slides.pdf)
dir=$$(dirname "$*"); \
grep -E '^(link|image):' $*.links | cut -d: -f2- | \
xargs -I% test -e "$$dir"/%
check-unit-links-internal: $(sources.links-internal-check)
check-unit-links-external:
## Every page carries a title. A source the transformer could not
## read one from -- a deck in another format, say -- renders one
## that is empty, and nothing downstream notices.
.SUFFIXES: .title-check
sources.title-check = $(sources.adoc:.adoc=.title-check)
$(sources.title-check): $(sources.html)
grep -q '[^<]' $*.html || { \
printf '%s: rendered with an empty title\n' "$*.html" >&2; \
exit 1; \
}
check-unit-titles: $(sources.title-check)
## A deck that collapses to one page is what a source written in
## an input dialect the tool no longer speaks looks like: eslaides
## reads it, exits 0, and emits a deck with nothing broken out of
## it. The page count is the one thing that says so, and it is
## knowable from the source: one page per slide, and one slide
## more than there are breaks between them.
##
## The count alone does not catch the case that prompted this: a
## deck written in an input dialect the tool no longer speaks has
## no breaks it recognises, so one page is exactly what one slide
## predicts. Hence the second assertion --- a deck is never one
## slide, and a source that claims to be is being misread.
##
## awk rather than grep -c: a deck carrying an em dash or an emoji
## is enough for grep to call the PostScript binary and count
## nothing, which reads here as a deck that is fine.
.SUFFIXES: .pages-check
slides.pages-check = $(slides.eslaides:.eslaides=.pages-check)
$(slides.pages-check): $(slides.ps)
want=$$(awk '/^<<<$$/{n++} END{print n+1}' $*.eslaides); \
got=$$(awk '/^%%Page:/{n++} END{print n+0}' $*.ps); \
if [ "$$want" -ne "$$got" ]; then \
printf '%s: %s pages for %s slides\n' \
"$*.ps" "$$got" "$$want" >&2; \
exit 1; \
fi; \
if [ "$$want" -eq 1 ]; then \
printf '%s: no slide breaks; a deck is not one slide\n' \
"$*.eslaides" >&2; \
exit 1; \
fi
check-unit-slides: $(slides.pages-check)
## A listing block that renders empty means the transformer lost
## the code it was handed, and usually the prose after it too.
.SUFFIXES: .listing-check
sources.listing-check = $(sources.adoc:.adoc=.listing-check)
$(sources.listing-check): $(sources.html)
if grep -q '' $*.html; then \
printf '%s: a listing block rendered empty\n' \
"$*.html" >&2; \
exit 1; \
fi
check-unit-listings: $(sources.listing-check)
## check-unit-links-internal sees only the link: and image: macros
## a page wrote. This sees what the templates emitted around it:
## the feed, the stylesheet, the icons, the navigation.
.SUFFIXES: .links-html-check
sources.links-html-check = $(sources.adoc:.adoc=.links-html-check)
$(sources.links-html-check): $(sources.html)
dir=$$(dirname "$*"); \
missing=$$(grep -oE '(href|src)="[^"#?:]+"' $*.html | \
sed -e 's/.*="//' -e 's/"$$//' | \
while read -r h; do \
case "$$h" in /*|'') continue;; esac; \
test -e "$$dir/$$h" || printf '%s ' "$$h"; \
done); \
if [ -n "$$missing" ]; then \
printf '%s: unresolved: %s\n' "$*.html" "$$missing" >&2; \
exit 1; \
fi
check-unit-links-html: $(sources.links-html-check)
## Atom gives every feed a distinct id. A site that pins one feed
## URL for the whole build publishes several feeds claiming to be
## the same one.
## -exec ... + rather than $(find ...) as arguments: a site with
## no feeds at all fed grep(1) no filenames, which left it reading
## the terminal, and "make check" hung there rather than passing.
check-unit-feed-ids: $(feeds.xml) $(categories.xml)
dupes=$$(find $(root.dir) -name 'feed*.xml' -type f \
-exec grep -h 'rel="self"' {} + | \
sort | uniq -d); \
if [ -n "$$dupes" ]; then \
printf 'feeds sharing an id:\n%s\n' "$$dupes" >&2; \
exit 1; \
fi
## Only meaningful where content is partitioned by language: the
## directory a page sits in is what it should say it speaks.
check-unit-lang: $(sources.html)
if [ -z '$(LANGUAGES)' ]; then exit 0; fi; \
bad=''; \
for f in $(sources.html); do \
l=$$(printf '%s\n' "$${f#$(root.dir)/}" | cut -d/ -f1); \
case "$$l" in ??) ;; *) continue;; esac; \
d=$$(grep -m1 -o '&2; \
exit 1; \
fi
## po4a writes a translation only when it has one, and a stale
## fuzzy flag is enough to skip a page without saying so.
check-unit-i18n:
if [ ! -f po/po4a.cfg ]; then exit 0; fi; \
missing=$$(grep -oE '[a-z][a-z]:$(root.dir)/[^[:space:]]+' \
po/po4a.cfg | \
cut -d: -f2 | \
while read -r t; do \
test -e "$$t" || printf '%s ' "$$t"; \
done); \
if [ -n "$$missing" ]; then \
printf 'declared in po4a.cfg, never generated: %s\n' \
"$$missing" >&2; \
exit 1; \
fi
## "clean" removes what the current deps.mk lists, so an artifact
## whose source was renamed or deleted stays behind for good --
## and gitignored, so no status command shows it either.
##
## Three rules cover everything whose name says what produced it:
## nearly every artifact is ., a code sidecar is
## .html..txt, and a torrent or a sentinel is named for
## the file it describes. What is left out is derived from a
## directory rather than from one named file -- the dated sortdata
## markers, the feeds, the collection lists -- and so carries no
## name to check a source against.
check-unit-orphans: $(derived-assets)
orphans=$$(find $(root.dir) -type f | \
while read -r f; do \
case "$$f" in \
*.html.*.txt) \
[ -e "$${f%.html.*.txt}.adoc" ] || \
printf '%s ' "$$f";; \
*.torrent|*.sentinel) \
[ -e "$${f%.*}" ] || \
printf '%s ' "$$f";; \
*.htmlbody|*.json|*.snippets|*.links|\
*.caslinks|\
*.html|*.indexentry|*.feedentry|*.mapentry|\
*.categorydata|*.htmlheader|*.htmlfooter|\
*.prevnext|\
*.htmllisting|*.ps|*.pdf|*.midi) \
s=$${f%.*}; \
[ -e "$$s.adoc" ] || \
[ -e "$$s.eslaides" ] || \
[ -e "$$s.ly" ] || \
printf '%s ' "$$f";; \
esac; \
done); \
if [ -n "$$orphans" ]; then \
printf 'built artifacts whose source is gone: %s\n' \
"$$orphans" >&2; \
exit 1; \
fi
symlink-deps = \
$(sources.html) \
$(feeds.xml) \
$(categories.xml) \
$(root.dir)/.well-known/security.txt \
$(sources.media.torrent) \
## A symlink naming a FILE.gz is satisfied by FILE: the twin is
## the packager's to craft over the installed tree, not this
## build's -- see gzipdir(1). Every other link has to resolve
## here and now.
check-unit-links-symlinks: src/all-symlinks.txt $(symlink-deps)
dangling=''; \
for l in $$(cat src/all-symlinks.txt); do \
if [ -e "$$l" ]; then continue; fi; \
t=$$(readlink "$$l"); \
case "$$t" in \
*.gz) test -e "$$(dirname "$$l")/$${t%.gz}" && \
continue;; \
esac; \
dangling="$$dangling $$l"; \
done; \
if [ -n "$$dangling" ]; then \
printf 'symlinks resolving to nothing:%s\n' \
"$$dangling" >&2; \
exit 1; \
fi
check-unit-links: check-unit-links-internal check-unit-links-external
check-unit-links: check-unit-links-symlinks check-unit-links-html
MAXSIZE = 52428800 # from spec: https://www.sitemaps.org/protocol.html
check-unit-sitemap-size: $(root.dir)/sitemap.xml
test "$$(stat --printf='%s' $(root.dir)/sitemap.xml)" -le $(MAXSIZE)
check-unit-sitemap-count: $(root.dir)/sitemap.xml
test "$$(grep -cF '' $(root.dir)/sitemap.xml)" -le 50000
check-unit-sitemap: check-unit-sitemap-count check-unit-sitemap-size
check-unit-expiry: expiry-epoch.txt now.txt
test "$$(cat expiry-epoch.txt)" -gt "$$(cat now.txt)"
check-unit: check-unit-sorting check-unit-updatedat check-unit-links
check-unit: check-unit-sitemap check-unit-expiry
check-unit: check-unit-titles check-unit-listings check-unit-feed-ids
check-unit: check-unit-lang check-unit-i18n check-unit-orphans
check-unit: check-unit-slides
## A site anchors "check" in its own Makefile so pristine(1) finds
## it there, and every site meant that to run these. One of them
## did not say so and its checks never ran, which is a silence no
## site should have to remember to break: the rules that define
## the checks are the rules that ask for them. A site with tests
## of its own names those on a "check" line beside this one.
check: check-unit
ALWAYS:
$(sources.html) $(sources.json): src/i18n.stamp
$(listings.htmllisting) $(categories.xml): src/i18n.stamp
$(articles.feedentry): src/i18n.stamp