Thesis
I find using GUI applications such as Obsidian to be cumbersome and not optimal
for how I take notes and utilize information gathering. However, I did like some
aspects of Obsidian such as templates. I also wanted to develop a system that
utilized the Zettelkasten note taking system to it’s fullest, while also
learning how to develop CLIs.
I achieved all of these objectives by writing a custom CLI utility in Go using
the Cobra framework which allows note creation, template
parsing, and initalizing new note vaults as needed, while maintaining 100%
compatability with Obsidian and other note taking applications if need be.
Workflow
Go will have to communicate with both the shell/terminal to get some info such
as the current date and time, etc. and also be able to write/update markdown
files for the daily notes/categories. For the daily note, we also havbe to consider that
we must first check if the note exists, and if it does then we open that daily note. If
it doesn’t exist, we create it. This does mean that we have to be careful not to
overwrite notes as we use them.
Notes must also be able to populate the date form.
Implemented commands
zettk-cli new [args] [TITLE]-> Creates a new note with the supplied TITLE,
arg allows choice of custom template--templateor-twill allow us to specify a specific template--typespecifies if it’s a reference, permanent note, etc.zettk-cli daily-> Opens the daily note for the current day, or creates it if it
doesn’t exist
zettk-cli sp-> Opens the/scratchpad/scratchpad.mdmarkdown for quick
noteszettk-cli find-> Searches the settlekasten for note, and provides some basic
data such as when it was created, when it was last edited, etc.--inboxonly searches the inbox--archiveonly searches the archive--referenceonly searches references- The info returned should also specify which directory the note is in (Inbox,
Reference, Archive)
zettk-cli openfinds and opens the zettlekasten note using your choice of
editorzettk-cli initinitalizes a new zettlekasten with filesystem
Need to Implement
- Perform refactoring
- Add in potential support for Typst or leave that to neovim plugin
management
Notes
- Directory management has been a complete pain in the ass to manage, Go needs
better defaults