diff options
| author | Kyren223 <contact@kyren.codes> | 2026-06-07 17:24:00 +0300 |
|---|---|---|
| committer | Kyren223 <contact@kyren.codes> | 2026-06-07 17:24:00 +0300 |
| commit | 72fd922f0a4b94151492b5138cd7e1bf808b1086 (patch) | |
| tree | a3255976d9c6349ae2ef42544ab4741ae8f7d191 | |
| parent | 71a640d4d320ef6b4a72bf1e50fca3d7ed76c28f (diff) | |
add context menus to dolphin for unlocking/locking encrypted ZFS datasets
| -rwxr-xr-x | .local/share/kio/servicemenus/zfs-vault.desktop | 16 | ||||
| -rwxr-xr-x | scripts/zfs-open-documents.sh | 32 |
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; |
