Skip to content

Repository files navigation

Linux Profile Sync

License: AGPL-3.0CI

A GTK4/libadwaita GUI application for backing up and synchronizing user profiles on Linux, with special support for Flatpak applications.

DISCLAIMER: This software is for testing and development. User assumes all risk. Always backup before use.

Features

  • Profile Detection — Automatically detects profiles from:

    • ~/.config/ — Application configurations
    • ~/.local/share/ — User application data
    • ~/.var/app/ — Flatpak application data
    • Sensitive profiles (SSH, GPG, password-store) with lock icon
  • Backup Mode

    • tar+zstd compression (default) or tar only
    • Age encryption for sensitive data
    • Backup manifest embedded in each archive
    • Load Config from existing backups
    • Stored locally as hostname-backup-YYYY-MM-DD_HH-MM-SS.tar.zst
  • Sync Mode

    • Real-time file watching with Nextcloud WebDAV
    • Last-write-wins conflict resolution
    • 60s remote polling for changes
  • Modern UI

    • GTK4 with libadwaita (dark mode built-in)
    • Tab-based navigation (Backup / Sync / Settings)
    • Toast notifications for feedback

Installation

AppImage (Most Distros)

Download from GitHub Releases:

chmod +x linux-profile-sync-*.AppImage
./linux-profile-sync-*.AppImage

RPM (Fedora/RHEL)

Enable COPR and install:

sudo dnf copr enable funcyranger/linux-profile-sync
sudo dnf install linux-profile-sync

Flatpak

git clone https://github.com/FunCyRanger/linux-profile-sync.git
cd linux-profile-sync
flatpak-builder --user --install build-dir com.linuxprofilesync.yml
flatpak run com.linuxprofilesync.app

From Source

Dependencies:

# Fedora
sudo dnf install gtk4-devel libadwaita-devel
# Debian/Ubuntu 
sudo apt install libgtk-4-dev libadwaita-1-dev
# Arch
sudo pacman -S gtk4 libadwaita

Build:

git clone https://github.com/FunCyRanger/linux-profile-sync.git
cd linux-profile-sync
cargo build --release
./target/release/linux-profile-sync

Usage

Creating a Backup

  1. Select profiles to backup
  2. Choose destination (default: ~/.local/share/linux-profile-sync/backups/)
  3. Enable encryption if backing up sensitive profiles
  4. Click Create Backup

Loading Configuration from a Backup

  1. Browse backups in the list
  2. Click Load Config on any backup
  3. Matching profiles are selected automatically

Nextcloud Sync

  1. Open Settings tab
  2. Enter Nextcloud URL, username, and app password
  3. Click Test Connection, then Save Settings

Configuration

Settings stored in ~/.config/linux-profile-sync/settings.json:

SettingDefaultDescription
backup_destination~/.local/share/linux-profile-sync/backups/Backup location
compressionZstdCompression mode
nextcloud_urlNextcloud server URL
nextcloud_usernameNextcloud login
selected_profile_ids[]Persisted selections

Architecture

src/
├── main.rs # Entry point
├── backend/
│ ├── backup.rs # tar+zstd backup & manifest
│ ├── borg.rs # BorgBackup integration
│ ├── flatpak.rs # Flatpak app detection
│ ├── nextcloud.rs # WebDAV client
│ ├── profile.rs # Profile detection
│ ├── settings.rs # JSON + keyring persistence
│ ├── state.rs # Shared AppState (RwLock)
│ ├── sync.rs # File synchronization
│ └── logic.rs # Pure business logic helpers
├── frontend/
│ ├── window.rs # Main window
│ ├── backup_page.rs # Backup tab UI
│ ├── sync_page.rs # Sync tab UI
│ ├── settings_page.rs # Settings tab UI
│ └── logic.rs # Pure UI logic helpers
└── models/
└── mod.rs # Data structures

Development

See CONTRIBUTING.md for development documentation.

Quick Start

cargo build # Debug build
cargo build --release # Release build
cargo test# Run tests
cargo fmt && cargo clippy -- -D warnings # Lint

License

GNU Affero General Public License v3.0 (AGPL-3.0)

About

Sync selected user settings and app profiles

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages