aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbin/mnt105
-rw-r--r--share/mnt/id-mappings/UTCLOUD1
2 files changed, 106 insertions, 0 deletions
diff --git a/bin/mnt b/bin/mnt
new file mode 100755
index 0000000..a666e48
--- /dev/null
+++ b/bin/mnt
@@ -0,0 +1,105 @@
+#!/bin/sh
+set -eu
+
+usage() {
+ cat <<-'EOF'
+ Usage:
+ mnt [-U UUID] ACTION NAME
+ mnt -h
+ EOF
+}
+
+help() {
+ cat <<-'EOF'
+
+
+ Options:
+ -U UUID the id of the device under /dev/disks/by-uuid/
+ -h, --help show this message
+
+ ACTION either "on" or "off"
+ NAME the name of the external device
+
+
+ Automate mounting and unmounting encrypted files.
+
+
+ Examples:
+
+ Mount UTCLOUD:
+
+ $ mnt up UTCLOUD
+ EOF
+}
+
+
+for flag in "$@"; do
+ case "$flag" in
+ --)
+ break
+ ;;
+ --help)
+ usage
+ help
+ exit
+ ;;
+ *)
+ ;;
+ esac
+done
+
+while getopts 'U:h' flag; do
+ case "$flag" in
+ U)
+ UUID="$OPTARG"
+ ;;
+ h)
+ usage
+ help
+ exit
+ ;;
+ *)
+ usage >&2
+ exit 2
+ ;;
+ esac
+done
+shift $((OPTIND - 1))
+
+ACTION="${1:-}"
+NAME="${2:-}"
+
+eval "$(assert-arg -- "$ACTION" 'ACTION')"
+eval "$(assert-arg -- "$NAME" 'NAME')"
+
+if [ -z "${UUID:-}" ]; then
+ F="${XDG_DATA_HOME:-$HOME/.local/share}/mnt/id-mappings/$NAME"
+ if [ ! -e "$F" ]; then
+ printf 'Missing -U UUID, or entry in "%s".\n' "$F"
+ usage >&2
+ exit 2
+ fi
+ UUID="$(cat "$F")"
+fi
+
+
+up() {
+ pass show disks/"$NAME" |
+ head -n1 |
+ tr -d '\n' |
+ udisksctl unlock -b /dev/disk/by-uuid/"$UUID" --key-file=/dev/stdin
+ udisksctl mount -b /dev/mapper/luks-"$UUID"
+}
+
+down() {
+ udisksctl unmount -b /dev/mapper/luks-"$UUID"
+ udisksctl lock -b /dev/disk/by-uuid/"$UUID"
+}
+
+case "$ACTION" in
+ up|down)
+ "$ACTION"
+ ;;
+ *)
+ printf 'Unsupported ACTION: "%s".\n' "$ACTION"
+esac
diff --git a/share/mnt/id-mappings/UTCLOUD b/share/mnt/id-mappings/UTCLOUD
new file mode 100644
index 0000000..e7ff31f
--- /dev/null
+++ b/share/mnt/id-mappings/UTCLOUD
@@ -0,0 +1 @@
+b8f3f96d-597d-4410-8eb7-d403d9eac285