diff --git a/Makefile b/Makefile index d174a15..dd38320 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ preparations: prosperity: @echo "This will install prestashop eventually" -free: +emancipation: @echo "This will install freespace, once it exists" flask: diff --git a/ingredients/lead b/ingredients/lead index 0089ad4..2afd74c 100644 --- a/ingredients/lead +++ b/ingredients/lead @@ -59,11 +59,25 @@ RESET="\e[0m" # We only want these to activate if we're running a recipe, so we # check to see if we're running a "shell inside of a shell" -if [[ $SHLVL -gt 1 ]]; then +if [ $SHLVL -gt 1 ]; then # Make sure that ctrl+C consistently exits the script trap "exit" INT - # Give informative error messages when we receive ERR - trap 'say "${RED}Oops...${RESET} Something went wrong on line $LINENO of this script. Exit code was $?" >&2' ERR + + # Give informative error messages when we receive unguarded EXIT codes + set -e + + handle_exit() { + case $? in + 0) + exit + ;; + *) + printf "${RED}Oops...${RESET} Something went wrong on line ${LINENO} of this script. Exit code was $?\n" + ;; + esac + } + + trap handle_exit EXIT fi # --------------- Functions --------------- @@ -119,16 +133,23 @@ source_env # Checks to see if we can use a command or not check_for() { - command -v "$1" >/dev/null + command -v "$1" > /dev/null } -if [ "$EUID" -eq 0 ]; then - echo -e "${RED}Woah there!${RESET} Seems you're running this script as a superuser." - echo "" - echo "That might cause some issues with permissions and whatnot. Run this script as your default user (without sudo) and I'll ask you when I need superuser permissions" - echo "" + +if [ "$(id -u)" -eq 0 ]; then + say "${RED}Woah there!${RESET} Seems you're running this script as a superuser." + say "" + say "That might cause some issues with permissions and whatnot. Run this script as your default user (without sudo) and I'll ask you when I need superuser permissions" + say "" exit 1 fi +# I like using source as a keyword! +if ! check_for source; then + source() { + . ${1} + } +fi # This one installs utilities to your OS (If you need them!) install_if_needed() { @@ -137,11 +158,11 @@ install_if_needed() { case $DISTRO in "debian") # TODO Better installation detection than check_for - if [ -z $(check_for $package) ]; then + if dpkg -l | grep -q "$package"; then + say "$package already installed!" + else say "installing $package" sudo apt install -y $package - else - say "$package already installed!" fi ;; "arch") @@ -195,7 +216,7 @@ forget() { } remember() { - # Optionally choose to output somewhere other than Alchemy/ + # Optionally choose to output somewhere other than Alchemy if [ "${2}" = "to" ]; then ENV_LOCATION=${3} else @@ -205,20 +226,21 @@ remember() { KEY=$(say ${1} | cut -d'=' -f 1) VALUE=$(say ${1} | cut -d'=' -f 2) - if [[ ! $KEY =~ ^[A-Z_]+$ ]]; then + if say ${KEY} | grep -Eqv "^[A-Z_]+$"; then say "Keys must consist only of capital letters and underscores" + return 1 fi VALID_CHARS='A-Za-z0-9/_.:=-' - if [[ ! $VALUE =~ ^[$VALID_CHARS]+$ ]]; then + if say ${VALUE} | grep -Eqv "^[${VALID_CHARS}]+$"; then say "illegal VALUE: $VALUE" say "for key $KEY" say "Valid characters for env values: letters, numbers, \".\",\"/\",\"_\"",\":\", \"-\" fi # If we're setting a valid key/value pair - if [[ ${1} =~ ^[A-Z_]+\=[$VALID_CHARS]+$ ]]; then + if say ${1} | grep -Eq "^[A-Z_]+\=[$VALID_CHARS]+$"; then DOTENV_ENTRY=$(cat $ENV_LOCATION | grep "^${KEY}" ) # If something already exists and we're trying to set it to something new diff --git a/recipes/alchemy.sh b/recipes/alchemy.sh index 88cd6ce..592c040 100755 --- a/recipes/alchemy.sh +++ b/recipes/alchemy.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env sh +#!/bin/sh # This is the initialization script for Alchemy. # We can't rely on all systems being able to use 'make' etc. by default. @@ -6,76 +6,81 @@ # Bare Metal Alchemist, 2022 # Just to let the system know what we're doing... -ALCHEMY="initializing" +ALCHEMY=$(pwd) # 'sourcing' a script is essentially running it to set up your system, # making sure that some basic values / variables are defined -source ingredients/lead +. ingredients/lead clear -echo -e "${BLUE}" -echo -e " d8888 888 888 " -echo -e " d88888 888 888 " -echo -e " d88P888 888 888 " -echo -e " d88P 888 888 .d8888b 88888b. .d88b. 88888b.d88b. 888 888" -echo -e " d88P 888 888 d88P' 888 '88b d8P Y8b 888 '888 '88b 888 888" -echo -e " d88P 888 888 888 888 888 88888888 888 888 888 888 888" -echo -e " d8888888888 888 Y88b. 888 888 Y8b. 888 888 888 Y88b 888" -echo -e "d88P 888 888 'Y8888P 888 888 'Y8888 888 888 888 'Y88888" -echo -e " 888" -echo -e " ${BOLD}Initialization Script -- BMA${BLUE} Y8b d88P" -echo -e "${RESET}" +say "${BLUE}" +say " d8888 888 888 " +say " d88888 888 888 " +say " d88P888 888 888 " +say " d88P 888 888 .d8888b 88888b. .d88b. 88888b.d88b. 888 888" +say " d88P 888 888 d88P' 888 '88b d8P Y8b 888 '888 '88b 888 888" +say " d88P 888 888 888 888 888 88888888 888 888 888 888 888" +say " d8888888888 888 Y88b. 888 888 Y8b. 888 888 888 Y88b 888" +say "d88P 888 888 'Y8888P 888 888 'Y8888 888 888 888 'Y88888" +say " 888" +say " ${BOLD}Initialization Script -- BMA${BLUE} Y8b d88P" +say "${RESET}" -echo -e "${GREEN}${ULINE}Environment${RESET}" +say "${GREEN}${ULINE}Environment${RESET}" if [ -f .env ]; then grep -v '^#' .env export $(grep -v '^#' .env | xargs) else - echo "No .env file found, let's initialize it" - remember "ALCHEMY=$(pwd)" + say "No .env file found, let's initialize it" + touch "${ALCHEMY}/.env" + remember "ALCHEMY=${ALCHEMY}" fi -echo "" -echo -e "${GREEN}${ULINE}System Basics${RESET}" -if [[ $ISA && $DISTRO && $UPDATED ]]; then - echo "Nothing to do!" +say "" +say "${GREEN}${ULINE}System Basics${RESET}" +if [ -n "$ISA" ]; then + if [ -n "$DISTRO" ]; then + if [ -n "$UPDATED" ]; then + say "Nothing to do!" + fi + fi fi -if [[ ! $ISA ]]; then +if [ -z $ISA ]; then ISA=$(uname -m) - if [ $ISA == 'x86_64' ]; then - echo -e "Ayyy you got yourself an ${GREEN}x86${RESET} processor, cool" - elif [ $ISA == 'armv7l' ]; then - echo -e "I see you rockin an ${GREEN}ARM${RESET} processor, neato" + if [ $ISA = 'x86_64' ]; then + say "Ayyy you got yourself an ${GREEN}x86${RESET} processor, cool" + elif [ $ISA = 'armv7l' ]; then + say "I see you rockin an ${GREEN}ARM${RESET} processor, neato" fi remember "ISA=$ISA" fi -if [[ ! $DISTRO ]]; then +if [ -z $DISTRO ]; then if [ -f "/etc/debian_version" ]; then DISTRO="debian" - echo -e "${GREEN}Debian${RESET}, Ubuntu, or Raspbian OS detected." + say "${GREEN}Debian${RESET}, Ubuntu, or Raspbian OS detected." elif [ -f "/etc/arch-release" ]; then DISTRO="arch" - echo -e "${GREEN}Arch or Manjaro-based${RESET} OS detected." + say "${GREEN}Arch or Manjaro-based${RESET} OS detected." elif [ -f "/etc/fedora-release" ]; then DISTRO="fedora" - echo -e "${GREEN}Fedora${RESET} detected as the Operating System" + say "${GREEN}Fedora${RESET} detected as the Operating System" elif [ $(uname | grep -c "Darwin") -eq 1 ]; then DISTRO="mac" - echo -e "${GREEN}MacOS${RESET} detected." + say "${GREEN}MacOS${RESET} detected." else - echo -e "I don't know ${RED}what OS you're running${RESET}! Cancelling this operation." + say "I don't know ${RED}what OS you're running${RESET}! Cancelling this operation." exit 1 fi remember "DISTRO=$DISTRO" fi # TODO - Update intermittently (like if you haven't run it in a week? use date +%s and (($INT+$INT2)) -if [[ ! $UPDATED ]]; then - echo "" - echo "Updating the repositories..." - echo -e "(you'll probably need to input ${BLUE}your 'sudo' password${RESET} here)" +if [ -z "$UPDATED" ]; then + say "" + say "Updating the repositories..." + say "(you'll probably need to input ${BLUE}your 'sudo' password${RESET} here)" case $DISTRO in "debian") sudo apt update @@ -99,9 +104,10 @@ if [[ ! $UPDATED ]]; then remember "UPDATED=true" fi -echo "" -echo -e "${GREEN}${ULINE}Core Dependencies${RESET}" +say "" +say "${GREEN}${ULINE}Core Dependencies${RESET}" install_if_needed git wget make -echo "" -echo -e "${BOLD}You're good to go!${RESET} Go ${BLUE}make something cool${RESET} :)" +say "" +say "${BOLD}You're good to go!${RESET} Go ${BLUE}make something cool${RESET} :)" +say "" diff --git a/recipes/init.sh b/recipes/init.sh index d233ba8..78c3a5d 100755 --- a/recipes/init.sh +++ b/recipes/init.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/sh # This is a script to be run on a fresh installation of Raspbian in order to make it suitable (to me) for CLI development # ~ Zen, 2022