Skip to content

westpoint-io/lazyrsync

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

151 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

lazyrsync

crates.io License: MIT Built with Rust TUI: ratatui Docs

lazyrsync demo

A terminal UI for rsync β€” manage reusable profiles, preview a transfer as a structured diff before running it, and watch a live run with progress and cancellation. All from the terminal, including over SSH where a desktop GUI can't reach.

Contents

Why

rsync is the right tool for backups and syncs, but its flags are easy to get wrong and a single mistake can delete data. lazyrsync keeps you in the terminal while giving you the safety of a GUI: save your transfers once, see exactly what a run will change before it runs, and keep destructive flags behind a gate.

Features

Profiles & tasks

Save a Source β†’ Destination pair once and rerun it with a keystroke.

Profiles & tasks

Dry-run preview

Press p and watch the transfer resolve into a +/~/- diff with stats. Nothing is written until you say so.

Dry-run preview

Live run & cancel

r runs it β€” a progress bar fills with byte and file counts. Press c to stop mid-transfer.

Live run & cancel

Flags & --delete gating

Toggle rsync's options as checkboxes. Flip on --delete and it makes you confirm before anything can be removed.

Flags & --delete gating

Over SSH

Put a user@host:/path on either side of a task and it runs over SSH β€” remote source downloads, remote destination uploads.

Over SSH

Snapshots

Keep numbered, hardlinked versions with --link-dest β€” each run writes the next directory (1/, 2/, …).

Snapshots

Install

rsync must be on your $PATH.

cargo install lazyrsync                          # crates.io
cargo binstall lazyrsync                          # prebuilt release binary
brew install westpoint-io/lazyrsync/lazyrsync     # Homebrew
yay -S lazyrsync                                   # AUR (Arch)

Or build from source:

cargo install --path .

Quickstart

lazyrsync            # launch the TUI
  1. Press ] to switch to the Profiles sub-tab, then a to add a profile.
  2. Back on Tasks (]), press a to add a task: an ID, an Action (Sync ⇄ Snapshot with ←/β†’), a Source, and a Destination. Either path may be local or a remote user@host:/path.
  3. Press p to preview (dry-run) β€” you'll see the exact +/~/- changes and stats, and nothing is written.
  4. Press r to run it. Watch progress in the Runs panel; press c to cancel.

A task is just Source β†’ Destination, exactly like the rsync command line β€” no push/pull, no separate "remote" field. A trailing / on the Source copies its contents; without it, the folder itself is copied.

Resolve / inspect (headless)

lazyrsync can print the exact rsync command a profile resolves to β€” handy for review or dropping into a script. Running transfers headlessly isn't wired up yet; use the TUI to actually run them.

lazyrsync list            # list profiles and their resolved rsync commands
lazyrsync run NAME        # print the resolved command(s) for a profile
lazyrsync run NAME -n     # print the dry-run form (with -n)

Keybindings

Press ? in the app for the full, context-aware list. The essentials:

Key Action
1–4, Tab Focus a rail panel (Runs / Tasks Β· Profiles / Flags / Filters)
] Toggle the Tasks / Profiles sub-tab
j/k, ↑/↓ Move the cursor
space / enter Select the task (or toggle the highlighted flag)
a Add a task (or profile, on the Profiles sub-tab)
p Preview (dry-run) the selected task
r / R Run the selected task / run every task in the profile
e / s / i / x Edit Basics / SSH / Filters / Advanced
d Delete (confirm first)
V Visual range (multi-select), then r/d acts on the block
c Cancel the running job
/ Filter the list, or search the run output
q / Esc Quit

Configuration

Profiles and settings live under $XDG_CONFIG_HOME/lazyrsync/ (typically ~/.config/lazyrsync/):

  • profiles.toml β€” your profiles and tasks
  • settings.toml β€” preferences (theme, hints, skip_delete_warning)

Contributing

See CONTRIBUTING.md for the build/test/lint commands, the module map, and the code + UI conventions.

Acknowledgements

  • lazygit β€” the TUI whose keyboard-driven, panel-based workflow inspired this one.
  • ratatui β€” the Rust TUI library lazyrsync is built on.

License

MIT.

About

πŸ¦€ A friendly terminal UI for rsync, written in Rust. Reusable profiles, an honest dry-run diff, and live progress, even over SSH.

Topics

Resources

License

Contributing

Stars

215 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors