Skip to main content
  1. Notes/

How I Manage My Reading List with Org-Mode

·493 words·3 mins
orgmode book emacs
Table of Contents

The moment I discovered org-mode, I felt an instant connection and an overwhelming urge to shift my entire life into it—my notes, TODOs, you name it. Yes, even my reading list, which was comfortably managed in Goodreads. To my surprise, integrating it with my other org files has been as seamless as transitioning it from Goodreads.

Capturing a Book #

No fancy capture template, just a basic capture template to my inbox file that will get refiled into my reading list file (books.org) every week.

(setq org-capture-templates '(("i" "📥 Inbox" entry (file "~/org/agenda/inbox_desktop.org") "* %?\n  %i\n" :prepend t)
                              ("j" "📔 Journal" entry (file+datetree "~/org/agenda/journal.org") "* %? %^G\nEntered on %U\n  %i\n")
                              ("b" "📑 Bookmark" entry (file "~/org/agenda/bookmarks.org") "* %? %^g\n  %i\n" :prepend t)
                              ("s" "🛒 Shopping List" entry (file+headline "~/org/agenda/shoppinglist.org" "SHOPPING LIST") "* TODO %?\n  %i\n" :prepend t)))

The unique thing about capturing a book item, compared to other items, into my inbox is that I use org-cliplink1 to grab the book title. For instance, when I stumble upon a gem like “The Martian” by Andy Weir—my all-time favorite sci-fi!—I just head to its Goodreads page2, copy the link, and paste it into my inbox using org-cliplink. That way, it ends up looking something like this:

* [[https://www.goodreads.com/book/show/18007564-the-martian][The Martian by Andy Weir | Goodreads]]
Figure 1: Here is how my reading file looks like—small part of it.

Reviewing a Book #

When I’m reading a book, I mark it as NEXT. And when I’m done devouring every page, I mark it as DONE (or in other case, when I cannot finish it—looking at you, IT by Stephen King, I mark it as CANC) and jot down a short review in the content.

Figure 2: My brief review for IT by Stephen King

Rating a book #

#+TITLE: 📖 Reading List
#+CATEGORY: Books
#+TODO: NEXT(n) TODO(t) | CANC(c) DONE(d)
#+PROPERTY: Rating_ALL nil 0 1 2 3 4 5
#+COLUMNS: %TODO %91ITEM %5Rating %TAGS

As you noticed in my in-file settings above, I set predefined values for Rating property and customize my column view for efficient book rating. When it’s time to rate a book, I activate column view, C-c C-x C-c by default, navigate to the relevant Rating cell and start assigning ratings using org-columns-next-allowed-value or org-columns-edit-value.

Figure 3: How I rate a book in column view

Initially, I experimented with using star (⭐) emojis for Rating_ALL values (as depicted below), but I found it more practical to use numbers 1-5. With this setup, I can simply type the rating value using org-columns-edit-value.

#+PROPERTY: Rating_ALL nil ⭐ ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
Figure 4: Using emoji for rating values which is prettier but not as practical

Migrating My Existing Reading List from Goodreads #

It was as simple as exporting CSV file from Goodreads export tool page3, write a small python script and voila! That wraps it all!