Skip to content

diegoperu/draco

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

██████╗ ██████╗  █████╗  ██████╗ ██████╗
██╔══██╗██╔══██╗██╔══██╗██╔════╝██╔═══██╗
██║  ██║██████╔╝███████║██║     ██║   ██║
██║  ██║██╔══██╗██╔══██║██║     ██║   ██║
██████╔╝██║  ██║██║  ██║╚██████╗╚██████╔╝
╚═════╝ ╚═╝  ╚═╝╚═╝  ╚═╝ ╚═════╝ ╚═════╝

Dotfile & Runtime Archive and Configuration Orchestrator

License: GPL v3 Bash Encryption Compression

Porta la tua workstation ovunque. In un file. Cifrato.


DRACO è un sistema di backup portabile, cifrato e automatizzabile per workstation Linux. Salva dotfile, chiavi SSH/GPG, personalizzazioni KDE e GNOME (Konsole, Spaceship prompt, temi Plasma...), e genera automaticamente uno script per reinstallare tutto il software con un solo comando.

Non è un backup dei tuoi dati. È il backup della tua identità da sysadmin.

Indice


Funzionalità

  • Backup cifrato — AES-256-CBC via OpenSSL, PBKDF2 con 600.000 iterazioni
  • Compressione zstd — rapida e efficiente; fallback automatico su gzip
  • Deduplicazione SHA-256 — se non ci sono modifiche, nessun file duplicato (symlink)
  • Versioning con log e diff — ogni backup ha un log leggibile con le variazioni rispetto al precedente
  • KDE completo — Konsole profiles, Spaceship prompt, color schemes, Plasma themes, Aurorae, shortcut globali
  • GNOME completo — export/import dconf, estensioni, temi GTK
  • Reinstall script — generato automaticamente per dnf / apt / pacman / zypper + flatpak + snap + pip + npm
  • Retention configurabileall / daily / weekly / monthly / smart
  • TUI bash nativa — 5 temi 256-color senza dipendenze (ghost, blood, acid, matrix, void); colori fissi indipendenti dal tema terminale
  • Automazione — systemd user timer o cron, installazione interattiva
  • DE mismatch detection — ripristino da KDE su GNOME (e viceversa) con warning automatico e skip delle config DE-specifiche
  • Portabile — una cartella, zero compilazione, funziona su qualsiasi Linux con bash 4+

Distribuzioni supportate

Distro Versione minima Package manager
Fedora 42+ dnf
Debian 12 (Bookworm)+ apt
Ubuntu 24.04 LTS+ apt
Arch Linux rolling pacman
Manjaro / EndeavourOS / Garuda pacman
Kubuntu / Xubuntu / Pop!_OS 24.04+ apt

Requisiti

Obbligatori (presenti in quasi tutte le distro):

bash >= 4.0   tar   openssl   sha256sum   find   grep   sed   awk

Raccomandati:

zstd      # compressione (fallback: gzip)
whiptail  # input testuale nella TUI (opzionale; fallback: read nativo)

Nota TUI: L'interfaccia grafica è scritta in bash puro con ANSI 256-color. Non dipende da whiptail o dialog per i colori — usa i range 16-255 che sono fissi su tutti i terminali 256color (non rimappabili da KDE Konsole o altri). whiptail/dialog vengono usati solo per i campi di input testo e password.

Installazione dipendenze:

# Fedora
sudo dnf install tar openssl zstd newt

# Debian / Ubuntu / Kubuntu
sudo apt install tar openssl zstd whiptail

# Arch
sudo pacman -S tar openssl zstd libnewt

Installazione

# Clona il repo
git clone https://github.com/diegoperu/draco.git
cd draco

# Oppure scarica ed estrai l'archivio
tar xzf draco-*.tar.gz && cd draco

# Installa (user o system)
bash install.sh

Lo script installa DRACO in ~/.local/bin/draco (utente, senza sudo) o /usr/local/bin/draco (sistema, con sudo).

Se ~/.local/bin non è nel tuo $PATH, aggiungi a ~/.bashrc o ~/.zshrc:

export PATH="$PATH:$HOME/.local/bin"

Utilizzo rapido

draco                         # Avvia la TUI
draco backup                  # Backup immediato
draco restore                 # Ripristino (selezione interattiva)
draco restore 20260508-143022 # Ripristino backup specifico
draco list                    # Lista backup con dimensioni
draco log                     # Log ultimo backup
draco log 20260508-143022     # Log backup specifico (con diff)
draco delete 20260101-120000  # Elimina un backup
draco schedule install        # Installa schedule automatico
draco config                  # Configurazione
draco status                  # Riepilogo stato

Prima esecuzione:

draco
# Chiede: directory di destinazione backup
# Chiede: installare schedule automatico?
# Salva config in: ~/.config/draco/draco.conf

TUI — Interfaccia Testuale

┌──────────────────────────────────────────────────────────┐
│  DRACO v1.0.0                                            │
│  Dotfile & Runtime Archive and Configuration Orchestrator│
│                                                          │
│  Backup dir: /mnt/backup/draco                           │
│  Last backup: 20260508-020001                            │
│  Storage: 142M                                           │
│                                                          │
│  ┌────────────────────────────────────────┐              │
│  │  BACKUP    Run backup now              │              │
│  │  RESTORE   Restore a backup            │              │
│  │  LIST      List backups and storage    │              │
│  │  LOG       View backup logs and diffs  │              │
│  │  DELETE    Delete backup(s)            │              │
│  │  SCHEDULE  Manage automatic schedule   │              │
│  │  CONFIG    Configure DRACO settings    │              │
│  │  ABOUT     About DRACO                 │              │
│  └────────────────────────────────────────┘              │
└──────────────────────────────────────────────────────────┘

Temi disponibili

La TUI usa ANSI 256-color (range 16-255, non rimappabili dal terminale).

Tema Colore testo Ispirazione
ghost Bianco brillante su nero Default, massima leggibilità
blood Rosso brillante su nero Stile hacker
acid Giallo brillante su nero High visibility
matrix Verde brillante su nero The Matrix
void Ciano brillante su nero Cyberpunk

Alias retrocompatibili: default→ghost, blue→void, anthropic→blood, eva01→matrix.

# Cambia tema dalla TUI
draco config   # → Theme

# Override da riga di comando
DRACO_TUI_THEME=matrix draco
DRACO_TUI_THEME=void draco

Backup automatico

Systemd user timer (raccomandato)

draco schedule install
# Sceglie: systemd, giornaliero, 02:00

Configurare la password per l'esecuzione non presidiata:

mkdir -p ~/.config/environment.d
echo 'DRACO_PASSWORD=tuapassword' > ~/.config/environment.d/draco.conf
chmod 600 ~/.config/environment.d/draco.conf

Cron

draco schedule install   # sceglie cron
# oppure manualmente in crontab:
DRACO_PASSWORD=tuapassword
0 2 * * * /home/utente/.local/bin/draco backup -q

Verifica schedule

draco schedule status
systemctl --user list-timers | grep draco

Ripristino

Scenario 1: stessa macchina / stessa distro

draco restore              # seleziona il backup dalla lista
# inserisci password
# i file esistenti vengono spostati in ~/.draco-pre-restore-TIMESTAMP/

Scenario 2: nuova macchina / fresh install

# 1. Installa DRACO (vedi sopra)
# 2. Monta/copia la directory dei backup
# 3. Configura la destinazione
draco config               # o: export DRACO_BACKUP_DIR=/path/backup

# 4. Ripristina dotfile e config
draco restore

# 5. Reinstalla il software
bash ~/.local/share/draco/restore-<ID>/reinstall.sh

Scenario 3: KDE → GNOME (o viceversa)

DRACO rileva il mismatch automaticamente:

══════════════════════════════════════════════════════
  DE MISMATCH DETECTED
  Backup creato con: KDE
  Sistema attuale:   GNOME

  Tutto verrà ripristinato TRANNE:
  - Personalizzazioni desktop environment
  - Impostazioni KDE-specifiche
══════════════════════════════════════════════════════

Le config DE-specifiche vengono saltate automaticamente. Dotfile, SSH, GPG e tutto il resto vengono ripristinati normalmente.


Retention

Policy Comportamento
all Mantiene tutto. Il disco cresce indefinitamente. (default)
daily Ultimi N backup giornalieri
weekly Ultimi N backup settimanali
monthly Ultimi N backup mensili
smart N giornalieri + 1/settimana per N settimane + 1/mese per N mesi + 1/anno per N anni

Configurazione in ~/.config/draco/draco.conf:

DRACO_RETENTION_POLICY=smart
DRACO_RETENTION_KEEP_DAILY=7
DRACO_RETENTION_KEEP_WEEKLY=4
DRACO_RETENTION_KEEP_MONTHLY=12
DRACO_RETENTION_KEEP_YEARLY=3

Sicurezza

  • AES-256-CBC con PBKDF2 (600.000 iterazioni) — protezione contro brute force
  • La password non viene mai salvata su disco
  • I backup includono chiavi SSH private e keyring GPG: usa una password forte (12+ caratteri)
  • Imposta i permessi corretti sulla directory backup:
chmod 700 $DRACO_BACKUP_DIR
  • Per l'automazione, usa ~/.config/environment.d/draco.conf con chmod 600
  • Non usare mai -p password dalla CLI in ambienti condivisi (la password appare in ps aux)

Struttura progetto

draco/
├── draco                        # Entry point principale
├── install.sh                   # Installer (user o system)
├── LICENSE                      # GNU GPL v3
├── docs/
│   ├── draco.1                  # Man page (groff/troff)
│   ├── draco.1.txt              # Man page plain text
│   ├── draco-quickguide.pdf     # Quick guide PDF
│   └── draco-quickguide.txt     # Quick guide plain text
└── src/
    ├── core/
    │   ├── config.sh            # Configurazione, first-run, wizard
    │   ├── log.sh               # Logging, livelli, colori ANSI
    │   └── utils.sh             # Crypto, compressione, dedup, listing
    ├── distro/
    │   └── detect.sh            # Rilevamento distro/DE, package manager,
    │                            # generazione reinstall script
    ├── backup/
    │   └── engine.sh            # Engine backup: dotfile, KDE, GNOME,
    │                            # retention, dedup, log/diff
    ├── restore/
    │   └── engine.sh            # Engine restore, DE mismatch detection,
    │                            # pre-restore backup
    ├── scheduler/
    │   └── scheduler.sh         # Systemd user timer + cron
    └── tui/
        └── tui.sh               # TUI bash nativa, 5 temi 256-color

Cosa viene backuppato

Espandi lista completa

Shell e terminale: .bashrc, .bash_profile, .zshrc, .zshenv, .profile, .inputrc, .oh-my-zsh, .config/fish, .config/spaceship

Editor: .vimrc, .vim/, .config/nvim/, .config/Code/User/ (VS Code settings, keybindings, snippets)

Git e VCS: .gitconfig, .gitignore_global

SSH e GPG: .ssh/ (escluso known_hosts), .gnupg/

Terminali: .config/alacritty/, .config/kitty/, .config/wezterm/

KDE / Plasma: konsolerc, ~/.local/share/konsole/ (profili), kdeglobals, kglobalshortcutsrc, kwinrc, plasma-org.kde.plasma.desktop-appletsrc, plasmashellrc, ~/.local/share/plasma/, ~/.local/share/color-schemes/, ~/.local/share/aurorae/, .config/spaceship/ (Spaceship prompt)

GNOME: dconf dump, ~/.local/share/gnome-shell/extensions/, .config/gtk-3.0/, .config/gtk-4.0/

Font e temi: ~/.local/share/fonts/, ~/.local/share/icons/, ~/.themes/, ~/.icons/

Misc: .config/mimeapps.list, .config/user-dirs.dirs, .local/bin/ (script utente)

Software (manifests): Lista pacchetti di sistema, Flatpak, Snap, pip (user), npm globals + reinstall script eseguibile


Limitazioni note

  • Nessun backup dati utente (Downloads, Documenti, media) — by design
  • Configurazione monitor esclusa dal ripristino (risoluzione, disposizione schermi)
  • KDE Activities non supportate
  • Flatpak: solo overrides, non i dati per-applicazione
  • Reinstall script: pacchetti rinominati o rimossi dai repo dal momento del backup falliranno silenziosamente (|| true)
  • npm/pip/snap: liste best-effort, non garantite complete
  • Wayland: input remapping fuori DE potrebbe non essere catturato

Variabili d'ambiente

Variabile Descrizione
DRACO_PASSWORD Password cifratura (nessun prompt se impostata)
DRACO_CONFIG Override percorso config file
DRACO_BACKUP_DIR Override directory backup (priorità massima)
DRACO_LOG_LEVEL 0=DEBUG 1=INFO 2=WARN 3=ERROR
DRACO_TUI_THEME Tema TUI: default blue anthropic eva01 matrix
DRACO_NO_COLOR 1 per disabilitare colori ANSI

Documentazione

File Contenuto
docs/draco.1 Man page (installa con cp draco.1 ~/.local/share/man/man1/)
docs/draco.1.txt Man page plain text
docs/draco-quickguide.pdf Quick guide con tabelle e workflow visuale
docs/draco-quickguide.txt Quick guide plain text per terminale
# Installa man page
mkdir -p ~/.local/share/man/man1
cp docs/draco.1 ~/.local/share/man/man1/
man draco

Licenza

DRACO è distribuito sotto licenza GNU General Public License v3.
Vedi LICENSE oppure gnu.org/licenses/gpl-3.0.


"La workstation perfetta non si costruisce due volte. Si ripristina."

About

Dotfile & Runtime Archive and Configuration Orchestrator

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages