#!/bin/bash set -euo pipefail BASEDIR="$(dirname "${0}" | sed "s|^\.|${PWD}|")" cat << EOF ####################################### ## ## ## $(cat "${BASEDIR}/title") Script ## ## ## ## Jean ## ## ## ####################################### ################# ## ## ## Configure ## ## ## ################# EOF printf \ 'ZOL_FEDORA_VER="2-6"\n' | \ tee \ "${BASEDIR}/system.conf" \ &> \ /dev/null printf \ '(NVMe) SSD or HDD?\n' select OPTION in 'SSD' 'HDD' do case "${OPTION}" in 'SSD'|'HDD') break ;; *) printf \ 'Invalid option\n' ;; esac done printf \ "DISK_TYPE=\"${OPTION}\"\n" | \ tee \ --append \ "${BASEDIR}/system.conf" \ &> \ /dev/null printf \ '\033[2J\033[H' printf \ '\nGet disk from:\n' select OPTION in '/dev/disk/by-id/' '/dev/' do case "${OPTION}" in '/dev/disk/by-id/'|'/dev/') break ;; *) printf \ 'Invalid option\n' ;; esac done printf \ '\033[2J\033[H' if [[ "${OPTION}" == '/dev/disk/by-id/' ]]; then DRIVES="$(ls -Ago /dev/disk/by-id/ | grep -v 'sr' | grep -v 'dm-' | grep -v 'nvme-eui.' | grep -v '\-part' | grep -v 'wwn-' | grep -v '_[1-9] -> ' | grep -v 'total' | sed 's|^.*\:[0-5][0-9] ||g; s| -> .*$||g' | tr -d '[:blank:]')" printf \ '\nSelect the disk you want to use:\n' DRIVES=( ${DRIVES} ) shopt -s extglob MENU="@(${DRIVES[0]}" for ((i=1;i<${#DRIVES[@]};i++)); do MENU+="|${DRIVES[$i]}" done MENU+=")" select DRIVE in "${DRIVES[@]}" do case ${DRIVE} in ${MENU}) break ;; *) printf \ 'Invalid option\n' ;; esac done printf \ "DISK=\"/dev/disk/by-id/${DRIVE}\"\n" | \ tee \ --append \ "${BASEDIR}/system.conf" \ &> \ /dev/null elif [[ "${OPTION}" == '/dev/' ]]; then DRIVES="$(lsblk -do name | grep -v 'loop' | grep -v 'sr' | grep -v 'zram' | grep -v 'NAME' | tr -d '[:blank:]')" printf \ '\nSelect the disk you want to use:\n' DRIVES=( ${DRIVES} ) shopt -s extglob MENU="@(${DRIVES[0]}" for ((i=1;i<${#DRIVES[@]};i++)); do MENU+="|${DRIVES[$i]}" done MENU+=")" select DRIVE in "${DRIVES[@]}" do case ${DRIVE} in ${MENU}) break ;; *) printf \ 'Invalid option\n' ;; esac done printf \ "DISK=\"/dev/${DRIVE}\"\n" | \ tee \ --append \ "${BASEDIR}/system.conf" \ &> \ /dev/null fi printf \ '\033[2J\033[H' HOSTNAME='-' while [[ "${HOSTNAME}" == '-' ]] || [[ -z "${HOSTNAME}" ]] || [[ "${HOSTNAME}" = *' '* ]] || [[ "${HOSTNAME}" = *_* ]]; do printf \ '\nEnter a hostname for this machine (no spaces or underscores):\n' read \ -r \ HOSTNAME if [[ "${HOSTNAME}" = *' '* ]] || [[ "${HOSTNAME}" = *_* ]]; then printf \ 'ERROR:\tNo spaces or underscores in the hostname!\n' fi done printf \ "HOSTNAME=\"${HOSTNAME}\"\n" | \ tee \ --append \ "${BASEDIR}/system.conf" \ &> \ /dev/null printf \ '\033[2J\033[H' USERNAME='-' while [[ "${USERNAME}" == '-' ]] || [[ -z "${USERNAME}" ]] || [[ "${USERNAME}" = *' '* ]] || [[ "${USERNAME}" = *[A-Z]* ]]; do printf \ '\nEnter a name for the new user account (lowercase, no spaces):\n' read \ -r \ USERNAME if [[ "${USERNAME}" = *' '* ]] || [[ "${USERNAME}" = *[A-Z]* ]]; then printf \ 'ERROR:\tNo spaces or uppercase letters in the username!\n' fi done printf \ "USERNAME=\"${USERNAME}\"\n" | \ tee \ --append \ "${BASEDIR}/system.conf" \ &> \ /dev/null printf \ '\033[2J\033[H' printf \ '\nEnable SWAP?\n' select OPTION in 'yes' 'no' do case "${OPTION}" in 'yes'|'no') break ;; *) printf \ 'Invalid option\n' ;; esac done printf \ "ENABLE_SWAP=\"${OPTION}\"\n" | \ tee \ --append \ "${BASEDIR}/system.conf" \ &> \ /dev/null printf \ '\033[2J\033[H' printf \ '\nEnable encryption?\n' select OPTION in 'yes' 'no' do case "${OPTION}" in 'yes'|'no') break ;; *) printf \ 'Invalid option\n' ;; esac done printf \ "ENCRYPTION=\"${OPTION}\"\n" | \ tee \ --append \ "${BASEDIR}/system.conf" \ &> \ /dev/null printf \ '\033[2J\033[H' cat << EOF Configuration stored in '${BASEDIR}/system.conf' Press any key to return to the main menu EOF read \ -srn \ 1