| Over dacades I try a lot of note-taking apps and none of them suits me well. So I end up building my own note-taking system. It's a simple terminal-based client with a set of commands to create/search/manipulate markdown files. I use Vim for editing. And there is a command to sync the whole note folder to my github private repo. Some features of the system: - single folder
All file are stored in one single folder without subfolders. No need to categorize every single note. Several years ago I did have some sub-directories base on subjects. I found it time-consuming to maintain as my notes grow, and it didn't really benefit a lot. - search
The `search` command is the most frequently used command. I implement a relative simple ranking function to rank candidate searching results, taking account of factors like last access/modify time, number of matches, how many times file was opened, etc. And It works super well for me. Most of the time the one I want is in the top three. - todo
I write TODOs in different note files, which give me more context about each TODO item. A TODO item looks like `[TODO|20221201|something to do]`. And the `todo` command will just grep all the TODOs from all of my notes using regex matching. - cards
Every time I open the client, it will show me a random segment from a random note. If I have new thoughts on it I can go and check it out. Maybe I will try implementing something like FlashCard in the future. Recently I talk with a friend of mine. He liked the idea and said I should probably make it available to others. Let me know what you guys think about it. Which feature you like? Which feature you wish to have? What does your ideal note-taking system look like? Thanks! |
If you're interested, check out Org-roam for its implementation of this stuff. It's emacs-based, but uses the same style of markdown notes connected by tagging & linking, while providing search & visualization features which take minimal effort to configure. I've modified my own fork of it to include some staleness tracking on files, identifying the last time a node was accessed, updated, or linked-to.