# 2024-02-10 Hyperling ## Environment Setup ## export PATH="~/bin:$PATH" if [[ -e ~/.env ]]; then source ~/.env fi if [ -f ~/.rc_shared ]; then source ~/.rc_shared fi # PS1 # This helps to determine the color palette numbers: # https://robotmoon.com/bash-prompt-generator/ # Colors are in env-shared. if [[ "`whoami`" == "root" ]]; then export PS1='\[$BOLD\]\[$ORANGE\][\[$SCARLET\]\t \[$RED\]\w\[$ORANGE\]]\[$GRAY\]\$ \[$RESET\]' else export PS1='\[$BOLD\]\[$PURPLE\][\[$ORANGE\]\t \[$GREEN\]\w\[$PURPLE\]]\[$RESET\]\$ ' fi ## Aliases ## # Quickly log onto production server. # Setting up ssh-keygen and ssh-copy-id make this even faster! if [[ -n $PROD_PORT && -n $PROD_USER && -n $PROD_HOST ]]; then alias prod="ssh -p $PROD_PORT $PROD_USER@$PROD_HOST" else alias prod="echo 'ERROR: .env not set up properly, please fix and reload RC.'" fi # Easily get to storage devices. curr="`pwd`" cd cd storage/shared #export SS="`pwd`" export SS="/sdcard" cd alias ss="cd $SS" alias sd="ss" alias storage="ss" alias home="ss" cd "$curr" # Shortcut to media. export DCIM="$SS/DCIM/Camera" alias dcim="cd $DCIM" # Shortcut to Code export CODE="$SS/Code" alias code="cd $CODE" # Shortcuts for TRASH. export TRASH="$SS/TRASH" alias trash="cd $TRASH" alias clean-trash="bash -c 'rm -rfv $TRASH/*'; clean-trashed" alias trash-clean="clean-trash" alias check-trash="du -h $TRASH" alias trash-check="check-trash" alias clean-trashed='find "$SS" -name ".trashed*" -exec du -h {} \; -delete | sort -h' alias check-trashed='find "$SS" -name ".trashed*" -exec du -h {} \; -exec mv -v {} ~/TRASH/ \; | sort -h' # Help prevent mistakes. alias cp="cp -v " alias mv="mv -v " alias rm="echo 'Move to ~/storage/shared/TRASH/ instead!'" # Quickies function bye { exit; } alias install="pkg install " alias uninstall="pkg uninstall " alias remove="uninstall " ### Functions ### ## Code Related ## function code-projects { cat <<- EOF env-termux dev env-ansible dev env-docker dev nodejs-website dev hugo-jackanope main EOF } function code-reseed { cd ~/Code code-projects | while read project branch; do git clone ssh://git@$GIT_SERVER:$GIT_PORT/$GIT_USER/$project --branch $branch --recurse-submodules done } alias reseed-code="code-reseed" function check-code { cd ~/Code ls | while read project; do echo -e "\nChecking $project..." cd $project if [[ -d .git ]]; then git pull git push else echo "* Not a valid git project, skipping." fi cd .. done } alias code-check="check-code" # Quickly commit code to a repo. function commit { message="$1" if [[ -z "$message" ]]; then echo "ERROR: A message is required." >&2 echo 'USAGE: commit "My commit message."' >&2 return 1 fi if [[ "$1" == "-m" ]]; then message="$2" fi git add . && git commit -m "$message" && git push } # Easily test this project after committing changes. # Otherwise can just source this file unless testing setup.sh. function test-termux { sh -c "rm -rf ~/termux-deleteme ~/TRASH/termux-deleteme" 2>/dev/null git clone https://git.hyperling.com/me/env-termux \ --branch=dev ~/termux-deleteme chmod 755 ~/termux-deleteme/*.sh ~/termux-deleteme/setup.sh } alias reload-termux="test-termux" alias termux-test="test-termux" alias termux-reload="reload-termux" # Pulled from /me/env-ansible, need to make a shared library between it and Termux. # Change a branch to point at another. function load-branch { rcvr="$1" # branch which we want to modify base="$2" # branch with the changes we want if [[ "$rcvr" == "main" ]]; then echo "*** ERROR: Are you nuts, fool!? Not main! Do it manually! ***" return 1 fi if [[ -z "$base" ]]; then if [[ "$rcvr" == "prod" ]]; then base="stage" elif [[ "$rcvr" == "stage" ]]; then base="dev" else echo "* Unsure which branch to use for '$rcvr'. Please specify." return 1 fi echo "* Base was not specified, using '$base' for '$rcvr'." else echo "* Requested pointing '$rcvr' branch to '$base'." fi echo -e "\n* Ensuring we are on base branch '$base'." && git switch "$base" && echo -e "\n* Changing pointer for '$rcvr' to '$base'." && git branch -f "$rcvr" "$base" && #echo -e "\n* Switching to branch '$rcvr'." && #git switch "$rcvr" && echo -e "\n* Forcing push on branch '$rcvr'." && git push --force --set-upstream origin "$rcvr" && echo -e "\n* Done! Displaying list of remote branches." && git ls-remote --heads | sort if [[ "$base" != "dev" ]]; then echo -e "\n* Checking if a dev branch exists." git ls-remote --exit-code --heads origin dev dev_exists="$?" if [[ "$dev_exists" == 0 ]]; then echo -e "\n* Switching back to dev." git switch dev elif [[ "$dev_exists" == 2 ]]; then echo -e "\n* Switching back to main." git switch main else echo "*** ERROR: Unknown status for dev_exists, '$dev_exists'. ***" fi fi echo -e "\n* Verifying which branch we're on." git branch } alias load-prod="load-branch prod" alias load-stage="load-branch stage" alias rollback-prod="load-branch prod main" alias rollback-stage="load-branch stage prod" alias rollback-dev="load-branch dev stage" alias reset-prod="load-branch prod main" alias reset-stage="load-branch stage main" alias reset-dev="load-branch dev main" ## Termux Related ## function update { params="$1" echo "******* Apt / Pkg *******" && echo "*** Update Cache ***" && apt update && echo -e "\n*** Auto Remove ***" && apt autoremove $params && echo -e "\n*** Clean ***" && pkg clean $params && echo -e "Cleaned!\n\n*** Fix Broken/Missing ***" && apt --fix-broken --fix-missing install && echo -e "\n*** Upgrade ***" && # No longer using `apt`, in favor of Termux's wrapper `pkg`. #apt dist-upgrade --allow-downgrades --fix-broken --fix-missing $params && pkg upgrade $params echo -e "\n******* Mission Complete!! *******" } alias upgrade="update" alias goodbye="update -y && bye" ## Video Related ## alias pull-content="mv -v $SS/DCIM/Camera/`date +"%Y-%m-%d"`* ./raw/" alias pull-screenshots="mv -v $SS/Pictures/Screenshots/* ./raw/" alias pull-screenshot="pull-screenshots" alias pull-sc="pull-screenshots" alias pull-crops="mv -v $SS/Documents/*/`date +"%Y%m%d"`*.{jpg,png} ./raw/" alias pull-youcuts="mv -v $SS/Movies/youcut/* ./raw/" alias pull-youcut="pull-youcuts" alias pull-yc="pull-youcut" alias pull-memes="mv -v $SS/Pictures/memetastic/memes/*.jpg ./" alias pull-meme="pull-memes" alias pull-icon="pull-meme" function init-video-contents { if [[ -n "$1" ]]; then mkdir "$1" cd "$1" fi touch README.md #touch title.md #touch desc.md #touch tags.md mkdir -pv raw } alias init-video="init-video-contents" alias init-vid="init-video" alias initvid="init-vid" alias mkvid="init-video; pull-content; pull-yc; pull-sc; pull-crops; pull-icon; qpv" alias mkv="mkvid" alias qvd="mkv" alias qv="qvd" ## End Video Section ## ## Backup Related ## function now { date "+%Y%m%d-%H%M%S" } function today { date "+%Y%m%d" } export BACKUP_DIR="/srv/backup" export DOCKER="Docker" export SYSTEM="System" function pull_prod_backup { if [[ -z "$1" || ("$1" != "$DOCKER" && "$1" != "$SYSTEM") ]]; then echo "ERROR: Parameter 1 not correct, expecting '$DOCKER' or '$SYSTEM'." return 1 fi backup_type="$1" echo "Looking for '*${backup_type}*.zip'" ls -lh *${backup_type}*.zip 2>/dev/null status="$?" if [[ "$status" == "0" ]]; then echo "File already downloaded, skipping." return 0 else echo "File still needed, downloading to local tmp/." fi mkdir -pv tmp scp -P $PROD_PORT \ $PROD_USER@$PROD_HOST:"$BACKUP_DIR/*${backup_type}*.zip" \ tmp/ if [[ "$?" == "0" ]]; then echo "Succeeded!" mv -v tmp/*.zip ./ rmdir -v tmp else echo "Failed!" mv tmp "$TRASH/tmp_`now`" fi } function pull_prod_backups { dir="ProductionBackups-Pulled`today`" mkdir -pv "$dir" cd "$dir" pull_prod_backup "$DOCKER" pull_prod_backup "$SYSTEM" du -h *.zip | sort -h status="$?" cd .. if [[ "$status" != 0 ]]; then echo "Failed to find zip files, removing folder." rmdir -v "$dir" return 1 fi echo "Done!" } alias pull-prod-backups="pull_prod_backups" alias pull-backups="pull_prod_backups" alias prod-backups="pull_prod_backups" alias prod-backup="pull_prod_backups" alias pull-prod="pull_prod_backups" alias prod-pull="pull_prod_backups" # Complete! PROG="$(basename -- "${BASH_SOURCE[0]}")" echo "'$PROG' completed!"