Taking control of your life with org mode
Table of Contents
In the software enthusiasts world, org-mode does not need any presentations, everyone has at least heard someone singing its praises as the end-all organizational software. Initially, I did not see the appeal, to me it was just an alternative to markdown syntax with some utilities on top, nothing that a good editor and a couple of scripts could not emulate. I tried to find some examples on the web about why org-mode is considered so awesome and but I found very specific posts that would go deep in a very specific feature or very general ones using org-mode as a simple markdown alternative. After a lot of experimentation and more than a year of using it to organize all sorts of stuff, I decided to write this article to show you what actually is that makes org-mode so amazing.
When I started my journey into the personal organization space I found a lot of proponents of the GTD method, and after a brief introduction to it, I found it a good start to base my organizational habits on. The GTD method is pretty simple and can be summarized in a couple of paragraphs, even if some people like to overcomplicate it to make it a one size fit all system the basic of GTD is to note down everything that you need to do and organize when to do it while keeping some periodic review to clean up things. It is not my intention to delve deep into GTD and its infinite variations that people like to proselytize about, mainly because it is not the focus of this article but also because I think that you have to build your system by yourself piece by piece to make it fit your own way of thinking. The good news is that in this article I’m talking about how I use org-mode to build this system for myself and hopefully you will be able to take inspiration from this and build your own system.
What is Org-mode
Org mode is a major mode for the Emacs text editor. Emacs is one of the two most regarded text editors in the world and along with Vim is one of the most debated pieces of software between software engineers. The philosophies of Vim and Emacs are polar opposites and while Vim focuses on being a fast and minimal text editor, Emacs focuses on being totally extensible. The extensibility of Emacs is totally unique in the software world, no other editor or program is as flexible and this is because Emacs is really an interactive programming environment that runs a text editor. A skilled elisp programmer can transform Emacs in whatever he wants with very few limitations on the result.
As a result of this extensibility, a lot of different systems are built on Emacs and they are able to interact together in a way that even after years of usage seem magical. The most incredible extension of the Emacs ecosystem is Org-mode. Org-mode is a system that allows for writing, outlining, scheduling, time tracking, publishing, and much more under a single paradigm and makes the interaction between these different tasks intuitive.
Why Org-mode
Org-mode is one of those things that is really hard to explain and you really have to see it in action to understand its power. When I talk to people about how I use org-mode they often can’t understand the advantages of the system and feel like other systems do what org-mode does but better. This is true in the specific cases, for example:
- the markdown ecosystem is much more developed than org-mode for publishing content and taking notes
- calendar tools are more effective at scheduling appointments
- graph notetaking tools are more immediate at constructing complex graphs of information
- Jupyter notebooks are better to share pieces of code
The problem with this line of reasoning is that these tools are extremely isolated: taking notes about a calendar appointment always leads to the note and the appointment being un-linked. Publishing a blog post written in markdown is fast but you often leave it on the website that you have to manually visit to get back. Constructing a graph in roam is effective until you have to manually copy files and pdf text to cite and link resources together. The advantage that org-mode has over all these tools is that you can access all these functions together in a way that allows their interaction to give back much more value for your organizational needs. In addition to the power of org-mode, you also have all your files in a textual format that can be easily integrated with a VCS like Git to track history and can be synced using software like Dropbox or Syncthing to make it available on all your devices. Lastly working with org-mode files is blazing fast, you don’t have to wait for any browser page to load and if you are used to vim you can enable evil mode giving you access to an incredible vim emulation layer (it is so good that I prefer it to VIM itself)
For an extreme version of how to organize your life with org-mode I suggest you this article, however here I will report some of my use cases to show you what you can build with org-mode.
How I use Org-mode
Right now I’m using org-mode for the following tasks:
General inbox
Any time I think of a task to do, something to check out, or an interesting idea I tend to send it to my org-mode inbox. The inbox is a file that is set up so I can send anything to it using a keyboard shortcut when on my PC or by swiping up on an icon when I’m on my phone. If I add a date to the item it will directly show up on my agenda, otherwise, I will check it and move it to the right section when I review my inbox. This makes the system have very low friction when inputting stuff and works very well for randomly jotting down anything I want. When I access my inbox I can easily refile any entry to its section (projects, task, idea, etc.) using a keybind.
Dotfiles management
My emacs and Linux system configuration is written as an org-mode file, this allows for navigating through it using org-mode commands and to add comments in a single place. The tangling system allows me to convert this org file into the specific files my system needs using a single command and to enable or disable any part of my config with a few keystrokes. This turns managing a long list of big files into a breeze thanks to the hierarchical structure of org files and the ability to fold and move anything easily.
Reading list
I manage my reading list of articles, videos, books, and all kinds of content using an org-mode file. In this way, I can keep an eye on the things I want to explore and how far along I am.
Blog writing
This very post is being written in org-mode using the incredible ox-hugo package to automatically export changes to my blog.
Work journal
When working on a task I usually put it in a work org-mode file where I take notes about what I need to do and the results of what I’m doing. Jotting down small notes or random todos under a task makes it easy to stay focused on the specific thing you are doing while keeping random insights in a place where you can easily find them. You can even track the time you are spending on a task using an org clock!
Personal scheduling
Thanks to the org agenda and its customizability my homepage when opening emacs shows me things that I need to keep my eyes on. In my main agenda view, I can see the things that I have to do today, the hierarchy of what I need to do to progress on my project, things I’m waiting on, and weekly tasks. The best thing about this is that it is totally personalizable with tags, priorities, to-do states, and sorting.
Personal wiki
I keep a kind of big personal wiki with notes and links to things I need to be able to retrieve if needed but that I don’t have to memorize. Code snippets, notes about how to do something, or lists of tools are neatly organized in an org-mode hierarchy.
Searching
Thanks to the ivy package and various org tools all the content of my org-mode files is searchable using a simple keybind. With the addition of a couple of ad-hoc written functions, I can link any org entry to any other one using an interactive search interface.
Tables
Having access to org-mode tables is incredibly convenient. Not only they are very powerful and have some spreadsheet capabilities but they also live near their task. Having a table of the results under the task that generated them is incredibly convenient when you are trying to find the results of the profiling you spent 8 hours on last month.
System documentation
When dealing with complex systems we often find little bits of code that work in that specific context and we want to save, or we figure out how to make something work and we want to document how to reproduce it. By using an org-mode file to do this you can access all the snippets and documentation in a fast way with light speed fuzzy search and the ability to run code with a keypress.
Paper publishing
I write scientific documents in org-mode that I can then easily export to latex and HTML. It allows me to use a very intuitive markup system to create complex documents in a fast and easy way. My resume is written in an org-mode file that is then compiled into latex and PDF before sending. By integrating org-mode with Zotero I can access other papers and cite them automatically in my org files.
Tips and Tricks
Org mode on the go
A big part of today’s life is to be on the go. We are used to getting all of our data whenever we want and wherever we are and if an organizational system cannot give us the freedom to use it when we need it that’s a dealbreaker. In the case of org-mode and emacs, there are two main ways to solve this problem. The first is the hardest and most time-consuming one and is reserved if you really need all the functions emacs can offer whenever you want. The solution is to install emacs on your phone.
Installing emacs on your phone is not that hard using termux and another couple of tools, but using emacs and its keyboard-centric interface on a phone is very user-unfriendly and I do not recommend it.
The second solution and my preferred one is to use an application for your phone, that can be Orgzly for android or Beorg for IOS. With both these applications, you will be able to see and manage your system without having access to a PC and keep your tasks and notes up to date.
You probably noticed that there is still a missing piece of this puzzle and that is the syncing of your files. Org-mode works very nicely with syncing systems and orgzly can use a local folder on your phone to automatically get up-to-date files. My recommendation for syncing your org-mode files and in general anything you need to sync is Syncthing, an amazing open-source piece of software that will make sync free and seamless.
#+begin callout
Orgzly does not directly work on the org-mode files but parses them and rewrites them each time. This leads to a lot of sync conflicts in your folder if you do not let the app update the files each time you change them on your other devices.
After a lot of searching, I found an effective solution for this problem by using the following Tasker action.
Action: com.orgzly.intent.action.SYNC_START
Package: com.orgzly
Class: com.orgzly.android.ActionReceiver
Target: Broadcast Receiver
You can decide to link it to any phone event to be called whenever you prefer and keep your orgzly files and org-mode files in sync seamlessly. #+end callout
A wise thing to do on your emacs configuration when using syncing between devices is to enable autorevert mode to reflect the changes on the files immediately on your PC.
(use-package autorevert)
(global-auto-revert-mode)
(setq auto-revert-use-notify t)
(setq auto-revert-avoid-polling t)
Git integration
Version controlling all your org-mode files in a git repository is a very effective way to keep a history of your files and never lose anything. You can even combine it with an automatic script that runs every hour or so to commit your changes to a remote repository and have a backup.
Agenda speedup
One of the most useful tricks to use with your org agenda if it takes a bit of time to load is to keep it cached.
(setq org-agenda-sticky t)
Why not Org-mode
It would not be fair to finish this section without talking about the drawbacks of the whole org-mode ecosystem. The price to pay for the flexibility of emacs is to be paid in complexity. You can download todoist or vscode and start using them effectively in 5 minutes. This is not the case for Emacs and org-mode. The learning curve of Emacs is incredibly steep and I went close to giving up on it multiple times before seeing the incredible advantages of the system. If you have ever managed to learn vim you will probably be familiar with the initial frustration of trying to do something that should be intuitive in an unfamiliar way. You would also know that after putting time into learning the tool the gain in productivity is unmeasurable and hard to explain to outsiders.
Where to start
A full guide on using org-mode is out of the scope of this article, however, my suggestion, if you want to embark on this journey, is to check out the two following resources:
- The System Crafters youtube channel where you can find many videos that show you how to build your personal emacs and org-mode configuration
- The Doom Emacs repo that is a distribution of Emacs that comes with an amazingly good default configuration and an incredible tooling system that makes building your personal emacs much more fun.