# GnomeSettingsVault

![GnomeSettingsVault Logo](logo.png)

A high-integrity backup and restore utility for GNOME environments. Unlike standard backup tools, GnomeSettingsVault uses **Atomic Swap** logic and **Live-Extension Disabling** to ensure that themes, icons, and shell extensions are restored without crashing the GNOME Shell.

## Features
* **Atomic Restore:** Extracts to shadow directories before swapping to minimize filesystem locks.
* **Safe Extension Handling:** Automatically toggles extensions off during restore to prevent Shell segmentation faults.
* **Dconf Integration:** Full backup of GNOME's configuration database.
* **Debug Logging:** Optional real-time logging to `~/GnomeSettingsVault.log`.
* **GPLv3 Licensed:** 100% Free and Open Source.

## The "Why" this application exists

Most GNOME backup solutions fail because they attempt to "hot-swap" configuration files while the GNOME Shell is actively reading them. This leads to broken icons, default "X" cursors, and frequent Shell segmentation faults (crashes).

This application follows three strict architectural principles to ensure your desktop hopefully survives the restore:

1. **The Extension Kill-Switch:** Before a single byte is moved, the app programmatically disables all user extensions. This prevents the Shell from executing scripts that are mid-replacement.
2. **Shadow Extraction (Atomic Swaps):** We never extract directly into live directories like `~/.themes` or `~/.local/share/gnome-shell/extensions`. Components are extracted to hidden "shadow" folders first. 
3. **The Janitorial Sweep:** Once extraction is verified and synced to disk, the app performs an atomic directory rename. This reduces the "danger window" for the OS file monitor from minutes to milliseconds.

Re-installing a Gnome-based workstation is a major pain. I know that - I've done it countless times. This application tries to resolve this issue. This tool is designed for those who want to migrate their perfectly tuned environment between machines—or versions—without the desktop environment throwing a tantrum.

## Prerequisites
* `gtkmm-3.0`
* `libarchive`
* `dconf-cli`

## Usage
1. Compile using the provided `Makefile`.
2. Run `./gnome-vault`.
3. After a restore, a **Logout** is highly recommended to flush the GNOME cache and apply all UI changes correctly.

## Contributing
As GNOME moves toward versions 49 and 50, please report any path changes or extension API breakages via Issues.
