#!/usr/bin/env bash set -e # Exit on error set +u # Allow unset variables set -o pipefail # Enable pipefail script_name=$(basename "${0}") nc="\e[0m" # Unset styles bld="\e[1m" # Bold text dim="\e[2m" # Dim text red="\e[31m" # Red foreground green="\e[32m" # Green foreground yellow="\e[33m" # Yellow foreground blue="\e[34m" # Blue foreground to_stderr() { >&2 echo -e "${*}" } to_stdout() { echo -e "${*}" } error() { to_stderr " ${red}×${nc} ${*}" } warn() { to_stderr " ${yellow}⚠${nc} ${*}" } info() { to_stdout " ${blue}i${nc} ${*}" } debug() { if [ -n "${debug}" ]; then to_stderr " ${dim}▶ ${*}${nc}" fi } success() { to_stdout " ${green}✓${nc} ${*}" } trace() { to_stderr "Stacktrace:" local i=1 line file func while read -r line func file < <(caller ${i}); do to_stderr "[${i}] ${file}:${line} ${func}(): $(sed -n "${line}p" "${file}")" ((i++)) done } # shellcheck disable=SC2120 die() { if [ "${#}" -gt 0 ]; then error "${*}" fi exit 1 } needs_arg() { if [ -z "${OPTARG}" ]; then to_stderr "${0}: option requires an argument -- ${OPT}" usage die fi } usage() { to_stdout to_stdout "NixOS installation helper script." to_stdout to_stdout "${bld}Usage:${nc}" to_stdout " ${dim}\$${nc} ${script_name}" to_stdout to_stdout "${bld}Options:${nc}" cat <&2 echo "${0}: illegal option -- $OPT" usage die ;; ? ) # bad short option (error reported via getopts) usage die ;; esac done debug "Start of main" info "This is a template." if [ -n "${OPTION}" ]; then debug "Option is not empty" debug "Option is set to: ${OPTION}" fi } main "${@}"