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 newwill refuse to overwrite notes. If you already created today’s note, it will instead ask you if you wish to edit it. Using--no-inputskips the prompt and edit the existing note right away.$ZK_NOTEBOOK_DIRis set to the absolute path of the current notebook when running an alias. Using it allows you to runzk dailyno 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.
If you want to edit today’s note, simply use this alias:
$ zk daily