#!/bin/bash set -euo pipefail source ~/bin/script_framework.sh # Check for existence of required tools which gocryptfs >/dev/null || fail "No gocryptfs binary found in \$PATH (yay -S cryptfs / brew install cryptfs)" which vault >/dev/null || fail "No vault binary found in \$PATH" # Check for Dropbox folder [ -d "${HOME}/Dropbox/CryptFS" ] || fail "~/Dropbox/CryptFS was not found, is Dropbox sync available?" [ -f "${HOME}/Dropbox/CryptFS/gocryptfs.conf" ] || fail "gocryptfs.conf file was not found in CryptFS directory, unsynced?" case ${1:--m} in "-m") step "Mounting ~/CryptFS" mount | grep -q "${HOME}/CryptFS" && { warn "~/CryptFS is already mounted" exit 0 } || true mkdir -p "${HOME}/CryptFS" vault read -field=passphrase secret/private/gocryptfs | gocryptfs -q -- "${HOME}/Dropbox/CryptFS" "${HOME}/CryptFS" ;; "-u") step "Unmounting ~/CryptFS" mount | grep -q "${HOME}/CryptFS" || { warn "~/CryptFS is not mounted" exit 0 } case $(uname -s) in "Linux") fusermount -u "${HOME}/CryptFS" ;; "Darwin") umount "${HOME}/CryptFS" ;; esac success "~/CryptFS unmounted" ;; esac