0d8cddb9be1acdfced762a33ec37f9cd523c17d2
Build / build (push) Failing after 1m56s
Converge
Auto-sync one or more git repositories by watching for file changes, automatically committing them, and pulling from a remote.
Converge notifies the user via libnotify / notify-send whenever a merge conflict occurs during automatic pulling.
Usage
Configuration
Converge looks for its config file at $XDG_CONFIG_HOME/converge/config.yaml (typically ~/.config/converge/config.yaml). If found, it uses that file automatically.
# Run with the default XDG config file
./scripts/run
You can also specify a config file explicitly:
./scripts/run -- --config /path/to/converge.yaml
Single repository (no config file)
If no config file exists, converge falls back to watching a single repository:
# Watch the current directory
./scripts/run
# Watch a specific repo with options
./scripts/run -- --repo /path/to/repo --branch master --debounce 10000
Options
| Option | Default | Description |
|---|---|---|
-c, --config FILE |
$XDG_CONFIG_HOME/converge/config.yaml |
Path to YAML config file listing repositories |
-r, --repo PATH |
. (cwd) |
Path to a single git repository (single-repo fallback mode) |
-d, --debounce MS |
5000 |
Debounce window in milliseconds (overrides config file) |
--remote NAME |
origin |
Remote name (single-repo fallback mode) |
-b, --branch NAME |
main |
Branch to pull (single-repo fallback mode) |
Config file format
# ~/.config/converge/config.yaml (XDG default)
repos:
- path: /absolute/or/relative/path
remote: origin # optional, defaults to "origin"
branch: main # optional, defaults to "main"
- path: /another/repo
debounce_ms: 5000 # optional, defaults to 5000
Development
All development tools run inside Docker via the hs wrapper script.
# Build (format + compile)
./scripts/build
# Run tests
./scripts/test
# Run the tool
./scripts/run
# Install to ~/.local/bin
./scripts/install
Design
- Language: Haskell (GHC 9.10.3 via lts-24.38)
- File watching: fsnotify
- Concurrency: one watcher thread per repository via
async - Notifications: shell out to
notify-send(libnotify) - Configuration: YAML config file at XDG config path for multi-repo, CLI flags for single-repo fallback
- Daemonization: TBD (likely systemd service)
Description
Languages
Haskell
79%
Go
13.8%
Shell
7.2%