/homesync

Automatic syncing of desktop files to git

Primary LanguageNixApache License 2.0Apache-2.0

homesync

Caution! This is a work in progress!

Introduction

Homesync provides a way of automatically syncing files across your desktop to a git repository. By registering files with homesync, upstream and downstream syncing can be done as requested, without any manual need to twiddle files and copy them into a local git repository. Separately, a daemon service exists that watches for changes as they happen.

Installation

Currently nix is the only distribution channel available. You can run directly from the shell like so:

$ nix shell github:jrpotter/homesync/main

Likewise, you can install the binary using home-manager:

{
  inputs = {
    homesync.url = "github:jrpotter/homesync/main";
  };

  # ...

  configuration = { ... }: {
    home.packages = [
      homesync.defaultPackage.${system}
    ];
  };
}

Lastly, you can always just build from source:

$ git clone https://github.com/jrpotter/homesync.git
$ cd homesync
$ cargo build --release

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: name
  email: email@email.com
ssh:
  public: $HOME/.ssh/id_ed25519.pub
  private: $HOME/.ssh/id_ed25519
repos:
  local: $HOME/.homesync
  remote:
    name: origin
    branch: master
    url: "https://github.com/owner/repo.git"
unmanaged:
  - LICENSE
  - README.md
packages:
  homesync:
    - $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 either:

$ homesync apply <PACKAGE>
$ homesync apply --all

The latter command overwrites all configuration files in favor of those found in the local repository.

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

To get started, we recommend reviewing the documentation:

cargo doc --open

Install git hooks as follows:

git config --local core.hooksPath .githooks/