Automatic syncing of desktop files to git
 
 
 
Go to file
Joshua Potter 37394588e5 Update README with new `apply` interface.
Also clean up stale TODO.
2022-01-09 10:16:28 -05:00
.githooks Add git dependencies and prep for async. 2021-12-31 10:17:55 -05:00
examples Consistent yaml extension. 2022-01-09 10:05:55 -05:00
src Update README with new `apply` interface. 2022-01-09 10:16:28 -05:00
.envrc Basic project template. 2021-12-28 17:06:17 -05:00
.gitignore Installation instructions. 2022-01-09 10:01:26 -05:00
.homesync.yml Add tests to `path` and `copy` modules. 2022-01-09 07:13:30 -05:00
Cargo.nix Setup flake to produce project. 2022-01-09 09:39:31 -05:00
Cargo.toml Add tests to `path` and `copy` modules. 2022-01-09 07:13:30 -05:00
README.md Update README with new `apply` interface. 2022-01-09 10:16:28 -05:00
flake.lock Setup flake to produce project. 2022-01-09 09:39:31 -05:00
flake.nix Setup flake to produce project. 2022-01-09 09:39:31 -05:00

README.md

homesync

Caution! This is a work in progress!

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

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"
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

Install git hooks as follows:

git config --local core.hooksPath .githooks/