Sync Settings
With Sync Settings, you can synchronize your settings/resources across multiple devices.
You can also switch between profiles with their own settings/resources.
HowTo
configure the repository:
> Sync Settings: Open the repository settings
upload your settings to the repository:
> Sync Settings: Upload (user -> repository)
download your settings into a new editor:
> Sync Settings: Download (repository -> user)
Configuration
Repository
The repository is configured with the following file:
settings.yml
# current machine's name, optional; it can be used to filter settings or in the commit message
hostname: ""
# more details at https://github.com/zokugun/vscode-sync-settings/blob/master/docs/hostname.md
# selected profile, required
profile: main
# repository to sync the settings with, required
repository:
# repository's type, required (dummy: no sync)
type: dummy
You can open that file with the command:
> Sync Settings: Open the repository settings
Repository types
file
# sync on local file system
repository:
type: file
# path of the local directory to sync with, required
path: ~/Development/settings
local git
# sync on local git
repository:
type: git
# path of the local git repository to sync with, required
path: ~/Development/settings
# branch to sync on, optional (set to `master` by default)
branch: master
If not initialized, the git repository will be automatically initialized.
How to personalize the commit messages
remote git
# sync on remote git
repository:
type: git
# url of the remote git repository to sync with, required
url: git@github.com:username/settings.git
# branch to sync on, optional (set to `master` by default)
branch: master
No authentifications are stored.
But the git
command on your system will need to be able to read/write on the remote repository.
How to personalize the commit messages
rsync
# sync on remote directory with rsync
repository:
type: rsync
# url of the remote directory to sync with, required
url: server:~/settings
# shell used by rsync, optional (set to `ssh` by default)
shell: ssh
The access to the server shouldn't require the need of any passwords.
webdav
# sync on remote directory with webdav
repository:
type: webdav
# url of the remote directory, required
url: http://localhost:9988/webdav/server
# the username, optional
username: webdav-user
# the password, optional
password: pa$$w0rd!
# all options available at https://github.com/zokugun/vscode-sync-settings/blob/master/docs/webdav.md
All WebDAV options available here
Which resources?
You can configure what and how to synchronize with properties in your regular settings (settings.json
).
"syncSettings.resources": ["extensions", "keybindings", "settings", "snippets", "uiState"]
"syncSettings.ignoredExtensions": ["<extension's id>"]
"syncSettings.ignoredSettings": ["editor.fontFamily"]
"syncSettings.keybindingsPerPlatform": true
External Files
Additionally, you can sync external files with the following property in your regular settings (settings.json
):
"syncSettings.additionalFiles": [
"~globalStorage/alefragnani.project-manager/projects.json",
"~/vscode_projects.json",
]
The paths can start with special prefixes:
~/
: the user home (as usual)
~editorStorage
: the directory where the extensions are stored (ex: ~/.vscode
)
~globalStorage
: the directory where the extensions are storing their global states (ex: ~/Library/ApplicationSupport/Code/User/globalStorage
)
settings.yml
When trying the synchronize the settings.yml
of the extension, an error will be thrown.
There is no need to synchronize that file since it contains only the needed and required informations to effectuate a synchronization, from the first one to the last.
Saved Extensions
When installing an extension, if a matching .vsix
is present in the data/extensions
directory of the profile, that .vsix
will installed instead of the one found in the marketplace.
You can find the data/extensions
directory by executing the command > Sync Settings: Reveal the profile in the file explorer
.
Profiles
Each profile has its own directory in the repository and can be configured independently of each other.
You can create a new profile with the command > Sync Settings: Create a new profile
.
Or switch to an existing one with the command > Sync Settings: Switch to profile
.
Profile Inheritance
A profile can extend an existing profile but it's limited to the following resources:
You can select the profile to extend from when creating a new profile (command > Sync Settings: Create a new profile
).
The command > Sync Settings: Open the profile settings
will allow you to modify the property extends
.
Commands
> Sync Settings: Open the repository settings
: open the settings for configuring the repository
> Sync Settings: Upload (user -> repository)
: upload/copy the resources from the user to the repository
> Sync Settings: Download (repository -> user)
: download/copy the resources from the repository to the user
> Sync Settings: View differences between actual and saved settings
: display differences between the actual settings and the saved ones
> Sync Settings: Prompt if a difference between actual and saved settings is been found
: prompt if you want to upload your settings if any difference has been found
> Sync Settings: List the missing extensions
: display the list of missing extensions
> Sync Settings: Create a new profile
: create a new profile
> Sync Settings: Delete a profile
: delete a profile
> Sync Settings: Switch to profile
: switch to the selected profile
> Sync Settings: Open the profile settings
: open the settings for configuring the profile
> Sync Settings: Reveal the profile in the file explorer
: open the profile's local copy in the file explorer
> Sync Settings: Reveal the repository in the file explorer
: open the repository's local copy in the file explorer
> Sync Settings: Remove all settings and extensions
: ⚠️⚠️ remove all your local resources ⚠️⚠️
JSONC Attributes
JSONC attributes can be used to enable/disable settings based on, for example, the OS or the editor's version.
example
{
// #if(os="mac")
// "editor.fontWeight": "300",
// #elif(os="windows")
// "editor.fontWeight": "400",
// #else
// "editor.fontWeight": "500",
// #endif
}
When the settings.json
is downloaded, depending on the OS, the setting editor.fontWeight
will have the following value:
OS |
editor.fontWeight |
Linux |
500 |
MacOS |
300 |
Windows |
400 |
More details here
Hooks
Hooks allow you to run commands in an integrated terminal before and after the following events:
More details here
Crons
syncSettings.crons
allows you to schedule the commands download
, review
or upload
.
"syncSettings.crons": {
"review": "0 * * * *", // every hour
"download": "0 9 * * *", // at 9AM, every day
"upload": "0 17 * * *" // at 5PM, every day
}
Remote
Remote mode is supported but the synchronization will be limited to only extensions.
More details here
Donations
Support this project by becoming a financial contributor.
Enjoy!