Emacs + Org-mode + Syncthing = Perfect combo
Taking notes is a part of my life and work: jot down ideas, manage tasks and track personal projects. But soon came a problem, what tool is best for supporting this simple task.
There are 3 must-have features I searched for:
Markdown (or relevant) editor
Auto-sync between machines
Less but not least, affordable price
Searching journey
As for me, todo note or shopping list is too trivial. And editing markdown on smart phone sucks and inconvenient. So I just focus on PC and laptop station here.
I found Boostnote first. Free as it’s a FOSS (Free and Open Source Software). But this fancy editor is (as expected) built on Electron, a RAM-hungry framework. No built-in sync feature, but enabled through third party like Google Drive or Dropbox.
Since I didn’t like the roundabout syncing, so Inkdrop is my second stop. Also built on Electron, but came with built-in sync service through CouchDB, and charge you less than $5 per month. This was pretty suitable for me, and I felt comfortable in 2-month trial. The creator also wrote a post about process of building his product, which is very interesting to know about.
But I don’t really like the idea of a RAM-killer app for just a simple task like saving texts. There should be another ways for rubbing my itch.
The unicorn came to the rescue
Vim was my main editor, until I knew about Org-mode, which is only fully available on Emacs.
Vim was good, but I’m somewhat not in the mood of learning Vimscript for long-term scaling my .vimrc
. In contrast, I love Lisp - the good old legend survived through time.
So Emacs Lisp
+ Org-mode
are 2-main reasons made me make a switch to a new life-long partner: Emacs.
So after grabbing the basics and setting a somewhat decent .emacs.d
, fully integrating Org-mode, life is damn good.
;; [...]
;; simple setup
(require-package 'org)
(add-hook 'org-mode-hook 'turn-on-font-lock)
(global-set-key "\C-cl" 'org-store-link)
(global-set-key "\C-ca" 'org-agenda)
(global-set-key "\C-cc" 'org-capture)
(global-set-key "\C-cb" 'org-iswitchb)
(setq org-log-done 'time)
;; Turn off auto-fold
(setq org-startup-folded nil)
;; [...]
My dotfiles’s .emacs.d for your information. And a good setup guide for Emacs in my opinion.
Org mode is for keeping notes, maintaining TODO lists, planning projects, and authoring documents with a fast and effective plain-text system.
Talk is cheap, actually use this with powerful key combination really broads my horizon. For example:
- Add a TODO list with
M-shift-RET
- Mark as completed with a single combination
C-c C-t
.
Besides, learning Org syntax is not so hard, from a perspective of a Markdown fan-boy like me.
Syncthing - the lost ingredient to perfect combo
So Emacs + Org-mode is totally free, check. Wonderful Markdown/Org editor, check. It occurred to me that I knew about Syncthing in a Golang blog post:
Syncthing is an open-source cross platform peer-to-peer continuous file synchronization application.
Basically, Syncthing decentralizes your shared data to all connected nodes identified with cryptographic certificates.
I need at least a live node for no-downtime syncing (a central hub). A low cost private cloud server is a good choice, but in my case I used my 99.99% uptime Raspberry Pi 3 (which mainly ran Pi-hole for my home).
# Add GPG key
wget -O - https://syncthing.net/release-key.txt | sudo apt-key add -
# Add repository
echo "deb http://apt.syncthing.net/ syncthing release" | sudo tee -a /etc/apt/sources.list.d/syncthing-release.list
# Update and install
sudo apt-get update
sudo apt-get install syncthing -y
Re-bind configuration from local loopback 127.0.0.1
to 0.0.0.0
(/home/pi/.config/syncthing/config.xml
):
<gui enabled="true" tls="true">
<address>0.0.0.0:8384</address>
<apikey>...</apikey>
</gui>
This will enable you to access http://<pi's IP>:8384
Web Interface of Syncthing.
Finally just start syncthing
service:
sudo systemctl start syncthing@pi.service
# auto start at start-up
sudo systemctl enable syncthing@pi.service
Access http://<pi's IP>:8384
:
Here you can see I shared my /home/pi/org
directory which contains all my .org
notes to 2 nodes: online dell
+ offline thinkpad
.
Now if I make a change from my /home/dell/org
, it will syncs back to /home/pi/org
. And when my thinkpad
goes online, /home/thinkpad/org
auto updates all its notes, too!
Et VoilĂ ! Work like a charm. Plus, both Emacs and Syncthing use just a little of RAM and CPU resource.
Conclusion
Inkdrop solo, (Vim + Git) traditional way, or (Emacs + Org-mode + Syncthing) combo with hands-free syncing? Use the right tool for the job, and pick what suits you the best.
For now, Emacs is my everyday editor, including programming stuff and note-taking. Long live (Emacs) Lisp.