summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-x.local/share/kio/servicemenus/zfs-vault.desktop16
-rwxr-xr-xscripts/zfs-open-documents.sh32
2 files changed, 48 insertions, 0 deletions
diff --git a/.local/share/kio/servicemenus/zfs-vault.desktop b/.local/share/kio/servicemenus/zfs-vault.desktop
new file mode 100755
index 0000000..d018af9
--- /dev/null
+++ b/.local/share/kio/servicemenus/zfs-vault.desktop
@@ -0,0 +1,16 @@
+[Desktop Entry]
+Type=Service
+X-KDE-ServiceTypes=KonqPopupMenu/Plugin
+MimeType=inode/directory;
+Actions=unlockZfs;lockZfs;
+X-KDE-Priority=TopLevel
+
+[Desktop Action unlockZfs]
+Name=Unlock ZFS Vault
+Icon=dialog-password
+Exec=bash -c 'PASS=$(zenity --password --title="Unlock ZFS Dataset"); if [ -n "$PASS" ]; then echo "$PASS" | sudo zfs load-key iron-wolf/media/documents && sudo zfs mount iron-wolf/media/documents || zenity --error --text="Failed to mount dataset."; fi'
+
+[Desktop Action lockZfs]
+Name=Lock & Unload ZFS Vault
+Icon=object-locked
+Exec=bash -c 'sudo zfs unmount iron-wolf/media/documents && sudo zfs unload-key iron-wolf/media/documents && zenity --info --text="Dataset locked successfully." || zenity --error --text="Failed to unmount. Is the directory in use?"'
diff --git a/scripts/zfs-open-documents.sh b/scripts/zfs-open-documents.sh
new file mode 100755
index 0000000..2188c59
--- /dev/null
+++ b/scripts/zfs-open-documents.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+DATASET="iron-wolf/media/documents"
+MOUNTPOINT=$(zfs get -H -o value mountpoint "$DATASET")
+
+if [ "$KEYSTATUS" = "available" ]; then
+ if ! mountpoint -q "$MOUNTPOINT"; then
+ sudo zfs mount "$DATASET" || { zenity --error --text="Failed to mount dataset."; exit 1; }
+ fi
+else
+ # Key is unavailable. Prompt for it.
+ PASS=$(zenity --password --title="Unlock ZFS Volume" --window-icon="lock")
+
+ # If user hits cancel or leaves it empty, exit quietly
+ if [ -z "$PASS" ]; then
+ exit 0
+ fi
+
+ # Try to load key and mount
+ if echo "$PASS" | sudo zfs load-key "$DATASET"; then
+ sudo zfs mount "$DATASET" || { zenity --error --text="Key loaded, but mount failed."; exit 1; }
+ else
+ zenity --error --text="Incorrect passphrase."
+ exit 1
+ fi
+fi
+
+if command -v kioclient &> /dev/null; then
+ kioclient exec "$MOUNTPOINT"
+else
+ xdg-open "$MOUNTPOINT"
+fi;