Rationale

Pros

  • Obsidian is more performant. Input lag is very noticeable in Emacs, especially when editing long lines.
  • Obsidian is easier to configure. Although Emacs is much more extensible, I don’t like having to spend a significant amount of time maintaining and updating my configuration.
  • Obsidian is truely cross-platform, which means that I can access and edit my notes whenever and wherever I want. Its stellar support on mobile.
  • Obsidian’s plugin ecosystem is vibrant. Though it may lose in terms of variety compared to Emacs in certain niche areas.
  • Obsidian has a larger user base, meaning that I can find more content about Obsidian than org-roam.
  • Obsidian just looks nice…

Cons

  • Obsidian’s support for vim is extremely limited. Fortunately, the plugin “vimrc support” allows users to define keybindings to a limited degree. More complicated actions have to be written in JS and bound to a key chord. It will be up to the user to define keybindings that ties vim mode to various Obsidian actions and other plugins. Overall, the editing experience on Obsidian with vim mode enabled isn’t ideal.
  • MathJax is no match for actual LaTeX, but I doubt I actually need any more features?

Migration Process

First round of conversion is done with Pandoc. Since org-mode (and org-roam in particular) has a lot of idiosyncracies, the end product won’t be sufficiently well-formatted for import.

#!/usr/bin/env fish
echo '#migratefix' > convtag
mkdir -p md
for orgfile in *.org
    set mdfile (echo -n $orgfile | sed -r 's/\.org$/.md/;s/^[[:digit:]]+?-//;s/_/ /g')
    echo -n "$orgfile -> $mdfile... "
    pandoc -f org -t markdown $orgfile -o md/$mdfile
    cat convtag md/$mdfile > md/$mdfile.new
    command mv md/$mdfile.new md/$mdfile
    echo "Done"
end
rm -f convtag

Skimming the converted files, I noticed a few things that need to be further converted / cleaned up.

  • Match file names with actual title.
    • Solution: manual inspection (#migratefix to #migratefix/fixheader)
  • Remove extra Org headers (#+setupfile, etc) that are wrapped in code boxes.
    • Solution: script in-place regex replace
  • Properly convert org-roam-style links are not properly converted.
    • Solution: script it; discard org-id, format the display text (all lowercase), and manually fix any discrepancies later
  • Fix attachment image links
    • Solution: script it in-place regex replace
  • Deduplicate migrated files
  • Move attachments into Obsidian workspace
  • Delete orphaned attachments (some might be from duplicates)

Further Customizations

  • Customize .obsidian.vimrc
  • Figure out task workflow (where I add tasks, how I process them, etc)
  • Define custom task statuses (check which ones are supported by blue topaz)
  • Build a task dashboard (with commonly used task queries)
  • Download Excalidraw libraries of interest