{"id":17093102,"url":"https://github.com/souvikinator/synko","last_synced_at":"2025-04-12T22:51:40.718Z","repository":{"id":57472972,"uuid":"415966708","full_name":"souvikinator/synko","owner":"souvikinator","description":"[abandoned] 🔁 Sync application configurations and settings across multiple multi-platform devices  🖥️💻 (linux and macos)","archived":false,"fork":false,"pushed_at":"2021-10-23T11:20:03.000Z","size":1176,"stargazers_count":5,"open_issues_count":4,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T16:55:06.423Z","etag":null,"topics":["backup","cli","cli-tool","configuration","hacktoberfest","hacktoberfest-accepted","hacktoberfest2021","linux","osx","python","python3","settings","sync","synchronization","synko"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/synko/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/souvikinator.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-10-11T14:40:17.000Z","updated_at":"2023-06-27T20:25:21.000Z","dependencies_parsed_at":"2022-09-26T16:31:03.362Z","dependency_job_id":null,"html_url":"https://github.com/souvikinator/synko","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/souvikinator%2Fsynko","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/souvikinator%2Fsynko/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/souvikinator%2Fsynko/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/souvikinator%2Fsynko/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/souvikinator","download_url":"https://codeload.github.com/souvikinator/synko/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248643044,"owners_count":21138353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backup","cli","cli-tool","configuration","hacktoberfest","hacktoberfest-accepted","hacktoberfest2021","linux","osx","python","python3","settings","sync","synchronization","synko"],"created_at":"2024-10-14T14:04:38.818Z","updated_at":"2025-04-12T22:51:40.695Z","avatar_url":"https://github.com/souvikinator.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/souvikinator/synko\"\u003e\u003cimg src=\"https://github.com/souvikinator/synko/raw/master/assets/logo.svg\" alt=\"synko\" width=\"600\"\u003e\u003c/a\u003e\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n\u003ch3 align=\"center\"\u003esync application configuration and settings across multiple multiplatform devices\u003c/h3\u003e\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://opensource.org/licenses/\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/License-GPL%20v3-yellow.svg\"\n         alt=\"license\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/souvikinator/synko/issues\"\u003e\u003cimg src=\"https://img.shields.io/github/issues/souvikinator/synko\"\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/made%20with-python-blue\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#-features\"\u003e✨ Key Features\u003c/a\u003e •\n  \u003ca href=\"#%EF%B8%8F-install\"\u003e⚗️ Installation\u003c/a\u003e •\n  \u003ca href=\"#-how-to-use\"\u003e📑 How To Use\u003c/a\u003e •\n  \u003ca href=\"#-FAQ\"\u003e🤔 FAQ\u003c/a\u003e •\n  \u003ca href=\"#%EF%B8%8F-setup\"\u003e🛠️ Setup\u003c/a\u003e •\n  \u003ca href=\"#-contribution\"\u003e👨🧑 Contribution\u003c/a\u003e\n\u003c/p\u003e\n\n# ✨ Features\n\n\u003e **Synko is still in development phase and is not tested throughly, so it is recommended to take backup of the config files before adding to synko. As any bug may lead to loss of data.**\n\n- Sync application settings and configuration files across multiple devices (linux and macos)\n- Works with dropbox (Read [FAQ](#-FAQ) to know more)\n- User gets the freedom to add path to the config and setting files.\n- Freedom to sync specific set of files across specific set of devices. Here is an example:\n\n![feature-1-2](https://github.com/souvikinator/synko/raw/master/assets/feature-1-2.png)\n\n# ⚗️ Install\n\nInstall synko with pip\n\n\u003e **NOTE:** If on using `command not found: synko` or similar message shows up then try running the above command as root user (`sudo`)\n\n```bash\n  pip install synko\n```\n\n# 📑 How to use\n\n\u003e **Note**: on first usage of Synko it'll look for Dropbox directory and if not found, it will prompt to enter the path to dropbox. Also synko needs to register you device so it will prompt to enter device name which can be anything you want as long as it's not conflict with pre-registered devices. Here is how it looks:\n\u003e\n\u003e In gif below, synko is running in **[WSL (Windows Subsystem Linux)](https://docs.microsoft.com/en-us/windows/wsl/about)** and my dropbox folder is the Windows so I had to change the dropbox path to the one in windows for it to work properly.\n\u003e\n\u003e ![unregistered](https://github.com/souvikinator/synko/raw/master/assets/unregistered-device.gif)\n\u003e\n\u003e In case one want's to change/update the storage path anytime later then use `synko info -p path/to/storage`\n\n## Add\n\n**Usage:** `synko add [paths...] --config-name=\"configname\"`\n\n\u003e ### **adding files to synko**\n\u003e\n\u003e `config-name` can be anything, synko will add provided paths under the config name\n\u003e\n\u003e ![add command 1](https://github.com/souvikinator/synko/raw/master/assets/add-cmd-2.gif)\n\n\u003e ### **add multiple files to synko**\n\u003e\n\u003e **Note:** if `--config-name / -c` option is not used then it prompts to enter the config name as seen in below gif\n\u003e\n\u003e ![add command 2](https://github.com/souvikinator/synko/raw/master/assets/add-cmd-1.gif)\n\n\u003e ### **adding files under same config name**\n\u003e\n\u003e one can also add files to existing config names like so:\n\u003e\n\u003e `synko add ~/.config/random_app/newfile -c existing_config_name`\n\n\u003e ### **How to sync?**\n\u003e\n\u003e Suppose there are two devices **A** and **B**. In device **A** you added a file like so:\n\u003e\n\u003e **Device A**: `synko add ~/.config/random_app/a.conf --config-name=config1`\n\u003e\n\u003e the file will be saved under config name \"**config1**\". In order to sync this file with device \"**B**\" you need to make sure that the file with similar name (**a.conf** in this case) already exists in device \"**B**\". If does not exist then create an empty file.\n\u003e After doing so you just need to add the file to synko in device **B** under the same config name used in device **A** (**config1** in this case) like so:\n\u003e\n\u003e **Device B**: `synko add ~/.config/random_app/a.conf --config-name=config1`\n\u003e\n\u003e below is a demo\n\u003e ![syncing across device](https://github.com/souvikinator/synko/raw/master/assets/add-different-device-empty.gif)\n\u003e\n\u003e It may also be possible that **a.conf** already exists in device **B** with some content which may differ from the one in device **A**. Conflict arise and user is given the options to choose which one's content should be saved:\n\u003e\n\u003e ![syncing across device](https://github.com/souvikinator/synko/raw/master/assets/add-different-device-non-empty.gif)\n\nCurrent process of syncing is bit tideous as of now but more changes will be made to make the process relatively easy.\n\n## Index\n\n**Usage:** `synko index`\n\n\u003e ### list all the added configurations\n\u003e\n\u003e `synko index`\n\u003e\n\u003e ![index](https://github.com/souvikinator/synko/raw/master/assets/index-cmd.gif)\n\n## Remove\n\n**Usage:** `synko remove [options]`\n\n\u003e ### **remove specific configuration/settings file added to synko**\n\u003e\n\u003e `synko remove --config-name configuration_name_here`\n\u003e\n\u003e it asks to select one or multiple files one wants to remove from synko, user **right arrow key to select** and **left arrow key to unselect** , **up and down arrow key** to navigate.\n\u003e ![remove](https://github.com/souvikinator/synko/raw/master/assets/remove-cmd-1.gif)\n\nIf you don't want to remove any then select nothing and press enter, the process will be aborted\n\n\u003e ### **remove all config files added to Synko on current device for syncing (this won't affect other devices)**\n\u003e\n\u003e `synko remove -a`\n\u003e\n\u003e ![remove all](https://github.com/souvikinator/synko/raw/master/assets/remove-all.gif)\n\n## Info\n\n**Usage**: `synko info [options]`\n\n\u003e ### **displaying current synko settings**\n\u003e\n\u003e `synko info`\n\u003e\n\u003e ![info](https://github.com/souvikinator/synko/raw/master/assets/info-cmd-1.gif)\n\n\u003e ### **updating storage path**\n\u003e\n\u003e `synko info -p path/to/storage/dir`\n\u003e\n\u003e ![info](https://github.com/souvikinator/synko/raw/master/assets/info-path-update.gif)\n\u003e\n\u003e in gif above synko is running in **[WSL (Windows Subsystem Linux)](https://docs.microsoft.com/en-us/windows/wsl/about)** and my dropbox folder is the Windows so I had to change the dropbox path to the one in windows for it to work properly.\n\n## Reset\n\n**Usage**: `synko reset`\n\n\u003e ### Reset synko completely, (fresh as new)\n\u003e\n\u003e This removes all the files added to synko on current device and also resets synko by unregistering you device and the storage path. So next time you run any synko command, you'll be prompted to register your device and if the default storage path is not found then you'll be prompted to enter storage path.\n\u003e\n\u003e ![reset](https://github.com/souvikinator/synko/raw/master/assets/reset-cmd.gif)\n\u003e\n\u003e In the gif above you can see that after reset command, the time when any other synko command is executed it prompts to register device.\n\n# 🤔 FAQ\n\n## Only Dropbox supported?\n\nWell synko works with **any cloud storage syncing solution** as long as all the devices use the same solution. You just need to provide synko with the path to the folder which is getting synced by the **cloud storage syncing solution**. Dropbox is the best one to go with as it has support for mutiple platforms.\n\n# 🛠️ Setup\n\n## **Install dependencies**\n\n\u003e ### using pipenv\n\u003e\n\u003e `pipenv install`\n\n\u003e ### using pip\n\u003e\n\u003e `pip3 install -r requirements.txt`\n\n## **Run:**\n\nAfter making changes make sure to run below command\n\n```bash\nsudo python3 setup.py install\n```\n\nnow to run, directly use `synko` command.\n\n# 👨🧑 Contribution\n\n\u003e **If you are interested in helping with project development, see [contribution guide](https://github.com/souvikinator/synko/blob/master/CONTRIBUTING.md) to find a set of tips.**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsouvikinator%2Fsynko","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsouvikinator%2Fsynko","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsouvikinator%2Fsynko/lists"}