This repository contains my Obsidian implementation of Molecular Notes – a Second Brain system that I use to organise my thinking. You can read about the philosophy of Molecular Notes here and more about the Obsidian implementation here.
Note: I am not accepting PRs as this repo represents my personal workflow. However, if you have a use case that the current iteration of MolecularNotes doesn't address, it would be awesome if you could create an issue and share the modification you made so that others can get some inspiration!
- Install Obsidian and create an Obsidian Vault (a folder to store all your notes). Mine is named
ObsidianVault
and I put it in my home folder. - Clone this repository into your vault (on GitHub click the green
Code
button, thenDownload ZIP
, and copy-paste the contents into your vault using Finder or File explorer) - Delete the README.md file.
- In Obsidian, go to Settings -> Files & Links -> Default location for new attachments -> _attachments (make this folder if it doesn't exist).
- Set up templates:
- Settings -> Core plugins -> Templates (switch on).
- Settings -> Templates -> Template folder location -> _templates.
- (Optional) set hotkey in Settings -> Hotkeys -> Templates: Insert Template -> ⌘T
- Check you have the below plugins enabled: Settings -> Core Plugins
- (Optional) Change the colour theme to something you like! You can find this in Settings -> Appearance -> Themes
These are the core plugins I am using (most are enabled by default):
- File explorer: duh
- Search: duh
- Quick switcher: a very useful way of quickly jumping to a new note: you just press ⌘O then start typing the note name to jump to it.
- Graph view: duh
- Backlinks / Outgoing links: duh
- Tag pane: a helpful way of looking at your tags
- Page preview: nice syntax
- Templates: a must
- Note composer: I have this but I've only used it rarely
- Command palette: a must
- Starred: a new-ish plugin that helps you save common searches
- Markdown format importer: useful in my workflows to paste Notion content into Obsidian
- Word count: up to you
- Workspaces: handy! I've saved a note view and a graph view.
- Sync: optional but I like it
Community plugins:
- Mind Map: occasionally useful to visualise notes as a mindmap
- Obsidian git: I like having an extra backup to a private github
- Tag wrangler: very useful extension for renaming tags
- Python Scripter: handy extension for in-app Python script calls
This script moves Authors/Sources/Molecules/Topics into their folders, identifies unlinked notes (orphans), and surfaces notes with #todo tags.
Make sure you have python 3 installed on your system. The helper script can be run from your Obsidian Vault:
cd ObsidianVault && python _scripts/obsidian_util.py
In my ~/.zshrc
I then created an alias for this, such that when I type obsidian
into terminal my script runs.
alias obsidian="cd $HOME/ObsidianVault && python _scripts/obsidian_util.py"
Enable Python Scripter
For more advanced functionality, use Python Scripter.
You want to configure it like this:
- Python Script Path:
_scripts
- Default Python Executable:
python3
(just the alias is fine)
Restart Obsidian to load the scripts, and go to settings where your scripts will be displayed. For this script, enable "Pass Vault Path" only, and you're done.
Optional: You can set a hotkey to run this script, I've got it set to ⌘R.
The Polymer dashboard (a spaced repetition tool) requires streamlit
to be installed (pip install streamlit
). It can be run using:
cd ObsidianVault && streamlit run _scripts/polymer.py
If you are having trouble with Polymer, please follow the below steps:
- Shut down the dashboard (e.g ctrl-C wherever you ran
streamlit run _scripts/polymer.py
) - Delete the
_scripts/db.json
file. Note: this will delete your current flashcard progress - Re-run the dashboard
See this blog post for more information.
_scripts/gpt_search.py
implements a smart search. To get it working:
- Install the dependencies:
pip install openai tiktoken tenacity click tabulate
. - Put in your OpenAI key at the top of the file.
- Open terminal and create an alias. My tool is called
nmr
but you can call it something else.
alias nmr="cd $HOME/ObsidianVault && python _scripts/gpt_search.py"
The ideas behind this are discussed in the blog posts, but here is a reference.
- Underscore folders represent Obsidian internals
Topics
stores Topic types for faster browsingSources
contains my notes on any information media: books, articles, videos etcMolecules
contains my personal observations/ideas/thoughtsAuthors
are Source note authors.- Atoms go in the top level
I use tags to represent "is-a" relations (i.e types)
- Core types:
- atom: the base note type for an individual piece of knowledge derived from a source
- molecule: my own observation – a permanent note
- topic: used to signify that a note is a category placeholder
- author: the creator of a piece of content
- todo: something I need to fill in
- project: a long-term project
- Source types:
- book
- article: e.g blog post, web article
- post: social media / forum
- academic: textbook, journal article
- video
- podcast
- primer (e.g sellside)
- presentation
- course
- Atom types:
- tool: something that I can use to solve a problem
- cognitive-bias
- framework: a way of thinking about the world
- school-of-thought: a historical school of thought
- theorem: a mathematical law
- person: someone of note
- event: a historical event
- amusing: a popular saying, aphorism, "law"
- heuristic: a "common wisdom" way of doing something
- trading-strat: a trading strategy
- instrument: a financial instrument