01/22/20 - The Quest for Markdown Tag Management Continues

Mood Being weird about tags icon Being weird about tags
Tags Hugo

Inspired by rxqueen’s many cool pages, I finally got around to customizing a few of my tag pages. The good news is it’s easy.

The bad news is it reminded me how annoying my tag organization, or lack of, is and I decided to spend way too much time thinking about it. The more content I add, the more work it is to change tags because Hugo’s tag management is nonexistent. If I decide that Microcontrollers makes a lot more sense as a Category rather than a Tag, I have to edit a bunch of markdown files to make that happen.

I discovered lpar’s hugoutil library which allows tag management from the command line. The library requires you install Go and you will need a usage key for IBM Watson. The github readme does not list the support options so I installed the library to see what they were.

git clone https://github.com/lpar/hugoutil
cd hugoutil
set GO111MODULE=on
go build
C:\Hugo\hugoutil>hugoutil --help
Usage: hugoutil [OPTION]... [FILE]...

      --categorize string     comma-separated list of categories to add
  -h, --help                  get help
  -i, --interactive           prompt to choose keywords and category from Watson

      --tag string            comma-separated list of tags to add
      --uncategorize string   comma-separated list of categories to remove
      --untag string          comma-separated list of tags to remove
  -v, --verbose               output more info about what's going on
  -w, --watson                add metadata from Watson analysis
  -y, --yaml                  use YAML instead of TOML for writing frontmatter


This isn’t quite what I need. I tried looking for utilities that could help with batch updates of frontmatter. chrisdmacrae’s Frontmatter Manipulator command-line usage is largely undocumented and users are referred to –help.

C:\>front-matter-manipulator --help
cli.js <command>

  cli.js convert <file|pattern> <field>     Update the value of a field across
                                            multiple files          [aliases: u]

  cli.js drop <file|pattern> <fields...>    Remove the specified fields
                                                                    [aliases: d]

  cli.js fields <file|pattern>              Outputs all possible fields for
                                            given files             [aliases: f]

  cli.js rename <file|pattern> <field>      Renames the given field
  <replacement>                                                     [aliases: r]

  cli.js update <file|pattern> <field>      Update the value of a field across
  <value|regexp>                            multiple files          [aliases: u]

  cli.js values <file|pattern> <fields...>  Outputs all possible values for
                                            given fields            [aliases: v]

  --version      Show version number                                   [boolean]

  --verbose, -V                                       [boolean] [default: false]

  --silent, -S                                        [boolean] [default: false]

  --ignore       Provide a comma delimited list of files or globs to ignore
                                                       [default: "node_modules"]

  --help         Show help                                             [boolean]

I decided to just fall back on good old fashioned find/replace and maybe learn Regex (ugh) if needed. This actually worked pretty okay, because a lot of the tagging decisions I needed to make were somewhat arbitrary and not based on patterns. I expanded the categories and removed large-volume tags that were essentially acting as categories. I don’t like having single-use tags, so I decided I won’t use a really specific tag, like “Playstation Classic,” unless I have at least 2 items to tag. I dropped around 10 html pages just doing this.

The Single Board Computer category is currently redundant, as I have only ever talked about Orange Pi. I’m actually a lot more interested in microcontrollers now, so I don’t know that I’ll ever explore the other SBC families, but… whatever, I’ll allow it.

I’m not done. Art should be a category, as should Film. But I think I have a better general idea of how to tag and categorize content going forward.