Having decided to stick with org-mode, I have started to customize it to better fit my working style. My workflow is still very much "work in progress", and I will keep tweaking it and adapting it to all the new possibilities opened by org. I will try to post regularly on the progress, giving some details about the configuration I am adding and the way I am setting things up.
Basic setup
Org files
I have started working on two main files: work.org, and personal.org. Although I am synchronizing everything between devices (so all files are accessible from everywhere), I like the flexibility of keeping personal and work stuff separated. This allows me to have two separate weekly reviews, work on Fridays, during working hours, and personal stuff on Saturdays (this is something that always annoyed me in OmniFocus; it is not easy to get a good separation during the weekly review).
I have another file, called mobile-inbox.org, which is the destination for the ideas that I jot down using MobileOrg on iOS, when I am not in front of a computer.
To quickly switch between these files I use Emacs' registers. I have defined the file names in three registers and I switch from one to another using C-x r j (p|w|i)
. This is how I defined the registers:
[gist id="6255115" file="registers.el"]
In addition to these basic files, I let org-mode create archive files when I move projects and tasks out of the way during the weekly reviews (C-c C-x C-a
).
Last, I have a special file for the "Someday / Maybe" category, which I review periodically.
Synchronization
This is definitely not the simplest way to synchronize files, but I don't have many other options given the security measures and network restrictions at work. I keep my org files in a git repository, and I use a remote repository to sync the various clients (Mac Pro and Macbook Pro at home, Windows PC at work). I host the git repo on Bitbucket, although this does not really matter; I used github before, and switched because Bitbucket offers private repos for free. I have a small script which commits local changes, pulls remote changes, and pushes local changes every 30 minutes.
The reason why I am doing something so dumb rather than using a cron job or anything a little smarter, is that I'd rather have a single script which I can run on Windows (cygwin) at work, and home.
[gist id="6255115" file="git-sync.sh"]
Customizations
Calendar integration
One of the things I was missing from OmniFocus are notifications. This problem is quite easy to solve though. There is an interesting project call org-caldav, which allows you to sync org-mode agenda with a remote caldav server. I use a separate calendar on my Google account for this, and it works well. I have added a short section to automate this to my init file, in my Emacs init file.
[gist id="6255115" file="org-caldav-sync.el"]
This script syncs with the calendar every time I start or stop Emacs, and every 12 hours if Emacs is idle (which is the case during the day on my Mac Pro). I also have an encrypted .authinfo
file with my Google credentials, as explained here.
Org-caldav does not sync scheduled times or deadlines, so if you want an action to go to your calendar you need to add a separate timestamp. This is good because it allows you the flexibility of setting a reminder at whatever time you want (probably before the deadline), but at the same time it is easy to forget to add the timestamp. I will try to live with this for a while, and if I forget too often, I will add an automatic calendar event on the deadline (and maybe on the scheduled time).
I plan to work more into this, and ideally I would like to sync org-mode with iCloud (or Google) reminders.
Agenda views
The standard agenda views provided by org-mode are really basic, and I did not find them very useful. I have created four views, which for now do the trick for me.
[gist id="6255115" file="agenda-views.el"]
I plan to add other views based on tags rather than areas of interest (it happens every once in a while that I have work stuff to do at home, or personal stuff to do in the office so this makes sense for me).
Auto-revert minor mode
I usually activate the auto-revert
mode, so whenever a file changes and is re-synced, the corresponding buffer is refreshed. This minimizes the risk of conflicts for me, and is not really a problem as I am the only one working on my files, so the same file never changes in different locations at the same time. I have not automated the activation of this mode whenever I open an org file, but I will probably end up doing so.
Automatic sync with MobileOrg
I have added a section to my init file to automate the sync with MobileOrg, exactly the same thing as I do for org-caldav.
[gist id="6255115" file="org-mobile-sync.el"]
For now I leave the two sync scripts separate because I still have to remove the automatic switch to the result buffer when org-caldav has completed the sync process. Till then, I do not sync the calendar as often as the mobile files.
MobileOrg is very handy to add items to the Inbox while on the go, unfortunately it is not very flexible yet: don't expect anything comparable to OmniFocus for iOS! That said, the access to custom agendas, and the search functions are great.
Prelude
I have played around with Emacs Prelude and I have to admit I like it quite a lot. It is only compatible with Emacs 24, but that is not an issue for me. The downside is that it feels a little too "magic" at the beginning, but it is quite easy to dig into it and I like the way it sets things up. I plan to spend more time to understand how all the magic works in the future. For now I mainly enjoy the benefits.
I have tried Emacs Starter Kit as well, but personally I prefer Prelude. You may want to have a look at it, especially if you are stuck with an older version of Emacs.
Workflow
My workflow is currently very basic. I have started organizing my stuff in the outline without tags, and I am adding tags when I feel I need them (mainly as contexts in the GTD world). This is a major break with my former workflow in OmniFocus, where it is pretty much mandatory to set contexts and attach one to every single action.
I am not going to write more on my current workflow right now, as it is still very much work in progress, and it will probably change significantly when I become more fluent in Emacs and org-mode.
To be continued…