Sync on custom location / cloud

Hi everybody,
This is my first post, I'm still discovering BetterTouchTool. I have the feeling I can use it to replace 2 or 3 tools I currently use, and get access to new features. Awesome :-).

I have seen in the advanced settings an experimental sync feature, that is meant to sync with dropbox.
I would love to use this sync feature ! But I do not use dropBox, I have a nextCloud instance instead.

Would it be possible to offer one of those two possibilities:

  • save settings in a custom folder, so that the cloud client can sync them to other machines
  • offer a sync option to a webdav server

Thanks a lot for the work, I think BTT will become one of the important utilities for my day to day comfort and productivity ! If so, I'll be more than happy to pay a license for that.

Hi,

I was going to open a thread for exactly the same thing :slight_smile:

What I could imagine is an option to "watch" one or more preset(s):

If the preset is modified locally, auto-export it to this given folder
if the preset file in that folder changes, auto-import it locally

Note: by locally I mean the local instance of BetterTouchTool running on my machine)

I believe that would make it possible to sync presets between computers, regardless of the cloud provider which is used (Google Drive, Onedrive, Dropbox, whatever), as they all work with a local folder which gets synced to the cloud.

It also would be useful for people who only have one machine, as for them it's an auto-backup settings equivalent

That would indeed do the job for my need.
I could point to a file observation class written in swift if that can help: https://github.com/jduquennoy/Log4swift/blob/master/Log4swift/Utilities/FileObserver.swift

Note that it does not use apple's FSEvents, because the idea was to make it easily portable to linux (which did not happen as of today), and because the FSEvent APIs are not easily accessible with swift.

Another vote!

I use iCloud and Resilio to sync. The latter requires a specified folder to sync. I am leary of syncing the BTT folder in App Support as I'm not sure what will happen with user permissions.

I would strongly suggest that "Dropbox" sync support be replaced with a more generic "Sync folder" as suggested above. Two reasons I don't like using integration to cloud sync available in many apps today:

  1. Clutters the cloud drive because you don't have control over where the setting files are put
  2. Leaves many users OOL unless they choose to run multiple sync clients (icch!)

Does anyone know of a workaround such as moving sync files to a different folder and using symlinks to reference it? I know that mucking with what is in Library folder is highly frowned upon but maybe there is a process that someone knows works until a more generic sync solution can be found.

Note: For a tool like BTT, not having sync is a major drawback if you have more than one computer.

Gonna answer my own question here... I found that you can write a BTT action that will copy presets to a common folder (i.e. one that is sync'ed between machines) and then load those presets back in. Specifically it copies the ~/Library/Application\ Support/BetterTouchTool folder.

I have 2 actions:

Shortcut 1) Copy BTT presets to folder - Contains 2 actions:

  1. "Execute Terminal Command (Syncrhonous, blocking)" with command:
    cp -R -f ~/Library/Application\ Support/BetterTouchTool <your backup folder>
  • Note: On Mac destination for 'cp' command must include folder name being copied as in: ~/MyBTTBackup/BetterTouchTool/
  1. "Run Apple Script" which I use just to show a dialog "Saved settings" so I can be sure it ran

** Shortcut 2) Retore BTT presets to folder and Restart BTT - Contains 2 actions:**

  1. "Execute Terminal Command (Syncrhonous, blocking)" with command:
    cp -R -f ~/Library/Application\ Support/BetterTouchTool ~/MyBTTBackup/BetterTouchTool/
  2. "Restart BetterTouchTool" (so the settings are applied)

In testing I found you can't do the same for the preferences file since I think it is saved upon app exit but once they are set I really never need to change them so that's fine.

@Andreas_Hegenberg, I think it would be relatively easy to set up sync with folder and it would work even more cleanly than t he workaround I suggest above. I suggest replacing current Dropbox option with this since it would then work with Dropbox or any other method of sync.

  • At system startup, BTT could look to a folder and, if changed, load new App Support and Preferences files. It could determine if its new by comparing dates between what's in Library and what is in the "sync folder".
  • if app remains open, optionally consider checking for changes every minutes or so
  • If the BTT app (the UI) is launched, check for changes in sync folder and re-load prefs and presets if changed. This would ensure user is not editing out of date presets.
  • After any changes that a user makes to either BTT Prefs or presets, copy files from Library to "Sync folder". Before so, check to see if any changes made and if so give user choice of overwriting or re-loading from sync folder. Assuming you checked for changes when BTT app was loaded, its unlikely user would be editing in BTT app on 2 machines at same time so IMO I don't think its worth getting fancy about handling sync conflicts.

Don't think too much about it, I have already implemented something for syncing via folders.Dropbox sync won't be replaced though as it has some speed & reliability advantages due to the Dropbox API. It will be an additional feature.

However it won't be released until the new UI is out (working hard on it, but no release date yet)

Any idea on the release date of this feature yet? With the changes to Dropbox it will become less and less useful, and I will have to look for alternatives.

the current versions let you select icloud as sync location

This solution is useless for me like the DropBox solution. Cloud Provider are not compliant to most enterprise policies.

I would suggest to follow the wishes of the users about a generic folder for sync. For me that would work way better, since I used a Github repo with all my dotfiles and use git-notes to sync it automatically. Github is our main source code hub provider, so this is compliant as long as I don't sync confidental stuff and even then I could encrypt it with git-crypt.

Always remember: you are not your users. Listen to them, their use cases are most often different than yours. :wink:

If there is an app which is based on user‘s wishes it’s probably BTT. For the last 12 years pretty much every feature was proposed by users :wink:

However in this case it’s just too complicated and I don’t have the resources to do a file based sync solution. BTT is too complex for that, and syncing a „live database“ is not simple.

I’ll soon introduce the new Apple iCloud syncing solution Apple suggests though, this should make syncing in general much easier and much more stable.

If you don’t need live sync, you can setup any local sync solution that synchronizes the ~/Library/Application Support/BetterTouchTool folder and the ~/Librar/Preferences/com.hegenberg.BetterSnapTool.plist file
Just make sure to only sync if BTT is quit.

Nice, I guess, for some people, but for the enterprise case, as I mentioned already, completely useless. My employer has a policy in place so that I cannot even connect to an apple account or any other cloud provider that is not in their own data center. Understandable when you think about mindless employees storing confidently documents in their cloud storage.

Back to my requirements: I actually don't need a "live sync". I change the setting of BTT pretty rarely. I just don't want to remember and repeat the setting on all of my computer instances. Which means: Some kind of change detection (maybe in a "backup settings folder") with a "press this button to load and restart BTT" would be totally enough for my use case.

So TLDR: My desired outcome would be that BTT is detecting a change of setting in a known disk location (based on timestamp for example) and offers an easy "load these settings and restart BTT" possibility. The known disk solution should support symbolic links or should be selectable. The syncing itself can be done in various ways by the user itself.

I would also be very interested in a solution to this, and I guess it could be solved by running BTT in a portable mode. If BTT scans the root of all connected drives and network volumes and detects a "BTT_portable_settings" folder then this folder will be used instead of the local BetterTouchTool folder in Application Support.

In this way you could relocate to different computers both offline and online by connecting a usb stick or mounting a personal network volume. I use several applications this way and would love to see such functionality for BTT as well!

Just to clarify: Implementing a "portable settings"-mode is kinda a different topic, but it still could be a solution to the original feature request in this thread.

By creating a "portable settings"-folder on the root of any locally mounted disk - or network share (SMB/FTP/WebDAV/whatever mounted in Finder with r/w permissions) you could override the local settings inside ~/Library. In case more than one user is accessing the same network sharehis might need a locking and/or notification mechanism, or maybe the scope of this feature should be limited to locally mounted disks to avoid such issues.

For many users in sound post production community it is common to carry licenses for plugins on a usb stick (Waves, Plugin Alliance etc) so when relocating to a different computer then it would be very convenient to carry along personal BTT settings togeher with the licenses on the USB stick. Also, this would be useful to those working at facilities that are offline due to security measures and where cloud sync is consequently not an option.

I would be grateful to hear if this is something you would consider implementing.

For portability you just need to setup some symlinks. BTT only uses the ~/Library/Application Support/BetterTouchTool folder and the ~/Library/Preferences/com.hegenberg.BetterTouchTool.plist

If you link this folder and this file to some external disk, it should immediately work.

Thanks for replying! Just tried creating symlinks of the folder and the pref-file with "ln -s" to a different location, but these symlinks are not recognized by BTT. They show up looking like aliases in Finder.

I would be grateful for a command line example in case I'm doing something wrong here?

It would be

ln -s /thePath/to/your/external/drive/BetterTouchTool "~/Library/Application Support/BetterTouchTool/"

and

ln -s /thePath/to/your/external/drive/com.hegenberg.BetterTouchTool.plist ~/Library/Preferences/com.hegenberg.BetterTouchTool.plist

In general there is also lra/mackup: Keep your application settings in sync (OS X/Linux) (github.com) which makes it easy to sync apps between computers

Thanks for the hints, got it working! That is: symlinking works for the BetterTouchTool folder, but not the plist. It seems BTT is unable to use the symlinked plist and goes into an endless loop of relaunching. Are there additional steps needed to get this to work, rights issues?