aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2023-04-18 15:03:57 -0300
committerEuAndreh <eu@euandre.org>2023-04-18 15:03:57 -0300
commitf8b76aa678663b3bb9a6908e3ac6dd9ae8ef73dc (patch)
tree1a52e4ed4f97cbf2438f8e5d3a1af788b1c67f37 /bin
parentetc/guix/home.scm: Add "qpdf" package (diff)
downloaddotfiles-f8b76aa678663b3bb9a6908e3ac6dd9ae8ef73dc.tar.gz
dotfiles-f8b76aa678663b3bb9a6908e3ac6dd9ae8ef73dc.tar.xz
bin/mnt: Add new utility
Diffstat (limited to 'bin')
-rwxr-xr-xbin/mnt105
1 files changed, 105 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