TuxSync
Profile Sync for Linux Users - Like Apple's Migration Assistant or Chrome Sync, but for your Linux packages and configurations.
Features
- Multi-Distro Support: Works on Ubuntu/Debian (apt), Fedora (dnf), and Arch (pacman)
- Privacy First: Choose between GitHub Gists (convenient) or your own custom server (private)
- Loose Coupling: Uses tuxmate-cli as an external executor - no embedded code
- Smart Scanning: Only backs up user-installed packages, filters out libraries
- Magic Restore: One-liner command to restore your setup on any Linux machine
Quick Start
Installation
```bash
Clone the repository
git clone https://github.com/Gururagavendra/tuxsync.git cd tuxsync
Install with uv (recommended)
uv sync
Or use the wrapper script
chmod +x tuxsync.sh ./tuxsync.sh help ```
Create a Backup
```bash
Interactive mode (recommended)
./tuxsync.sh backup
Or using uv
uv run tuxsync backup
Skip bashrc backup
uv run tuxsync backup --no-bashrc
Direct to GitHub (non-interactive)
uv run tuxsync backup --github --non-interactive ```
Restore on New Machine
```bash
Using the magic command (shown after backup)
curl -sL https://raw.githubusercontent.com/Gururagavendra/tuxsync/main/restore.sh | bash -s -- <GIST_ID>
Or install TuxSync and restore
uv run tuxsync restore <GIST_ID>
Dry run to see what would happen
uv run tuxsync restore <GIST_ID> --dry-run
Skip package installation, only restore bashrc
uv run tuxsync restore <GIST_ID> --skip-packages ```
List Your Backups
```bash uv run tuxsync list ```
Requirements
- Python 3.10+
- GitHub CLI (gh) - For GitHub Gist storage: https://cli.github.com/
- gum (optional) - For pretty terminal menus: https://github.com/charmbracelet/gum
- tuxmate-cli - For cross-distro package installation: https://github.com/Gururagavendra/tuxmate-cli
The wrapper script (`tuxsync.sh`) will help install these if missing.
Architecture
TuxSync follows a loose coupling principle:
``` ┌─────────────────────────────────────────────────────────┐ │ TuxSync │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ Scanner │ │ Storage │ │ Restore │ │ │ │ (Brain) │ │ Backend │ │ Manager │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ [apt/dnf/ [GitHub/ [tuxmate-cli] │ │ pacman] Custom] Executor │ └─────────────────────────────────────────────────────────┘ ```
- TuxSync = The Brain (orchestrates everything)
- tuxmate-cli = The Hands (does the actual package installation)
- If tuxmate-cli isn't installed, TuxSync will fail gracefully with installation instructions
Configuration
TuxSync creates backups with two files:
`tuxsync.yaml`
```yaml version: "1.0" created_at: "2024-12-28T10:30:00Z" distro: "Ubuntu" distro_version: "24.04" package_manager: "apt" package_count: 142 packages:
- vim
- git
- docker.io
- nodejs
... more packages
has_bashrc: true ```
`bashrc`
Your raw `~/.bashrc` content (if backed up).
Custom Server API
If using `--server`, your server should implement:
POST `/api/backup`
```json { "metadata": { /* tuxsync.yaml content */ }, "bashrc": "# .bashrc content..." } ``` Response: `{"backup_id": "unique-id"}`
GET `/api/backup/{backup_id}`
Response: ```json { "metadata": { /* tuxsync.yaml content */ }, "bashrc": "# .bashrc content..." } ```
Development
```bash
Install dev dependencies
uv sync --all-extras
Run tests
uv run pytest
Lint
uv run ruff check src/
Type check
uv run mypy src/ ```
License
MIT License - See LICENSE for details.
Related Projects
- tuxmate-cli - Cross-distro package installer CLI (used as executor)
Metadata
Release files for tuxsync 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| tuxsync-0.1.0.tar.gz | 12.9 kB | Without provenance | Details for tuxsync-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| tuxsync-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for tuxsync-0.1.0-py3-none-any.whl |
Total release size: 29.4 kB
Release files / tuxsync-0.1.0.tar.gz
| Download URL | tuxsync-0.1.0.tar.gz |
|---|---|
| Size | 12.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b732a4389f859b457c8a41d030de0177f0ad443f36c0ca814e2e3e4708061de8
|
|
BLAKE2b-256 checksum How to use checksums |
1eb9f229400e1350bba125f9caa16fea6f6b3c2b5285f06f4d07b7356ade298d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|
Release files / tuxsync-0.1.0-py3-none-any.whl
| Download URL | tuxsync-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ee8df2533035067161b6fe3cc3581dcf97b0f1df82ff7ac2ea52100227f58d5c
|
|
BLAKE2b-256 checksum How to use checksums |
e698d7965fd00740f3bb47b32a22e3755cc9304b6dc980ec1a3a3d032917ae7a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.7
|
Security for tuxsync 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.