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