PeterSmith.Org

Automating Hugo

    I've been kind of unhappy with my current way of creating post. It has gotten rather messy, and so I spent some time making things a bit easier — at least in terms of creating posts.

    This isn't the first time I've looked at this issue. From awhile ago, see [https://petersmith.org/blog/2021/06/07/automating-hugo/][this post]] and [https://petersmith.org/blog/2016/11/21/automating-hugo-part2/][that post].

    First off, I have a function to create the title of the post.

    
    (defun ps/create-hugo-post-file (&optional post-type)
      "Create a blog org-file in ps/data + path-to-blog"
          (interactive)
          (unless post-type (setq post-type "blog"))
          (setq ps/post-title (read-from-minibuffer "Title: "))
          (let* ((filename (concat (read-from-minibuffer "Filename: "
                           (replace-regexp-in-string "-\\.org" ".org"
                                                     (concat (format-time-string "%Y%m%d-")
                                                             (downcase
                                                              (replace-regexp-in-string "[^a-z0-9]+" "-" ps/post-title))
                                                             ".org"))))))
    
            (expand-file-name filename (concat ps/hugo-post-dir post-type "/"))))

    Not knowing much elisp, it's probably a bit clunky. But it does work.

    Then I added these lines into my org-capture-templates definitions.

    
    ("h" "Hugo Templates")
    ("hb" "Blog post" plain (file (lambda() (ps/create-hugo-post-file "blog")))
       (file ,(concat ps-org-files "Org/tpl-hugo-post.txt")))
    ("hj" "Journal post" plain (file (lambda() (ps/create-hugo-post-file "journal")))
       (file ,(concat ps-org-files "Org/tpl-hugo-post.txt")))

    It took some faffing around, and I couldn't quite make the ps/create-hugo-post-file work right. I kept getting an error, saying org-capture-expand-file: Invalid file location: nil. Grrr. But the lambda() trick seems to have sorted that. I don't understand why … I've more reading to do on that.

    Finally, as my template string was getting big, I created a file tpl-hugo-post.txt to make managing it easier. it looks like this (and includes some dummy text):

    
    #+title: %(format "%s" ps/post-title)
    #+date:  "%t"
    #+draft: false
    #+categories[]: %^{Categories|technology|it|research|the-arts|blogging|jottings|productivity|learning|teaching}
    
    %?* They're all dead dave
    
    %x

    All, in all that works well. Now to get the uploading to Netlify etc working well.


    Webmentions
    If you webmention this page, please let me know the URL of your page.

    BTW: Your webmention won't show up until I next "build" my site.

    Word count: 300 (about 2 minutes)

    Published:

    Updated: 7 Jun '21 11:55

    Author: Peter Smith

    Permalink: https://petersmith.org/blog/2021/06/07/automating-hugo/

    Section: blog

    Kind: page

    Bundle type: leaf

    Source: blog/2021/06/07/automating-hugo/index.org