Round 363: Velero ext, Restic ext, Borgbackup ext, Duplicity ext, Rclone ext (20 commands)

ober

94e74c7455318ff4d4d31d4b65e9a1b6e696b7a2

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 2103ed7..f154ccc 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 363 — Velero ext, Restic ext, Borgbackup ext, Duplicity ext, Rclone ext
+
+| Feature | Status | Notes |
+|---|---|---|
+| velero-backup | :orange_circle: | Velero: create backup |
+| velero-restore | :orange_circle: | Velero: restore from backup |
+| velero-schedule | :orange_circle: | Velero: list schedules |
+| velero-get | :orange_circle: | Velero: list backups |
+| restic-backup | :orange_circle: | Restic: backup path |
+| restic-restore | :orange_circle: | Restic: restore snapshot |
+| restic-snapshots | :orange_circle: | Restic: list snapshots |
+| restic-check | :orange_circle: | Restic: check integrity |
+| borg-create | :orange_circle: | Borg: create archive |
+| borg-list | :orange_circle: | Borg: list archives |
+| borg-extract | :orange_circle: | Borg: extract archive |
+| borg-prune | :orange_circle: | Borg: prune archives |
+| duplicity-backup | :orange_circle: | Duplicity: backup |
+| duplicity-restore | :orange_circle: | Duplicity: restore |
+| duplicity-verify | :orange_circle: | Duplicity: verify backup |
+| duplicity-status | :orange_circle: | Duplicity: collection status |
+| rclone-copy | :orange_circle: | Rclone: copy files |
+| rclone-sync | :orange_circle: | Rclone: sync files |
+| rclone-ls | :orange_circle: | Rclone: list remote |
+| rclone-config | :orange_circle: | Rclone: show configuration |
+
 ### Round 362 — Telepresence ext, Kubevela ext, Knative ext, Dapr ext, KEDA ext
 
 | Feature | Status | Notes |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index f645c30..b45e4da 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -26135,3 +26135,57 @@
 (def (cmd-keda-version app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "KEDA: showing version")))
+
+;;; Round 363 — Borgbackup ext, Duplicity ext, Rclone ext (batch 2)
+
+(def (cmd-borg-extract app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Borg extract archive: "
+      (lambda (archive)
+        (echo-message! echo (str "Borg: extracting " archive))))))
+
+(def (cmd-borg-prune app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Borg: pruning old archives")))
+
+(def (cmd-duplicity-backup app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Duplicity backup source: "
+      (lambda (src)
+        (echo-message! echo (str "Duplicity: backing up " src))))))
+
+(def (cmd-duplicity-restore app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Duplicity restore to: "
+      (lambda (dest)
+        (echo-message! echo (str "Duplicity: restoring to " dest))))))
+
+(def (cmd-duplicity-verify app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Duplicity: verifying backup")))
+
+(def (cmd-duplicity-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Duplicity: showing collection status")))
+
+(def (cmd-rclone-copy app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rclone copy source: "
+      (lambda (src)
+        (echo-message! echo (str "Rclone: copying from " src))))))
+
+(def (cmd-rclone-sync app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rclone sync source: "
+      (lambda (src)
+        (echo-message! echo (str "Rclone: syncing from " src))))))
+
+(def (cmd-rclone-ls app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Rclone ls remote: "
+      (lambda (remote)
+        (echo-message! echo (str "Rclone: listing " remote))))))
+
+(def (cmd-rclone-config app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Rclone: showing configuration")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index 6935bb1..e4b58ce 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -26890,3 +26890,55 @@
 (def (cmd-knative-revision app)
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Knative: listing revisions")))
+
+;;; Round 363 — Velero ext, Restic ext, Borgbackup ext, Duplicity ext, Rclone ext (batch 1)
+
+(def (cmd-velero-backup app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Velero backup name: "
+      (lambda (name)
+        (echo-message! echo (str "Velero: creating backup " name))))))
+
+(def (cmd-velero-restore app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Velero restore from backup: "
+      (lambda (name)
+        (echo-message! echo (str "Velero: restoring from " name))))))
+
+(def (cmd-velero-schedule app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Velero: listing backup schedules")))
+
+(def (cmd-velero-get app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Velero: listing backups")))
+
+(def (cmd-restic-backup app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Restic backup path: "
+      (lambda (path)
+        (echo-message! echo (str "Restic: backing up " path))))))
+
+(def (cmd-restic-restore app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Restic restore snapshot: "
+      (lambda (snap)
+        (echo-message! echo (str "Restic: restoring snapshot " snap))))))
+
+(def (cmd-restic-snapshots app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Restic: listing snapshots")))
+
+(def (cmd-restic-check app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Restic: checking repository integrity")))
+
+(def (cmd-borg-create app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Borg archive name: "
+      (lambda (name)
+        (echo-message! echo (str "Borg: creating archive " name))))))
+
+(def (cmd-borg-list app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Borg: listing archives")))
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 964b407..c169226 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -9068,4 +9068,26 @@
   (register-command! 'keda-status cmd-keda-status)
   (register-command! 'keda-triggers cmd-keda-triggers)
   (register-command! 'keda-version cmd-keda-version)
+
+  ;; Round 363 — Velero ext, Restic ext, Borgbackup ext, Duplicity ext, Rclone ext
+  (register-command! 'velero-backup cmd-velero-backup)
+  (register-command! 'velero-restore cmd-velero-restore)
+  (register-command! 'velero-schedule cmd-velero-schedule)
+  (register-command! 'velero-get cmd-velero-get)
+  (register-command! 'restic-backup cmd-restic-backup)
+  (register-command! 'restic-restore cmd-restic-restore)
+  (register-command! 'restic-snapshots cmd-restic-snapshots)
+  (register-command! 'restic-check cmd-restic-check)
+  (register-command! 'borg-create cmd-borg-create)
+  (register-command! 'borg-list cmd-borg-list)
+  (register-command! 'borg-extract cmd-borg-extract)
+  (register-command! 'borg-prune cmd-borg-prune)
+  (register-command! 'duplicity-backup cmd-duplicity-backup)
+  (register-command! 'duplicity-restore cmd-duplicity-restore)
+  (register-command! 'duplicity-verify cmd-duplicity-verify)
+  (register-command! 'duplicity-status cmd-duplicity-status)
+  (register-command! 'rclone-copy cmd-rclone-copy)
+  (register-command! 'rclone-sync cmd-rclone-sync)
+  (register-command! 'rclone-ls cmd-rclone-ls)
+  (register-command! 'rclone-config cmd-rclone-config)
 )