Sync Atom between multiple devices
Keeping the preferences and installed extensions for my text editor in sync across all of my devices is an important part of my productive workflow. I can’t think of a more annoying situation than being disturbed because of a missing snippet or plugin. I’m not sure why the creators of these tools don’t explicitly provide a solution to import / export things in an easier way. iTerm and Alfred are a great example of how to do it right — simply pick a location where your settings should be exported to and keep this file in sync with other devices (Dropbox, iCloud, git, whatever).
Text editors allow us to do the same but a small bit of hacking is required. As a long term Sublime Text user I found keeping dotfiles on Github the best solution. Very recently I jumped over to Atom and I had to keep it in sync between few computers at home and at work. Let me share with you a few possible options.
Sync Settings Plugin for Atom
Sync Settings for Atom is a great plugin by Geno Roupsky. It stores all the settings, keymaps, styles, init scripts, snippets and a list of the installed packages in a single gist. It requires you to create a new personal access token on Github and put it into the plugin settings next to the gistID. This step is required to enable the Gist (which can be public or private) to communicate with all Atom instances. The final step is to trigger a “backup” on the main computer from the Command Palette — cmd-shift-p
(macOS) or ctrl-shift-p
(Linux/Windows). To inject the same config on another device use the “restore” command. To steal a config from your colleague use the “fork” option. It’s easy and works like a charm!
Sync Atom with dotfiles on Github
This option is a bit more manual but gives you full control and the ability to go back in time (thanks to git). Atom stores all settings files inside the ~/.atom/
directory. The trick is to move this folder to your .dotfiles
directory and create a symlink from this directory to the original location. If you are not familiar with the concept of using .dotfiles
, have a look at the unofficial guide which is full of great examples.
# move .atom to .dotfiles
mv ~/.atom/ ~/.dotfiles/
# create a symlink to the directory inside dotfiles
ln -s ~/.dotfiles/.atom/ ~/.atom
Time to add the new .atom
folder to the .dotfiles
repository. Before doing this we need to add a few folders to our .gitignore
file.
# Atom sync
/.atom/blob-store/
/.atom/compile-cache/
/.atom/packages/
/.atom/storage/
These device-specific folders don’t store your settings. You may be wondering why did I add a packages
folder for my .gitignore
. The answer is easy - it stores the source files to all of your extensions and they may be heavy as hell! Does this mean that we need to manually manage the extensions? Nope :-) Package Sync for Atom by Lee Dohm stores a reference to all installed plugins in a packages.cson
file. Simply install it and enable the “Create on change” and “Overwrite packages.cson” options inside the plugin settings. I’m surprised that Atom comes with a fantastic package manager, but doesn’t come with this functionality by default. The only option that would be amazing to have in this plugin would be “Sync on start” but that’s probably only me being fussy!
The thing that you may be concerned about is your userId
being inside your config.cson
file. You don’t need to worry about it too much. Apparently it won’t reveal anything sensitive. If it is still going to give you sleepless nights, you can simply disable the Exception Reporting and Metrics plugins and then remove the userId
line.
Now your .dotfiles
are fully prepared to sync your Atom settings between all of your devices. It looks a bit more complicated than the previous method but it is definitely more powerful and reliable in my experience. When you jump on a new machine just pull the .dotfiles
repo and run the “Package sync: Sync” command from the Atom Command Palette — cmd-shift-p
(macOS) or ctrl-shift-p
(Linux/Windows) — job done.
Sync Atom via Dropbox (or any other cloud service)
The last option is to use a cloud service like Dropbox. I include this method here only because it is possible in theory but in practice it is nowhere near as reliable as the two options mentioned above. Dropbox is not a speed demon. The recent data leak and what it does with our operating systems actually drove me to drop Dropbox. The decision is yours.
# move atom to dropbox
mv ~/.atom ~/Dropbox/Apps/Atom
# create a symlink to the dropbox directory
ln -s ~/Dropbox/Apps/Atom ~/.atom
This is how I do it
The Sync Settings Plugin for Atom is fantastic but it doesn’t give me an option to roll my settings back in time when I mess something up. This requirement is covered by git so that’s why I sync it with my dotfiles. And the Dropbox method? Not for me.
So let me know, what do you think? Share with me your method. Do you have any suggestions? Feel free to use the comments section below. Have a great day :*
hmm I need this now as I have multiple Macs and even Windows Notebooks where I use Atom.
I'd like a setup and never touch again approach so the Dropbox (Onedrive for me) option would be the one I prefer. Are the only downsides the mentioned speed limits of Dropbox? Let's say the settings file is synced fast enough, are there any other things I need to check? Like Restarting atom every time new settings have been synced or something?
The dropbox / one drive is not my concern here - this aspect should be absolutely fine. The thing that I'm afraid about is working between multiple platforms (windows / mac os). Please let me know in the how that works for you please.
Very nice, thanks.
one point: looks like recent versions of Atom create a .gitignore in ~/.atom, containing:
blob-store
compile-cache
dev
storage
.apm
.node-gyp
.npm
so you don't need any of those in your top-level .gitignore. I only needed to add atom/packages to mine.
thanks again.
Sorry. It's been a while since I used Atom lat time. If you have spare minute I'm more than happy to accept your PR to this post @cdmackay:disqus. Thanks for info.
https://github.com/pawelgrz...
Have a great day 🥑
This brainstorm help me in my decision. Thanks!