Última atividade 2 months ago

Bash functions to have at initialization of shell session

Revisão ba224a8dcdfefd439b446468697de0b96ea59949

gcfs.sh Bruto
1#!/bin/bash
2set -euo pipefail
3
4source .env
5GOCRYPTFS_PASSFILE=${GOCRYPTFS_ROOT_DIR:-~/.keys/gocrypts}/gocryptfs.key
6GOCRYPTFS_OUTPUT_MOUNT=${GOCRYPTFS_MOUNT_ROOT:-~/.mnt}
7
8gcfs-mount () {
9 if [ "$1" == "data" ]; then
10 GOCRYPTFS_CONFIG="${GOCRYPTFS_ROOT_DIR}/data-cipher/gocryptfs.conf"
11
12 if [ -v "$2" ]; then
13 GOCRYPTFS_VAULT="${HOME}/.${2}"
14
15
16 if ! [ -f "${HOME}/.mnt/${2}" ]; then
17 mkdir -p "${HOME}/.mnt/${2}"
18 GOCRYPTFS_VOLUME="${GOCRYPTFS_OUTPUT_MOUNT}/${2}"
19 fi
20 else
21 GOCRYPTFS_VAULT=~/.data
22
23 if ! [ -f ~/.mnt/data ]; then
24 mkdir -p ~/.mnt/data
25 GOCRYPTFS_VOLUME="${GOCRYPTFS_OUTPUT_MOUNT}/data"
26 fi
27 fi
28 fi
29
30 if [ "$1" == "classified" ]; then
31 GOCRYPTFS_CONFIG="${GOCRYPTFS_ROOT_DIR}/secret-cipher/gocryptfs.conf"
32
33 if [ -v "$2" ]; then
34 GOCRYPTFS_VAULT_ARG="${HOME}/Documents/.${2}"
35
36 if ! [ -f "${HOME}/.mnt/${2}" ]; then
37 mkdir -p "${HOME}/.mnt/${2}"
38 GOCRYPTFS_VOLUME="${GOCRYPTFS_OUTPUT_MOUNT}/${2}"
39 fi
40 else
41 GOCRYPTFS_VAULT_ARG=~/Documents/.secret
42
43 if ! [ -f ~/.mnt/classified ]; then
44 mkdir -p ~/.mnt/classified
45 GOCRYPTFS_VOLUME="${GOCRYPTFS_OUTPUT_MOUNT}/classified"
46 fi
47 fi
48 fi
49
50 if [ "$1" == "works-in-progress" ]; then
51 GOCRYPTFS_CONFIG="${GOCRYPTFS_ROOT_DIR}/wip-cipher/gocryptfs.conf"
52
53 if [ -v "$2" ]; then
54 GOCRYPTFS_VAULT="${HOME}/Portfolio/.${2}"
55
56 if ! [ -f "${HOME}/.mnt/${2}" ]; then
57 mkdir -p "${HOME}/.mnt/${2}"
58 GOCRYPTFS_VOLUME="${GOCRYPTFS_OUTPUT_MOUNT}/${2}"
59 fi
60 else
61 GOCRYPTFS_VAULT=~/Portfolio/.wip
62
63 if ! [ -f ~/.mnt/works-in-progress ]; then
64 mkdir -p ~/.mnt/works-in-progress
65 GOCRYPTFS_VOLUME="${GOCRYPTFS_OUTPUT_MOUNT}/works-in-progress"
66 fi
67 fi
68 fi
69
70 gocryptfs -config "$GOCRYPTFS_CONFIG" -passfile "$GOCRYPTFS_PASSFILE" "$GOCRYPTFS_VAULT" "$GOCRYPTFS_VOLUME"
71}
72
73gcfs-umount () {
74 if [ -v "$1" ]; then
75 GOCRYPTFS_PLAIN="${GOCRYPTFS_OUTPUT_MOUNT}/${1}"
76 else
77 exit 1
78 fi
79
80 fusermount -u "$GOCRYPTFS_PLAIN"
81}
82
83# @NOTE below assumes a specific ZFS data set and pool structure
84znap () {
85 DATE_OF_ZFS_SNAPSHOT=$(date '+%Y%m%d%H%M%S')
86
87 if [ -z "$1" ]; then
88 exit 1
89 elif [ "$1" == "essential" ]; then
90 sudo zfs snapshot "zroot${HOME}@${DATE_OF_ZFS_SNAPSHOT}"
91 sudo zfs snapshot "zroot${HOME}/.config@${DATE_OF_ZFS_SNAPSHOT}"
92 sudo zfs snapshot "zroot${HOME}/.var/app@${DATE_OF_ZFS_SNAPSHOT}"
93 sudo zfs snapshot "zroot${HOME}/.local/share/flatpak@${DATE_OF_ZFS_SNAPSHOT}"
94 sudo zfs snapshot "zroot/var/lib/nfs@${DATE_OF_ZFS_SNAPSHOT}"
95 sudo zfs snapshot "zroot/var/lib/NetworkManager@${DATE_OF_ZFS_SNAPSHOT}"
96 sudo zfs snapshot "zroot/keystore@${DATE_OF_ZFS_SNAPSHOT}"
97 sudo zfs snapshot "zroot/srv@${DATE_OF_ZFS_SNAPSHOT}"
98 sudo zfs snapshot "zroot/var/games@${DATE_OF_ZFS_SNAPSHOT}"
99 sudo zfs snapshot "zroot/var/mail@${DATE_OF_ZFS_SNAPSHOT}"
100 sudo zfs snapshot "zroot/var/www@${DATE_OF_ZFS_SNAPSHOT}"
101 sudo zfs snapshot "zroot/usr/local@${DATE_OF_ZFS_SNAPSHOT}"
102 sudo zfs snapshot "zroot/var/lib/AccountsService@${DATE_OF_ZFS_SNAPSHOT}"
103 sudo zfs snapshot -r "medialib@${DATE_OF_ZFS_SNAPSHOT}"
104 zfs list -t snapshot
105 # @NOTE: reccommended w option for zfs send
106 else
107 sudo zfs snapshot "${1}@${DATE_OF_ZFS_SNAPSHOT}"
108 zfs list -t snapshot | grep "$1"
109 fi
110}
111zclean-aptsnaps () {
112 zfs list -t snapshot | grep 'apt-' | sed 's| .*$||g' | head -n -5 | xargs -d '\n' -I {} sudo zfs destroy {}
113}
114
115# @NOTE below only useful if managing ZFS file systems
116zeject-pool () {
117 if [ -z "$1" ]; then
118 exit 1
119 fi
120
121 zpool export "$1"
122}