Loop through option lists for changing defaults and adding arguments for newly created functions

This commit is contained in:
Alex Tavarez
2025-09-15 14:24:53 -04:00
parent c6780025f6
commit 8266185bbd

View File

@@ -2,109 +2,93 @@
set -euo pipefail set -euo pipefail
# @TODO: Implement more soft-coding and interactivity to this script # @TODO: Implement more soft-coding and interactivity to this script
ZFS_KEY_LOC="file:///etc/zfs/keys/zroot.key" ZFS_POOL_NAME="media"
ZFS_COMPAT="openzfs-2.1-linux" ZFS_COMPAT="openzfs-2.1-linux"
ZFS_KEY_LOC="file:///etc/zfs/keys/zroot.key"
ZFS_KEY_FORMAT="passphrase" ZFS_KEY_FORMAT="passphrase"
ZFS_COMPRESSION="zstd-3" ZFS_COMPRESSION="zstd-3"
if [ -z "$1" ]; then create_zpool () {
exit 1
fi
if [ -z "$3" ] && [ "$1" == "init" ]; then
ZFS_POOL_NAME="media"
else
if [ "$1" == "init" ]; then
ZFS_POOL_NAME="$3"
fi
fi
if [ -z "$2" ] && [ "$1" == "init" ]; then
exit 1
else
if [ "$1" == "init" ]; then
ZFS_TARGET_DRIVE="$2" # @NOTE typically, device name will be disk by-id and end with "-part1" given how it is to be used with other scripts
fi
fi
if [ "$1" == "init" ]; then
sudo zpool create \ sudo zpool create \
-o ashift=12 \ -o ashift=12 \
-o autotrim=on \ -o autotrim=on \
-o compatibility="$ZFS_COMPAT" \ -o compatibility="$3" \
-O encryption=on \ -O encryption=on \
-O keylocation="$ZFS_KEY_LOC" \ -O keylocation="$4" \
-O keyformat="$ZFS_KEY_FORMAT" \ -O keyformat="$5" \
-O acltype=posixacl \ -O acltype=posixacl \
-O xattr=sa \ -O xattr=sa \
-O dnodesize=auto \ -O dnodesize=auto \
-O compression="$ZFS_COMPRESSION" \ -O compression="$6" \
-O normalization=formD \ -O normalization=formD \
-O relatime=on \ -O relatime=on \
-O canmount=off \ -O canmount=off \
-O mountpoint=none \ -O mountpoint=none \
"$ZFS_POOL_NAME" \ "$2" \
/dev/disk/by-id/"${ZFS_TARGET_DRIVE}" /dev/disk/by-id/"${1}"
elif [ "$1" == "ext" ]; then }
if [ -z "$2" ]; then
exit 1
else
ZFS_POOL_NAME="$2"
fi
ZFS_DATASET_OPTS="$3" create_datasets () {
DATASET=("${HOME}/Documents/.calibre" "${1}/LITERATURE")
shift 3
# @NOTE from this point on, @ must be list of arrays each containing two strings
for i in "$@"; do
mkdir -p "${i[0]}"
sudo zfs create "${ZFS_DATASET_OPTS}" -o mountpoint="${HOME}${i[0]}" "${ZFS_POOL_NAME}/${i[1]}"
done
fi
if [ -z "$4" ] && [ "$1" == "init" ]; then
DATASET=("${HOME}/Documents/.calibre" "${ZFS_POOL_NAME}/LITERATURE")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/Videos" "${ZFS_POOL_NAME}/FILM") DATASET=("${HOME}/Videos" "${1}/FILM")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${ZFS_POOL_NAME}/STEAMGAMES") DATASET=("${HOME}/.var/app/com.valvesoftware.Steam" "${1}/STEAMGAMES")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${ZFS_POOL_NAME}/RARCHGAMES") DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/Games" "${ZFS_POOL_NAME}/GAMES") DATASET=("${HOME}/Games" "${1}/GAMES")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
ln -s "${HOME}/.var/app/com.valvesoftware.Steam" "${DATASET[0]}/Steam" ln -s "${HOME}/.var/app/com.valvesoftware.Steam" "${DATASET[0]}/Steam"
ln -s "${HOME}/.var/app/org.libretro.RetroArch" "${DATASET[0]}/libRetro" ln -s "${HOME}/.var/app/org.libretro.RetroArch" "${DATASET[0]}/libRetro"
DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${ZFS_POOL_NAME}/RARCHGAMES") DATASET=("${HOME}/.var/app/org.libretro.RetroArch" "${1}/RARCHGAMES")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}" sudo zfs create -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
DATASET=("${HOME}/.XXX" "${ZFS_POOL_NAME}/XXX") DATASET=("${HOME}/.XXX" "${1}/XXX")
mkdir -p "${DATASET[0]}" mkdir -p "${DATASET[0]}"
sudo zfs create -o keylocation=prompt -o keyformat=passphrase -o mountpoint="${DATASET[0]}" "${DATASET[1]}" sudo zfs create -o keylocation=prompt -o keyformat=passphrase -o mountpoint="${DATASET[0]}" "${DATASET[1]}"
else }
if [ "$1" == "init" ]; then
ZFS_DATASET_OPTS="$4"
shift 4 print_menu () {
echo "Placeholder content"
}
# @NOTE from this point on, @ must be list of arrays each containing two strings while getopts "h" flag; do
for i in "$@"; do case "$flag" in
mkdir -p "${i[0]}" h) print_menu;;
sudo zfs create "${ZFS_DATASET_OPTS}" -o mountpoint="${HOME}${i[0]}" "${ZFS_POOL_NAME}/${i[1]}" *) exit 1;;
esac
done done
else
exit 0 if ! [ -z "$1" ] && [ "$1" == "init" ]; then
while getopts "d:p:k:f:c:v:" opt; do
case $opt in
k) ZFS_KEY_LOC="${OPTARG}";;
f) ZFS_KEY_FORMAT="${OPTARG}";;
c) ZFS_COMPRESSION="${OPTARG}";;
v) ZFS_COMPAT="${OPTARG}";;
p) ZFS_POOL_NAME="${OPTARG}";;
d) ZFS_TARGET_DRIVE="${OPTARG}";;
*) exit 1;
esac
done
if [ -z "$ZFS_TARGET_DRIVE" ]; then
echo "It is necessary to argue a -d option."
exit 1
fi fi
create_zpool "$ZFS_TARGET_DRIVE" "$ZFS_POOL_NAME" "$ZFS_COMPAT" "$ZFS_KEY_LOC" "$ZFS_KEY_FORMAT" "$ZFS_COMPRESSION"
create_datasets "$ZFS_POOL_NAME"
fi fi