#!/bin/sh # Bare Metal Alchemist, 2022 ############################################# # Iron - ♂ # ############################################# # Iron is the most common element found on our planet, and an element # that we, as a species, frequently rely on to build our tools and # our society as a whole. # This ingredient contains functions for building web applications and # running them from your server. Expect to use this one a lot if you're # writing alchemy recipes! # Start with lead... if [ -z "$LEAD" ]; then . ingredients/lead fi # ------------------- Databases ------------------- install_database() { if [ -n "$ALCHEMY_DB" ]; then say "Alchemy has already installed ${ALCHEMY_DB} as the database" fi if [ -z "${1}" ]; then say "Okay, let's get you set up with a database" say "But I'm too tired of this to write this atm" fi case ${1} in "postgres" | "postgresql") install_if_needed postgresql ;; "mysql" | "mariadb") install_if_needed mariadb-server ;; esac } # ------------------- NodeJS Ecosystem ------------------- if [ -d "$NVM_DIR" ]; then source $NVM_DIR/nvm.sh source $NVM_DIR/bash_completion fi set_node_to() { if check_for nvm; then if ! check_for node; then nvm install v16.14.0 fi if [ ! $(node -v) = $1 ]; then nvm install $1 nvm alias default $1 nvm use default fi else say "nvm not available, something went wrong..." fi } install_nvm() { say "${BOLD}Installing Node Version Manager${RESET}" if [ -d "$NVM_DIR" ]; then say "nvm already installed! skipping" else chmod +x scripts/nvm_install.sh scripts/nvm_install.sh &> /dev/null remember "NVM_DIR=$HOME/.nvm" fi } # ------------------- Systemd / Services ------------------- build_service_from_template() { SERVICE=$1 shift say "" if [ -f resources/service-templates/${SERVICE} ]; then say "Creating $SERVICE.service..." SERVICE_FILE=/etc/systemd/system/${SERVICE}.service if [ -f "$SERVICE_FILE" ]; then say "Seems like you've already installed ${SERVICE} here!" ask_for reset "Would you like to recreate it? ${BLUE}(y/n)${RESET} " case $reset in "Y" | "y") sudo rm $SERVICE_FILE ;; "N" | "n") say "Okay, we'll leave it as is." ;; esac fi if [ ! -f "$SERVICE_FILE" ]; then sudo cp resources/service-templates/${SERVICE} $SERVICE_FILE # Common template values sudo sed -i "s#USER#${USER}#g" $SERVICE_FILE sudo sed -i "s#HOME#${HOME}#g" $SERVICE_FILE for keyval; do KEY=$(say $keyval | cut -d'=' -f 1) VAL=$(say $keyval | cut -d'=' -f 2) say "Substituting $KEY for $VAL" sudo sed -i "s#$KEY#$VAL#g" $SERVICE_FILE done fi else say "No service template available for $SERVICE" fi } activate_service() { SERVICE=$1 sudo systemctl status ${SERVICE} > /dev/null return_code=$? case $return_code in 0) say "${BLUE}${SERVICE}${RESET} is already running" ;; 3) say "Enabling and starting ${GREEN}${SERVICE}${RESET}" sudo systemctl enable ${SERVICE} sudo systemctl start ${SERVICE} ;; 4) say "Hmm, I don't see a service for ${SERVICE}" ;; *) say "whoa what the heck is $return_code" ;; esac } IRON=1