···251251Services are automatically backed up nightly using restic to Backblaze B2. The `atelier-backup` CLI provides an interactive TUI for managing backups:
252252253253```bash
254254-atelier-backup # Interactive menu
255255-atelier-backup status # Show backup status
256256-atelier-backup restore # Restore wizard
257257-atelier-backup dr # Disaster recovery
254254+sudo atelier-backup # Interactive menu
255255+sudo atelier-backup status # Show backup status
256256+sudo atelier-backup restore # Restore wizard
257257+sudo atelier-backup dr # Disaster recovery
258258```
259259260260See [modules/nixos/services/restic/README.md](modules/nixos/services/restic/README.md) for setup and usage.
···101101The `atelier-backup` command provides an interactive TUI:
102102103103```bash
104104-atelier-backup # Interactive menu
105105-atelier-backup status # Show backup status for all services
106106-atelier-backup list # Browse snapshots
107107-atelier-backup backup # Trigger manual backup
108108-atelier-backup restore # Interactive restore wizard
109109-atelier-backup dr # Disaster recovery mode
104104+sudo atelier-backup # Interactive menu
105105+sudo atelier-backup status # Show backup status for all services
106106+sudo atelier-backup list # Browse snapshots
107107+sudo atelier-backup backup # Trigger manual backup
108108+sudo atelier-backup restore # Interactive restore wizard
109109+sudo atelier-backup dr # Disaster recovery mode
110110```
111111112112See `man atelier-backup` for full documentation.
+12-12
modules/nixos/services/restic/atelier-backup.1.md
···8899# SYNOPSIS
10101111-**atelier-backup** [*COMMAND*]
1111+**sudo atelier-backup** [*COMMAND*]
12121313-**atelier-backup** **status**
1313+**sudo atelier-backup** **status**
14141515-**atelier-backup** **list**
1515+**sudo atelier-backup** **list**
16161717-**atelier-backup** **backup**
1717+**sudo atelier-backup** **backup**
18181919-**atelier-backup** **restore**
1919+**sudo atelier-backup** **restore**
20202121-**atelier-backup** **dr**
2121+**sudo atelier-backup** **dr**
22222323# DESCRIPTION
2424···73737474Interactive menu:
7575```
7676-$ atelier-backup
7676+$ sudo atelier-backup
7777```
78787979Check backup status for all services:
8080```
8181-$ atelier-backup status
8181+$ sudo atelier-backup status
8282```
83838484Browse snapshots for a service:
8585```
8686-$ atelier-backup list
8686+$ sudo atelier-backup list
8787```
88888989Trigger manual backup:
9090```
9191-$ atelier-backup backup
9191+$ sudo atelier-backup backup
9292```
93939494Restore a service from backup:
9595```
9696-$ atelier-backup restore
9696+$ sudo atelier-backup restore
9797```
98989999Full disaster recovery:
100100```
101101-$ atelier-backup dr
101101+$ sudo atelier-backup dr
102102```
103103104104# FILES
+12-2
modules/nixos/services/restic/cli.nix
···5757 input() { ${pkgs.gum}/bin/gum input "$@"; }
5858 spin() { ${pkgs.gum}/bin/gum spin "$@"; }
59596060+ # Check for root
6161+ if [ "$(id -u)" -ne 0 ]; then
6262+ style --foreground 196 "Error: atelier-backup must be run as root"
6363+ echo "Try: sudo atelier-backup $*"
6464+ exit 1
6565+ fi
6666+6067 # Restic wrapper with secrets
6168 restic_cmd() {
6269 ${pkgs.restic}/bin/restic \
···6572 "$@"
6673 }
6774 export -f restic_cmd
6868- export B2_ACCOUNT_ID=$(cat ${config.age.secrets."restic/env".path} | grep B2_ACCOUNT_ID | cut -d= -f2)
6969- export B2_ACCOUNT_KEY=$(cat ${config.age.secrets."restic/env".path} | grep B2_ACCOUNT_KEY | cut -d= -f2)
7575+7676+ # Load B2 credentials from environment file
7777+ set -a
7878+ source ${config.age.secrets."restic/env".path}
7979+ set +a
70807181 # Available services
7282 SERVICES="${lib.concatStringsSep " " allBackupServices}"