{ "info": { "author": "Matthew Mirvish", "author_email": "", "bugtrack_url": null, "classifiers": [], "description": "# configfiles\n\n[![PyPI version](https://badge.fury.io/py/configfiles.svg)](https://badge.fury.io/py/configfiles)\n[![Python 3.6+](https://img.shields.io/badge/python-3.6%2B-blue.svg)](https://www.python.org)\n\nA system to synchronize configuration files across multiple machines, the smart way.\n\n## Installation\n\n```\n$ pip install configfiles\n\nor\n\n$ pip install -r requirements.txt\n$ python setup.py install\n```\n\n## Design\n\n`configfiles` works on a model of storing and incrementally updating config files, or more accurately scripts to update config files.\nThese scripts are usually autogenerated from file changes, but can be customized to do things like install dependencies or fill-in system\nspecific information.\n\nUnlike git, the updates to these files are stored as a sequence of scripts, as opposed to a graph of diffs. This makes for less powerful\nbranching, but a much simpler internal model. In future versions this may be amended, but it works better for something based around scripts.\n\nThe scripts in question are not actually shell scripts, rather small pieces of python for better interoperability. Most of the time they are\nauto-generated. \n\n---\nBe aware that when using configfiles you open yourself to running arbitrary python code at the same privilege as your account, and\nbe sure to only `sync` to trusted repos\n\n---\n\n## Usage\n\nThere are a few main operations in configfiles, the first being `sync`, which updates a system to the latest version of a config repo.\n\n---\nDo note that once `sync`-ed to a repo, one must `desync` to use another one\n\n---\n\n```\n$ configfiles sync config.someserver.url:repo/path\n```\n\nThe server path may be omitted to use the last `sync`-ed server.\n\nTo update a configfiles repo, one may use the `update` operation, which takes the diff of a file and adds it as a script. The net result\nis that the file is \"checked-in\" to the repo.\n\n```\n$ configfiles update .zshrc\n```\n\n---\nDo note that configfiles paths operate relative to the current user folder by default, and `update` will warn against adding files below the home directory.\n\n---\n\nTo use a custom python script as an update method, use `add`.\n\n```\n$ configfiles add my_updater.py modifies_file.rc\n```\n\nScripts are ran in the home directory, with full access guaranteed to the configfiles public API.\n\nTo revert a change made by `sync`, use `rollback`.\n\n```\n$ configfiles rollback \n\nor (with caution)\n\n$ configfiles rollback --remote \n```\n\n---\nDo note that rollback only cares about files, and there is currently no way to create transactional scripts (i.e. a custom rollback script)\nThe main purpose of the scripting functionality is to customize files for machine-specific things, which is why it is designed this way.\n\n---\n\nBefore using any of the above, a configfiles repo must be `init`-ed.\n\n`init` creates a new repo with no additional scripts.\n\n```\n$ configfiles init config.someserver.url:repo/path\n$ configfiles sync config.someserver.url:repo/path\n$ configfiles update .zshrc \n```\n\n## Further documentation\n\nTODO, refer to code comments for more information\n\n## Server requirements\n\nA server hosting a configfiles repo must support sftp, and that is it. There is no \"configfiles server\", the entire system's code is client-only\n\n## Changelog\n\n0.3.1:\n- bugfixes\n\n0.3.0:\n- added ability to sync specific number of times\n- bugfixes\n\n0.2.1:\n- bugfix release\n\n0.2.0:\n- initial release\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/mincrmatt12/configfiles", "keywords": "vcs configuration remote tool cli config management", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "configfiles", "package_url": "https://pypi.org/project/configfiles/", "platform": "", "project_url": "https://pypi.org/project/configfiles/", "project_urls": { "Bug Tracker": "https://github.com/mincrmatt12/configfiles/issues", "Homepage": "https://github.com/mincrmatt12/configfiles", "Source Code": "https://github.com/mincrmatt12/configfiles" }, "release_url": "https://pypi.org/project/configfiles/0.3.1/", "requires_dist": [ "click", "paramiko", "diff-match-patch" ], "requires_python": ">=3.6", "summary": "A tool to manage config files across machines.", "version": "0.3.1" }, "last_serial": 4457576, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "5c7bab653725243b55067e78bcb81c3c", "sha256": "f53e99f2164720c1fb07f0f50a115a1f729bb59eae9208424e4c234cf6be8738" }, "downloads": -1, "filename": "configfiles-0.2.0.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "5c7bab653725243b55067e78bcb81c3c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20759, "upload_time": "2018-11-05T02:43:39", "url": "https://files.pythonhosted.org/packages/6e/e7/e053b2155b92fd357cbc82b923e56d9db5ba102306c6b83ea242ae7d707d/configfiles-0.2.0.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "2ad7ab8bcd204254bbc3d647a864a69c", "sha256": "a3d262429ede6c9e897789c56e79a0d169bcf6086f1a111641045d6d4fe509d4" }, "downloads": -1, "filename": "configfiles-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2ad7ab8bcd204254bbc3d647a864a69c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 15498, "upload_time": "2018-11-05T02:43:38", "url": "https://files.pythonhosted.org/packages/1d/1b/183ee618a914c178d415ea469bb1c3c5e98d770685aecd6a57ebb7d6f970/configfiles-0.2.0-py3-none-any.whl" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "839bbea8aad1bded1685f323358834d0", "sha256": "ebd1b772b13d31337d4eb56e9745d4ce428c89f7078d2c1d3414db062bb30d39" }, "downloads": -1, "filename": "configfiles-0.2.1.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "839bbea8aad1bded1685f323358834d0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20764, "upload_time": "2018-11-05T02:47:32", "url": "https://files.pythonhosted.org/packages/47/63/84f3abde24905d39a1d2f687b91cf4a6c63ec891f58c21c3dcdd8d194400/configfiles-0.2.1.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "30c04e58e31e6024169e880746d1bd95", "sha256": "4789e018667e56426bccddc077eb7b1d2cb67c052813c263f9e33410f665b04d" }, "downloads": -1, "filename": "configfiles-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "30c04e58e31e6024169e880746d1bd95", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14052, "upload_time": "2018-11-05T02:47:30", "url": "https://files.pythonhosted.org/packages/f1/b3/3ffb24801cd0a715eb180a4c95c3fc97d14285eb580993310c0884376653/configfiles-0.2.1-py3-none-any.whl" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "74892e399bf076116f2f0fddae91ccef", "sha256": "b119ec3a50b81b84c74ddac5cd4baa115bd2abb00fc49d9cc3436fe5e98defe5" }, "downloads": -1, "filename": "configfiles-0.3.0.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "74892e399bf076116f2f0fddae91ccef", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21346, "upload_time": "2018-11-05T14:41:53", "url": "https://files.pythonhosted.org/packages/08/ad/90744408281bdf6ade054efa886daf0903d9d9d0f7a6553faf0c9c64f7dc/configfiles-0.3.0.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "698ce03138f9ac3986f0e905cc29e16f", "sha256": "b49829f3e24b27d595572b9dabfc295e7aeb52e4daf78bb88d6e03d6eecd6a3c" }, "downloads": -1, "filename": "configfiles-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "698ce03138f9ac3986f0e905cc29e16f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14308, "upload_time": "2018-11-05T14:41:51", "url": "https://files.pythonhosted.org/packages/d6/bc/bb698a27e92bd85cc50582a05e14dd4420d5bd9f022a88ba833cfaae114e/configfiles-0.3.0-py3-none-any.whl" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c62be1918abaf0a4f2651eb777be5235", "sha256": "16c27d6a86c4effee8284394462bbbe8fe4348d51952d25d1dcab617e4067939" }, "downloads": -1, "filename": "configfiles-0.3.1.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "c62be1918abaf0a4f2651eb777be5235", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21435, "upload_time": "2018-11-06T14:13:43", "url": "https://files.pythonhosted.org/packages/44/7d/080911b60b48c0697fb212a0d572d97f2e192a2fdcffd8ec90d386276de3/configfiles-0.3.1.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "414464b4b03035b6bee0a63f3d4ee89c", "sha256": "be5f58c746e942b974aeaea1e993d379df7fcd1ee25088b0fd126fa15e2f8c4a" }, "downloads": -1, "filename": "configfiles-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "414464b4b03035b6bee0a63f3d4ee89c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14393, "upload_time": "2018-11-06T14:13:42", "url": "https://files.pythonhosted.org/packages/cb/14/c84e99d86a352fd34ad1b494eed94f57da65068bdbee70aeb3d9bd6401ac/configfiles-0.3.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c62be1918abaf0a4f2651eb777be5235", "sha256": "16c27d6a86c4effee8284394462bbbe8fe4348d51952d25d1dcab617e4067939" }, "downloads": -1, "filename": "configfiles-0.3.1.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "c62be1918abaf0a4f2651eb777be5235", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 21435, "upload_time": "2018-11-06T14:13:43", "url": "https://files.pythonhosted.org/packages/44/7d/080911b60b48c0697fb212a0d572d97f2e192a2fdcffd8ec90d386276de3/configfiles-0.3.1.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "414464b4b03035b6bee0a63f3d4ee89c", "sha256": "be5f58c746e942b974aeaea1e993d379df7fcd1ee25088b0fd126fa15e2f8c4a" }, "downloads": -1, "filename": "configfiles-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "414464b4b03035b6bee0a63f3d4ee89c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14393, "upload_time": "2018-11-06T14:13:42", "url": "https://files.pythonhosted.org/packages/cb/14/c84e99d86a352fd34ad1b494eed94f57da65068bdbee70aeb3d9bd6401ac/configfiles-0.3.1-py3-none-any.whl" } ] }