Manages dotfile configuration files across operating systems
Project description
dotfiles-sync
dotfiles-sync is a command line application which helps manage configuration files (typically dotfiles) across different machines and operating systems.
Motivation
I needed a solution which would allowed me to easily automate synchronising my configuration files as I jump between different machines which could be either Windows or Linux.
Getting Started
The --help
will always show the most up to date options:
❯ dotfiles --help
usage: dotfiles [-h] [-c CONFIG] [-w CONFIG_DIR] [-d] [-i] {list,sync,update} ...
positional arguments:
{list,sync,update}
optional arguments:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
dotfiles configuration. Points to target locations.
-w CONFIG_DIR, --config_dir CONFIG_DIR
Location of the configuration files to sync
-d, --dry Never actually write any files, only read and show me what you would have done
-i, --interactive Before doing a write, ask for confirmation
This application relies on the fact that you store your configuration in source control and that you define a configuration file which declares your configurations you want to track along with paths per operating system.
An example of a configuration file is:
{
"config":
{
".bashrc":
{
"Linux": "~/.bashrc",
"Windows": "~/.bashrc"
}
}
}
Where .bashrc
is the file in the configuration directory we are interested in tracking. The configuration directory is the directory where the central authrority of that file lives (typically a git repository which contains all your configuration files). This key could also be directory e.g bash/.bashrc
if you wanted to keep all your bash related configuration files in organised into a bash
folder.
Each key contains paths to operating system specific path the file should be syncronised into. The operating systems supported here are the same as the ones that come in platform.system. Paths are also expanded using os.path.expanduser which means special symbols like ~
will be expanded in both Window and Linux.
list
Once you have a dotfiles configuration and configuration directory you can run list
:
❯ dotfiles --config examples/config.json --config_dir examples/configs list
[18:58:55] INFO Listing Configurations
INFO .bashrc: examples/configs/.bashrc => /home/kiran/.bashrc (ConfigurationMatchStatus.SYNCHRONIZABLE | ConfigurationFileType.FILE)
INFO .vimrc: examples/configs/.vimrc => /home/kiran/.vimrc (ConfigurationMatchStatus.SYNCHRONIZABLE | ConfigurationFileType.FILE)
INFO pgcli: examples/configs/pgcli => /home/kiran/.config/pgcli (ConfigurationMatchStatus.SYNCHRONIZABLE | ConfigurationFileType.DIRECTORY)
SYNCHRONIZABLE
means it looks like it is possible to synchronise this file and FILE
tells us the type of synchronize it's going to do (as oppsosed to DIRECTORY
which will do a recursive copy).
sync
If we are happy, then we can do a sync
. This will take the files in your configuration directory and allow them to the machine.
❯ dotfiles --config examples/config.json --config_dir examples/configs sync
[18:59:41] INFO Copying File examples/configs/.bashrc => /home/kiran/.bashrc
INFO Copying File examples/configs/.vimrc => /home/kiran/.vimrc
INFO Copying Directory examples/configs/pgcli => /home/kiran/.config/pgcli
Syncing Configuration... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
update
You may want to also do the reverse and update your configuration directory with the files on your current machine. This can be done using update
:
❯ dotfiles --config examples/config.json --config_dir examples/configs update
[19:01:47] INFO Copying File /home/kiran/.bashrc => examples/configs/.bashrc
INFO Copying File /home/kiran/.vimrc => examples/configs/.vimrc
INFO Copying Directory /home/kiran/.config/pgcli => examples/configs/pgcli
Updating Configuration Directory: examples/configs ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file dotfiles-sync-0.0.3.tar.gz
.
File metadata
- Download URL: dotfiles-sync-0.0.3.tar.gz
- Upload date:
- Size: 7.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91793bc944650d73bf39c402594ffb2612bf887321b016c06255ac9ed71f0c22 |
|
MD5 | 2460cb5965b7826121a378a61cf3c4bf |
|
BLAKE2b-256 | 5f9178d242fe91bb36276ffbc31eb5f73aefc1818911d70e5dc63607280ac7f4 |
File details
Details for the file dotfiles_sync-0.0.3-py3-none-any.whl
.
File metadata
- Download URL: dotfiles_sync-0.0.3-py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.9.1
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1a9eef87d3bc48e5f290a83a3d727a656787447b4959fb4901315f2ed8833f76 |
|
MD5 | a1475460b57b6ff1cd1b061aacd79b0c |
|
BLAKE2b-256 | a3249476f7d018b1bba6e86926162200a2af9abea6fb20c8379afb2483a500c9 |