6 releases (stable)

Uses new Rust 2024

new 1.6.1 Nov 10, 2025
1.6.0 Nov 9, 2025
1.4.0 Oct 6, 2025
0.2.0 Oct 6, 2025
0.1.0 Sep 27, 2025

#147 in Configuration

Download history 96/week @ 2025-09-22 35/week @ 2025-09-29 253/week @ 2025-10-06 23/week @ 2025-10-13 4/week @ 2025-10-20

284 downloads per month

Apache-2.0

30KB
713 lines

Watchers

A CLI tool for managing file system watchers that automatically create git commits when files change. Each watcher runs as a systemd user service, allowing you to monitor multiple directories simultaneously.

Features

  • Multiple named watchers: Create and manage multiple watchers, each monitoring a different directory
  • Debounced commits: Only creates commits after file activity stops
  • Automatic push: Optionally push commits to remote repository
  • Systemd integration: Watchers run as background services with automatic restart

Installation

cargo install --path .

or

cargo install watchers

Build from source:

git clone https://github.com/TenzinPlatter/watchers.git
cd watchers
cargo build --release

Quick Start

  1. Create a new watcher:
watchers create my-project
# You'll be prompted for the directory path to watch
  1. The watcher is now running! It will:

    • Monitor the specified directory for file changes
    • Wait for the configured delay after changes stop
    • Automatically create a git commit
    • Push to remote if auto_push is enabled
  2. Manage your watchers:

# List all watchers
watchers list

# Stop a watcher
watchers stop my-project

# Start a watcher
watchers start my-project

# Delete a watcher
watchers delete my-project

Configuration

Watcher configurations are stored as YAML files in ~/.config/watchers/<name>.yml:

name: my-project
watch_dir: /path/to/your/project
commit_delay_secs: 60  # Wait 60 seconds after last change
auto_push: true        # Automatically push commits

You can manually edit these files to adjust settings, then restart the watcher:

watchers stop my-project
watchers start my-project

How It Works

  1. Each watcher runs as a systemd user service (watchers@<name>.service)
  2. The service monitors the configured directory for file changes
  3. When changes occur a timer is started
  4. If no changes occur for commit_delay_secs seconds then the changes are committed
  5. If auto_push is enabled, the commit is pushed to the remote repository

Development

# Build
cargo build

# Run a command
cargo run -- list
cargo run -- create test-watcher

# Run with debug logging
RUST_LOG=debug cargo run -- __daemon my-project

# Format code
cargo fmt

# Run linter
cargo clippy

Requirements

  • Linux with systemd (uses systemd user services)
  • Git repositories in watched directories

Dependencies

~26–43MB
~705K SLoC