kaushalmodi / ox-hugo

A carefully crafted Org exporter back-end for Hugo
https://ox-hugo.scripter.co
GNU General Public License v3.0
867 stars 130 forks source link

Export slows down over time across 1000+ files #733

Open cashpw opened 6 months ago

cashpw commented 6 months ago

Actual Behavior

org-hugo-export-to-md slows down over time. Exporting 1493 files took 11 hours overall and slowed down over time:

image

Here's a zoom between 0-100 seconds:

image

Following the export I have to wait for a few minutes because the Emacs process because it's essentially frozen.

$ top

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                                                                                   
 967046 cashwea+  20   0 1230940 599992 113416 R 100.0   1.8     11,01 emacs 

After a little while it shows less CPU usage:

$ top

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                                                                                                                                   
 967046 cashwea+  20   0 1230940 600248 113416 S  11.9   1.8     11,02 emacs

Expected Behavior

I expect the export time per file to remain around where it started; at 1-3 seconds per file.

How to Reproduce the Issue

Export my notes using cashpw/org-hugo-export-all:

(defun file-notify-rm-all-watches ()
  "Remove all existing file notification watches from Emacs."
  (interactive)
  (maphash
   (lambda (key _value)
     (file-notify-rm-watch key))
   file-notify-descriptors))

(defun cashpw/org-hugo-export-all (&optional directory)
  "Export all hugo files in DIRECTORY."
  (interactive)
  (let* ((directory (or directory
                        (s-lex-format "${cashpw/path--home-dir}/proj/notes")))
         (org-roam-directory directory)
         (files-to-ignore `(
                            ;; ,(s-lex-format "${directory}/unread.org")
                            ;; ,(s-lex-format "${directory}/todos.org")
                            ))
         (files-to-export (seq-difference (directory-files
                                           directory
                                           ;; full
                                           t
                                           ;; match
                                           ".org$")
                                          files-to-ignore))
         ;; For debugging
         ;; (files-to-export (-slice files-to-export 1015))
         (count-files-to-export (length
                                 files-to-export))
         ;; Last updated: 2023-12-05
         (recent-run-file-count 1467)
         (recent-run-seconds 7791)
         (seconds-per-file (/ recent-run-seconds
                              recent-run-file-count))
         (calc-remaining-minutes (lambda (current-file-number)
                                   (let ((files-left (- count-files-to-export current-file-number)))
                                     (/ (* seconds-per-file
                                           files-left)
                                        60))))
         (run-time-estimate (org-duration-from-minutes (funcall calc-remaining-minutes 0)))
         (log-file-path "/tmp/hugo-export.log")
         (last-percent-start-time nil)
         (should-run (y-or-n-p (s-lex-format
                                "Found ${count-files-to-export} nodes in ${directory}. Export estimate: ${run-time-estimate}."))))
    (when should-run
      (let* ((progress-reporter (make-progress-reporter "Exporting roam notes"
                                                        0
                                                        (length files-to-export)))
             (start-time (current-time))
             (org-id-extra-files (org-roam-list-files))
             (i 0))
        ;; Speed up the export
        ;; (advice-add 'org-id-find :override 'org-roam-id-find)
        ;; (memoize 'org-roam-node-id)
        ;; (memoize 'org-roam-node-file)
        (save-excursion
          (mapc
           (lambda (filepath)
             (let ((inner-start-time (current-time))
                   (inhibit-message t)
                   (roam-file-buffer (find-file-noselect filepath))
                   (start-time (current-time)))
               (when (= 0 (% i 10))
                 (message "[cashpw] fix cannot redirect stderr too many open files")
                 ;; Prevent `Error: (file-error "Cannot redirect stderr" "Too many open files" "/dev/null")'
                 (cashpw/kill-all-markdown-buffers)
                 (file-notify-rm-all-watches))
               (message "cashpw/org-hugo-export-all (%d/%d) exporting [%s]"
                        (1+ i)
                        count-files-to-export
                        filepath)
               (with-current-buffer roam-file-buffer
                 (org-hugo-export-to-md))
               (kill-buffer roam-file-buffer)
               (message "cashpw/org-hugo-export-all (%d/%d) exported [%s] %.06f"
                        (1+ i)
                        count-files-to-export
                        filepath
                        (float-time (time-since inner-start-time)))
               (let* ((log-file-path "/tmp/hugo-export.log")
                      (end-time (current-time))
                      (file-number (1+ i))
                      (time-string (format-time-string "%Y-%m-%d %H:%M:%S"))
                      (export-duration-in-seconds (float-time (subtract-time end-time
                                                                             start-time))))
                 (append-to-file (s-lex-format "${time-string}: ${file-number}/${count-files-to-export} ${filepath} (duration: ${export-duration-in-seconds})\n")
                                 nil
                                 log-file-path)))
             (progress-reporter-update progress-reporter
                                       i
                                       (concat "Remaining time (estimate): "
                                               (org-duration-from-minutes
                                                (funcall calc-remaining-minutes
                                                         i))))
             (setq i (1+ i)))
           files-to-export))
        (progress-reporter-done progress-reporter)
        ;; Remove speed-up changes
        ;; (advice-remove 'org-id-find 'org-roam-id-find)
        ;; (memoize-restore 'org-roam-node-id)
        ;; (memoize-restore 'org-roam-node-file)

        (message "cashpw/org-hugo-export-all %.06f" (float-time (time-since start-time)))))))

Example Org File

My notes.

Generated Markdown File or Error

No errors. It's just slow.

Result of M-x list-processes:

emacsql-sqlite  974855  run      *emacsql-sqlite*         --           Main         /home/cashweaver/.config/emacs/.local/straight/build-28.2/emacsql/sqlite/emacsql-sqlite /home/cashweaver/proj/notes/org-roam.db
ispell          967119  run     --                        --           Main         aspell -a -m -B -p /home/cashweaver/.config/emacs/.local/etc/ispell/.pws --encoding=utf-8 --sug-mode=ultra --run-together
server          --      listen  --                        --           Main         (network server on /run/user/451570/emacs/server)

Results of M-x list-buffers:

    config-personal.org         310998 Org              ~/proj/dotfiles/config/doom/config-personal.org
 %  *Warnings*                    3276 Special          
 %  *doom*                        2107 DOOM v3.0.0-pre  
    *scratch*                        0 Fundamental      
 %* *Messages*                   31201 Messages         
  * *ESS*                           29 Fundamental      
  * *Async-native-compile-log*     682 Fundamental      
 %* *Native-compile-Log*          1647 LIMPLE           
  * *Org-Babel Error Output*        83 Compilation      
    zotero.md                      998 Markdown         ~/proj/notes.cashpw.com/content/posts/zotero.md
    zvi_mowshowitz.md              600 Markdown         ~/proj/notes.cashpw.com/content/posts/zvi_mowshowitz.md
    zvi_mowshowitz_book_review_the_elephant_in_the_brain.md    2072 Markdown         ~/proj/notes.cashpw.com/content/posts/zvi_mowshowitz_book_review_the_elephant_in_the_brain.md

Ox-Hugo Debug Information

Debug Info # Debug information for `ox-hugo` ## Emacs Version GNU Emacs 28.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.37, cairo version 1.16.0) of 2023-06-20, modified by Debian ## Org Version Org mode version 9.6.1 (9.6.1-??-fe92a3c @ /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/) ## Hugo Version hugo v0.121.1-00b46fed8e47f7bb0a85d7cfc2d9f1356379b740 linux/amd64 BuildDate=2023-12-08T08:47:45Z VendorInfo=gohugoio ### Org `load-path` shadows **Warning**: Possible mixed installation of Org /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-dot hides /usr/share/emacs/28.2/lisp/org/ob-dot /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-js hides /usr/share/emacs/28.2/lisp/org/ob-js /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-id hides /usr/share/emacs/28.2/lisp/org/org-id /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-irc hides /usr/share/emacs/28.2/lisp/org/ol-irc /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-forth hides /usr/share/emacs/28.2/lisp/org/ob-forth /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-calc hides /usr/share/emacs/28.2/lisp/org/ob-calc /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-python hides /usr/share/emacs/28.2/lisp/org/ob-python /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-icalendar hides /usr/share/emacs/28.2/lisp/org/ox-icalendar /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-list hides /usr/share/emacs/28.2/lisp/org/org-list /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-bibtex hides /usr/share/emacs/28.2/lisp/org/ol-bibtex /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-koma-letter hides /usr/share/emacs/28.2/lisp/org/ox-koma-letter /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-docview hides /usr/share/emacs/28.2/lisp/org/ol-docview /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-keys hides /usr/share/emacs/28.2/lisp/org/org-keys /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-R hides /usr/share/emacs/28.2/lisp/org/ob-R /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-maxima hides /usr/share/emacs/28.2/lisp/org/ob-maxima /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-plot hides /usr/share/emacs/28.2/lisp/org/org-plot /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-eshell hides /usr/share/emacs/28.2/lisp/org/ob-eshell /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-w3m hides /usr/share/emacs/28.2/lisp/org/ol-w3m /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-table hides /usr/share/emacs/28.2/lisp/org/org-table /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-octave hides /usr/share/emacs/28.2/lisp/org/ob-octave /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-org hides /usr/share/emacs/28.2/lisp/org/ob-org /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-md hides /usr/share/emacs/28.2/lisp/org/ox-md /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-pcomplete hides /usr/share/emacs/28.2/lisp/org/org-pcomplete /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-duration hides /usr/share/emacs/28.2/lisp/org/org-duration /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-ruby hides /usr/share/emacs/28.2/lisp/org/ob-ruby /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-num hides /usr/share/emacs/28.2/lisp/org/org-num /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-perl hides /usr/share/emacs/28.2/lisp/org/ob-perl /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-attach-git hides /usr/share/emacs/28.2/lisp/org/org-attach-git /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-tangle hides /usr/share/emacs/28.2/lisp/org/ob-tangle /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/oc-biblatex hides /usr/share/emacs/28.2/lisp/org/oc-biblatex /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-bbdb hides /usr/share/emacs/28.2/lisp/org/ol-bbdb /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-exp hides /usr/share/emacs/28.2/lisp/org/ob-exp /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-scheme hides /usr/share/emacs/28.2/lisp/org/ob-scheme /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob hides /usr/share/emacs/28.2/lisp/org/ob /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-indent hides /usr/share/emacs/28.2/lisp/org/org-indent /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-tempo hides /usr/share/emacs/28.2/lisp/org/org-tempo /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-ditaa hides /usr/share/emacs/28.2/lisp/org/ob-ditaa /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-eshell hides /usr/share/emacs/28.2/lisp/org/ol-eshell /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-C hides /usr/share/emacs/28.2/lisp/org/ob-C /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-crypt hides /usr/share/emacs/28.2/lisp/org/org-crypt /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-java hides /usr/share/emacs/28.2/lisp/org/ob-java /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-groovy hides /usr/share/emacs/28.2/lisp/org/ob-groovy /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-mouse hides /usr/share/emacs/28.2/lisp/org/org-mouse /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-man hides /usr/share/emacs/28.2/lisp/org/ox-man /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-haskell hides /usr/share/emacs/28.2/lisp/org/ob-haskell /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-latex hides /usr/share/emacs/28.2/lisp/org/ox-latex /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-publish hides /usr/share/emacs/28.2/lisp/org/ox-publish /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-habit hides /usr/share/emacs/28.2/lisp/org/org-habit /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-css hides /usr/share/emacs/28.2/lisp/org/ob-css /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-src hides /usr/share/emacs/28.2/lisp/org/org-src /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-macro hides /usr/share/emacs/28.2/lisp/org/org-macro /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-archive hides /usr/share/emacs/28.2/lisp/org/org-archive /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-info hides /usr/share/emacs/28.2/lisp/org/ol-info /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org hides /usr/share/emacs/28.2/lisp/org/org /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-inlinetask hides /usr/share/emacs/28.2/lisp/org/org-inlinetask /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-makefile hides /usr/share/emacs/28.2/lisp/org/ob-makefile /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-ref hides /usr/share/emacs/28.2/lisp/org/ob-ref /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-odt hides /usr/share/emacs/28.2/lisp/org/ox-odt /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/oc-basic hides /usr/share/emacs/28.2/lisp/org/oc-basic /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-ocaml hides /usr/share/emacs/28.2/lisp/org/ob-ocaml /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol hides /usr/share/emacs/28.2/lisp/org/ol /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-org hides /usr/share/emacs/28.2/lisp/org/ox-org /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-beamer hides /usr/share/emacs/28.2/lisp/org/ox-beamer /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-shell hides /usr/share/emacs/28.2/lisp/org/ob-shell /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-table hides /usr/share/emacs/28.2/lisp/org/ob-table /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-attach hides /usr/share/emacs/28.2/lisp/org/org-attach /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-lua hides /usr/share/emacs/28.2/lisp/org/ob-lua /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-clojure hides /usr/share/emacs/28.2/lisp/org/ob-clojure /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-mobile hides /usr/share/emacs/28.2/lisp/org/org-mobile /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-agenda hides /usr/share/emacs/28.2/lisp/org/org-agenda /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-fortran hides /usr/share/emacs/28.2/lisp/org/ob-fortran /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-man hides /usr/share/emacs/28.2/lisp/org/ol-man /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-timer hides /usr/share/emacs/28.2/lisp/org/org-timer /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-macs hides /usr/share/emacs/28.2/lisp/org/org-macs /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-footnote hides /usr/share/emacs/28.2/lisp/org/org-footnote /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-element hides /usr/share/emacs/28.2/lisp/org/org-element /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-texinfo hides /usr/share/emacs/28.2/lisp/org/ox-texinfo /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-gnuplot hides /usr/share/emacs/28.2/lisp/org/ob-gnuplot /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-plantuml hides /usr/share/emacs/28.2/lisp/org/ob-plantuml /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/oc hides /usr/share/emacs/28.2/lisp/org/oc /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-protocol hides /usr/share/emacs/28.2/lisp/org/org-protocol /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-faces hides /usr/share/emacs/28.2/lisp/org/org-faces /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/oc-csl hides /usr/share/emacs/28.2/lisp/org/oc-csl /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-entities hides /usr/share/emacs/28.2/lisp/org/org-entities /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-screen hides /usr/share/emacs/28.2/lisp/org/ob-screen /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-refile hides /usr/share/emacs/28.2/lisp/org/org-refile /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-html hides /usr/share/emacs/28.2/lisp/org/ox-html /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-julia hides /usr/share/emacs/28.2/lisp/org/ob-julia /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-feed hides /usr/share/emacs/28.2/lisp/org/org-feed /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-matlab hides /usr/share/emacs/28.2/lisp/org/ob-matlab /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-compat hides /usr/share/emacs/28.2/lisp/org/org-compat /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-capture hides /usr/share/emacs/28.2/lisp/org/org-capture /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-gnus hides /usr/share/emacs/28.2/lisp/org/ol-gnus /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-lint hides /usr/share/emacs/28.2/lisp/org/org-lint /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-sql hides /usr/share/emacs/28.2/lisp/org/ob-sql /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-rmail hides /usr/share/emacs/28.2/lisp/org/ol-rmail /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-clock hides /usr/share/emacs/28.2/lisp/org/org-clock /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-ctags hides /usr/share/emacs/28.2/lisp/org/org-ctags /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-eval hides /usr/share/emacs/28.2/lisp/org/ob-eval /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox hides /usr/share/emacs/28.2/lisp/org/ox /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-goto hides /usr/share/emacs/28.2/lisp/org/org-goto /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-lisp hides /usr/share/emacs/28.2/lisp/org/ob-lisp /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-processing hides /usr/share/emacs/28.2/lisp/org/ob-processing /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-sqlite hides /usr/share/emacs/28.2/lisp/org/ob-sqlite /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-emacs-lisp hides /usr/share/emacs/28.2/lisp/org/ob-emacs-lisp /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-latex hides /usr/share/emacs/28.2/lisp/org/ob-latex /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-core hides /usr/share/emacs/28.2/lisp/org/ob-core /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-comint hides /usr/share/emacs/28.2/lisp/org/ob-comint /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-lilypond hides /usr/share/emacs/28.2/lisp/org/ob-lilypond /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-lob hides /usr/share/emacs/28.2/lisp/org/ob-lob /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ox-ascii hides /usr/share/emacs/28.2/lisp/org/ox-ascii /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-awk hides /usr/share/emacs/28.2/lisp/org/ob-awk /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/oc-natbib hides /usr/share/emacs/28.2/lisp/org/oc-natbib /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-sass hides /usr/share/emacs/28.2/lisp/org/ob-sass /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-colview hides /usr/share/emacs/28.2/lisp/org/org-colview /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-mhe hides /usr/share/emacs/28.2/lisp/org/ol-mhe /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ob-sed hides /usr/share/emacs/28.2/lisp/org/ob-sed /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/ol-eww hides /usr/share/emacs/28.2/lisp/org/ol-eww /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-datetree hides /usr/share/emacs/28.2/lisp/org/org-datetree /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-version hides /usr/share/emacs/28.2/lisp/org/org-version /home/cashweaver/.config/emacs/.local/straight/build-28.2/org/org-loaddefs hides /usr/share/emacs/28.2/lisp/org/org-loaddefs Study the output of `M-x list-load-path-shadows`. ## `ox-hugo` defcustoms
org-hugo-section “posts”
org-hugo-use-code-for-kbd nil
org-hugo-preserve-filling t
org-hugo-delete-trailing-ws t
org-hugo-prefer-hyphen-in-tags t
org-hugo-allow-spaces-in-tags nil
org-hugo-tag-processing-functions (cashpw/org-hugo–tag-processing-fn-roam-tags org-hugo–tag-processing-fn-replace-with-spaces-maybe org-hugo–tag-processing-fn-replace-with-hyphens-maybe)
org-hugo-auto-set-lastmod nil
org-hugo-export-with-toc nil
org-hugo-export-with-section-numbers nil
org-hugo-front-matter-format “toml”
org-hugo-default-static-subdirectory-for-externals “ox-hugo”
org-hugo-external-file-extensions-allowed-for-copying (“jpg” “jpeg” “tiff” “png” “svg” “gif” “mp4” “pdf” “odt” “doc” “ppt” “xls” “docx” “pptx” “xlsx”)
org-hugo-date-format “%Y-%m-%dT%T%z”
org-hugo-paired-shortcodes “”
org-hugo-suppress-lastmod-period 0.0
org-hugo-front-matter-format “toml”
cashpw commented 6 months ago
(remove-hook 'before-save-hook 'org-encrypt-entries t)
(setq org-element-use-cache nil)

These appear to have no affect on export time. The duration of the first 400 files matched up nearly 1:1 with the full run I did earlier.