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
    • --template or -t will allow us to specify a specific template
    • --type specifies 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.md markdown for quick
    notes
  • zettk-cli find -> Searches the settlekasten for note, and provides some basic
    data such as when it was created, when it was last edited, etc.
    • --inbox only searches the inbox
    • --archive only searches the archive
    • --reference only searches references
    • The info returned should also specify which directory the note is in (Inbox,
      Reference, Archive)
  • zettk-cli open finds and opens the zettlekasten note using your choice of
    editor
  • zettk-cli init initalizes 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

Resources

GitHub Repository