Joshua Potter 9fdbb34967 | ||
---|---|---|
.githooks | ||
examples | ||
src | ||
.envrc | ||
.gitignore | ||
Cargo.toml | ||
README.md | ||
flake.lock | ||
flake.nix |
README.md
homesync
Caution! This is a work in progress and far from complete!
Introduction
Homesync provides a way of automatically syncing config files across various
applications you may use. It works by establishing a file watcher on all the
configs specified in the primary homesync
config. As files are changed, they
are copied to a local git repository to eventually be pushed by the user.
Likewise, at any point, the user can sync against the remote repository,
overwriting local configurations for one or more packages.
Installation
TODO
Configuration
Homesync uses a YAML file, to be found in anyone of the following locations. Locations are searched in the following priority:
$HOME/.homesync.yml
$HOME/.config/homesync/homesync.yml
$XDG_CONFIG_HOME/homesync.yml
$XDG_CONFIG_HOME/homesync/homesync.yml
The config file should look like the following:
---
user:
name: jrpotter
email: jrpotter@github.io
local: $HOME/.homesync
remote:
name: origin
branch: master
url: "https://github.com/jrpotter/home-config.git"
packages:
homesync:
configs:
- $HOME/.homesync.yml
- $HOME/.config/homesync/homesync.yml
- $XDG_CONFIG_HOME/homesync.yml
- $XDG_CONFIG_HOME/homesync/homesync.yml
...
Copy over examples/template.yaml to where you'd like as a starting point.
Usage
Verify your installation by running homesync
from the command line. To have
your local repository match the remote, run
$ homesync pull
If you make a change to a configuration tracked by homesync, you can tell
homesync to prep pushing those changes via the stage
subcommand or rely on
the daemon service to do it for you:
$ homesync stage
$ homesync daemon &
Homesync will find all tracked files that have changed and stage them in the local repository. You can then push those changes using
$ homesync push
If looking to copy a configuration tracked by homesync to your desktop, you can run
$ homesync apply <filename>
To copy all configurations (and optionally overwrite files that already exist), you can run
$ homesync apply --all [--overwrite]
Known Issues
If using (neo)vim, the daemon watcher will stop watching a given configuration
file after editing. Refer to this issue
for more details. As a workaround, you can set the following in your init.vim
file:
backupcopy=yes
Refer to :h backupcopy
for details on how this works.
Contribution
Install git hooks as follows:
git config --local core.hooksPath .githooks/