zk/docs/daily-journal.md

2.0 KiB

Maintaining a daily journal

Let's assume you want to write daily notes named like 2021-02-16.md in a journal/daily sub-directory. This common use case is a good fit for creating a note group overriding the default note creation settings.

First, create a group entry in the configuration file to set the note settings for this directory. Refer to the template syntax reference to understand how to use the {{format-date}} helper.

[group.daily]
# Directories listed here will automatically use this group when creating notes.
paths = ["journal/daily"]

[group.daily.note]
# %Y-%m-%d is actually the default format, so you could use {{format-date now}} instead.
filename = "{{format-date now '%Y-%m-%d'}}"
extension = "md"
template = "daily.md"

Next, create a template file under .zk/templates/daily.md to render the note content. Here we used the date again to generate a title like "February 16, 2021".

# {{format-date now "long"}}

What did I do today?

We are now ready to write today's note! We don't need to set --title since the note's title is entirely generated by the template.

$ zk new journal/daily

That is a bit of a mouthful for a command called every day. Would it not be better to just write zk daily? We can, by defining a command alias in the configuration file.

[alias]
daily = 'zk new --no-input "$ZK_NOTEBOOK_DIR/journal/daily"'

Let's unpack this alias:

  • zk new will refuse to overwrite notes. If you already created today's note, it will instead ask you if you wish to edit it. Using --no-input skips the prompt and edit the existing note right away.
  • $ZK_NOTEBOOK_DIR is set to the absolute path of the current notebook when running an alias. Using it allows you to run zk daily no matter where you are in the notebook folder hierarchy.
  • We need to use double quotes around $ZK_NOTEBOOK_DIR, otherwise it will not be expanded.