#!/usr/bin/env bash # CONSTANTS BASEDIR=$(dirname "$0") DEFAULT_CONFIG="$BASEDIR/../config/default.conf" ARG1="${1:-}" # FUNCTIONS function usage { echo "$(basename "$0") [--edit | --config]" } function parse_options { COMMAND=show while [[ $# -gt 0 ]]; do case "$1" in --edit) COMMAND=edit ;; --config) COMMAND=config ;; --help | -h) usage && exit 0 ;; *) echo >&2 "Unknown option: $1" && usage && exit 2 ;; esac shift 1 # Move to the next argument done } function show_defaults { [[ ! -f $DEFAULT_CONFIG ]] && echo >&2 "config file missing: $DEFAUL_CONFIG" && exit 3 source "$DEFAULT_CONFIG" echo "STORAGE_DISK=$STORAGE_DISK" echo "STORAGE_SIZE=$STORAGE_SIZE" echo "BRIDGE=$BRIDGE" echo "MEMORY=$MEMORY" echo "SWAP=$SWAP" echo "CPU=$CPU" } function compute_cpu_cores { nproc=$(nproc) [[ $nproc -ge 16 ]] && cores=4 [[ $nproc -ge 8 ]] && cores=2 [[ $nproc -lt 8 ]] && cores=1 echo $cores } function choose_from_selection { local name=$1[@] local selection=("${!name}") local length=${#selection[@]} [[ $length == 0 ]] && echo >&2 'no values from selection!' && exit 7 [[ $length == 1 ]] && chosen=${selection[0]} && return echo "$2:" echo ----------------- PS3="Choose number: " select chosen in "${selection[@]}"; do [[ -n $chosen ]] && break done < /dev/tty } function choose_default { echo 'initializing default values...' storage_size='20G' memory='2G' swap='2G' cpu=$(compute_cpu_cores) mapfile -t storages <<< $(pct-info list-zfs-pools) choose_from_selection storages "TYPE=ZFSPOOL STORAGE LIST" storage_disk=$chosen mapfile -t bridges <<< $(pct-info list-bridges) choose_from_selection bridges "BRIDGE LIST" bridge=$chosen cat >$DEFAULT_CONFIG <