dotsync

Sync your user-level config between machines through a cloud folder, not git, using symlinks.

brew trust --tap jakobhviid/tapbrew install jakobhviid/tap/dotsync

Install Read the README

macOS and Linux, x86_64 and arm64 ยท MIT licensed

What it does

dotsync symlinks paths from your $HOME into a folder inside Nextcloud, OneDrive, Dropbox, Proton Drive or iCloud. The cloud provider already syncs that folder across your machines, so a config change propagates with no commit, pull or merge. dotsync only wires the symlinks.

A mirror of your home folder

The cloud folder holds a dotsync/ directory laid out like $HOME: ~/.config/zed lives at dotsync/.config/zed. A dotsync.toml next to it lists the mappings and syncs with everything else.

Each machine picks its own

A picker lets you tick what to link on this machine, and the symlinks themselves record what is active, so there is no per-machine state file to drift. Mappings can be scoped to one OS, given a different path per OS, and filed in groups.

Self-healing links

When an app saves atomically and replaces a symlink with a real file, install and doctor --fix relink it if the content still matches the cloud copy. dotsync undo reverts the most recent destructive run.

Secrets kept out of git

dotsync never commits anything and refuses a sync folder inside a git repository. Known secrets such as .ssh, .gnupg and .aws get a restrictive mode, re-asserted on install and doctor --fix.

A first look

There is no mandatory setup step. The first run finds your cloud folder, lets you pick it, installs shell completions and continues. On a second machine the same first run finds the shared folder and lets you tick the items you want there.

# first run: folder, then picker
$ dotsync

# move into the cloud, link it back
$ dotsync adopt ~/.config/zed

# every mapping and its state here
$ dotsync status

# health check (--fix to repair)
$ dotsync doctor

Install

Homebrew, on macOS and Linux

Pours a prebuilt binary, so no compiler is needed. The tap is trusted once first, as Homebrew 6 and later ask.

brew trust --tap jakobhviid/tapbrew install jakobhviid/tap/dotsync

Or one line, without Homebrew

No compiler and no root: downloads the prebuilt binary to ~/.local/bin (set DOTSYNC_BIN_DIR to change it).

curl -fsSL https://raw.githubusercontent.com/jakobhviid/dotsync/main/install.sh | sh

Then run it

The first run on each machine finds the cloud folder and opens the picker. Run dotsync setup only to re-point the folder or reinstall completions.

dotsync

Documentation