|
# zod's ~/.bashrc |
|
# executed by bash(1) for non-login shells. & fools. |
|
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc) |
|
# for examples |
|
|
|
# If not running interactively, don't do anything |
|
#case $- in |
|
# *i*) ;; |
|
# *) return;; |
|
#esac |
|
|
|
# don't put duplicate lines or lines starting with space in the history. |
|
# See bash(1) for more options |
|
HISTCONTROL=ignoreboth |
|
|
|
# append to the history file, don't overwrite it |
|
shopt -s histappend |
|
|
|
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) |
|
HISTSIZE=1000 |
|
HISTFILESIZE=2000 |
|
|
|
# check the window size after each command and, if necessary, |
|
# update the values of LINES and COLUMNS. |
|
shopt -s checkwinsize |
|
|
|
# If set, the pattern "**" used in a pathname expansion context will |
|
# match all files and zero or more directories and subdirectories. |
|
#shopt -s globstar |
|
|
|
# make less more friendly for non-text input files, see lesspipe(1) |
|
#[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" |
|
|
|
# set variable identifying the chroot you work in (used in the prompt below) |
|
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then |
|
debian_chroot=$(cat /etc/debian_chroot) |
|
fi |
|
|
|
# ----------------------------- # |
|
## ANSI COLOR ENVIRONMENT VARS |
|
|
|
# Check if .ansi_colors.sh exists, and if not, download it from Github |
|
if [ ! -f "$HOME/.ansi_colors.sh" ]; then |
|
echo "${A_LIGHTGREY}Downloading ${A_BOLD}.ansi_colors.sh${A_RESET}${A_LIGHTGRAY}...${A_RESET}" |
|
curl -sSf "https://gist.githubusercontent.com/zudsniper/e5bbdb7d3384a2b5f76277b52d103e59/raw/.ansi_colors.sh" > "$HOME/.ansi_colors.sh" |
|
fi |
|
|
|
# source the colors |
|
. "$HOME/.ansi_colors.sh" |
|
# ----------------------------- # |
|
|
|
# set a fancy prompt (non-color, unless we know we "want" color) |
|
case "$TERM" in |
|
xterm-color|*-256color) color_prompt=yes;; |
|
esac |
|
|
|
# uncomment for a colored prompt, if the terminal has the capability; turned |
|
# off by default to not distract the user: the focus in a terminal window |
|
# should be on the output of commands, not on the prompt |
|
force_color_prompt=yes |
|
|
|
if [ -n "$force_color_prompt" ]; then |
|
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then |
|
# We have color support; assume it's compliant with Ecma-48 |
|
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such |
|
# a case would tend to support setf rather than setaf.) |
|
color_prompt=yes |
|
else |
|
color_prompt= |
|
fi |
|
fi |
|
|
|
if [ "$color_prompt" = yes ]; then |
|
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' |
|
else |
|
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' |
|
fi |
|
unset color_prompt force_color_prompt |
|
|
|
# If this is an xterm set the title to user@host:dir |
|
case "$TERM" in |
|
xterm*|rxvt*) |
|
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" |
|
;; |
|
*) |
|
;; |
|
esac |
|
|
|
# enable color support of ls and also add handy aliases |
|
if [ -x /usr/bin/dircolors ]; then |
|
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" |
|
alias ls='ls --color=auto' |
|
#alias dir='dir --color=auto' |
|
#alias vdir='vdir --color=auto' |
|
|
|
#alias grep='grep --color=auto' |
|
#alias fgrep='fgrep --color=auto' |
|
#alias egrep='egrep --color=auto' |
|
fi |
|
|
|
# colored GCC warnings and errors |
|
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' |
|
|
|
# Alias definitions. |
|
# You may want to put all your additions into a separate file like |
|
# ~/.bash_aliases, instead of adding them here directly. |
|
# See /usr/share/doc/bash-doc/examples in the bash-doc package. |
|
|
|
if [ -f ~/.bash_aliases ]; then |
|
. ~/.bash_aliases |
|
fi |
|
|
|
# enable programmable completion features (you don't need to enable |
|
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile |
|
# sources /etc/bash.bashrc). |
|
if ! shopt -oq posix; then |
|
if [ -f /usr/share/bash-completion/bash_completion ]; then |
|
. /usr/share/bash-completion/bash_completion |
|
elif [ -f /etc/bash_completion ]; then |
|
. /etc/bash_completion |
|
fi |
|
fi |
|
|
|
# You may uncomment the following lines if you want `ls' to be colorized: |
|
export LS_OPTIONS='--color=auto' |
|
eval "$(dircolors)" |
|
alias ls='ls $LS_OPTIONS' |
|
alias ll='ls $LS_OPTIONS -l' |
|
alias l='ls $LS_OPTIONS -lA' |
|
|
|
# &========================================& # |
|
|
|
# ===================== # |
|
# linux configs |
|
# ===================== # |
|
# by @zudsniper |
|
# (or zod#1626) |
|
# ------------- # |
|
# available at https://bashrc.zod.tf |
|
|
|
# ----------------------------- # |
|
# check OS |
|
checkOS() { |
|
if [[ "$OSTYPE" == "linux-gnu"* ]]; then |
|
export opersys="linux" |
|
elif [[ "$OSTYPE" == "darwin"* ]]; then |
|
# Mac OSX |
|
export opersys="mac" |
|
elif [[ "$OSTYPE" == "cygwin" ]]; then |
|
# POSIX compatibility layer and Linux environment emulation for Windows |
|
export opersys="win-gitbash" |
|
elif [[ "$OSTYPE" == "msys" ]]; then |
|
# Lightweight shell and GNU utilities compiled for Windows (part of MinGW) |
|
export opersys="win-msys" |
|
elif [[ "$OSTYPE" == "win32" ]]; then |
|
# I'm not sure this can happen. |
|
export opersys="win32" |
|
elif [[ "$OSTYPE" == "freebsd"* ]]; then |
|
# ... |
|
export opersys="freebsd" |
|
else |
|
export opersys="unknown" |
|
# Unknown. |
|
fi |
|
} |
|
|
|
## _______ OS DETERMINED _______ ## |
|
# "${opersys}" |
|
checkOS; |
|
# ----------------------------- # |
|
# system |
|
alias lsa="ls -lhrta" |
|
|
|
## hibernation |
|
alias sleepy="sudo systemctl mask sleep.target suspend.target hibernate.target hibernate-hybrid.target" |
|
alias noSleepy="sudo systemctl mask sleep.target suspend.target hibernate.target hibernate-hybrid.target" |
|
|
|
# ----------------------------- # |
|
# TF2Autobot management aliases |
|
|
|
# first, set BOT_ECOSYSTEM_FILE if this is our first run |
|
if alias autobotDir >/dev/null 2>&1; then |
|
export BOT_ECOSYSTEM_FILE="ecosystem.json" |
|
fi |
|
|
|
alias autobotDir="cd ." |
|
#export BOT_ECOSYSTEM_FILE="ecosystem.json" |
|
alias startAutobot="autobotDir; pm2 start ./${BOT_ECOSYSTEM_FILE} --update-env && pm2 save" |
|
alias stopAutobot="autobotDir; pm2 stop ./${BOT_ECOSYSTEM_FILE} --update-env && pm2 save" |
|
alias fStopAutobot="autobotDir; sudo pm2 stop ./${BOT_ECOSYSTEM_FILE} --update-env --force && pm2 save --force" |
|
alias restartAutobot="autobotDir; pm2 restart ./${BOT_ECOSYSTEM_FILE} --update-env && pm2 save" |
|
|
|
# ----------------------------- # |
|
# docker |
|
|
|
# if docker installed |
|
if [ -x "$(command -v docker)" ]; then |
|
|
|
# docker aliases |
|
alias dockerLS="docker container ls -q" |
|
alias dockerGenocide="docker container kill $(docker container ls -q)" |
|
|
|
alias startPortainer="docker volume create portainer_data; docker run -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data -itd portainer/portainer"; |
|
|
|
# attach with Bash to a container by id. Helpful for pterodactyl containers |
|
attachBashTo() { |
|
if [[ "$#" -eq 0 ]]; then |
|
echo -ne "${A_RED}Please provide argument: container id${A_RESET}\n"; |
|
return; |
|
fi |
|
docker exec -it "$1" /bin/bash; |
|
} |
|
|
|
fi |
|
|
|
# ------------------------------ # |
|
# TF2Autobot management functions |
|
initAutobotFuncs() { |
|
|
|
echo -ne "${A_YELLOW}${A_ITALIC}determining autobot instance...${A_RESET}"; |
|
if [[ "$#" -eq 0 ]]; then |
|
echo -ne "\n${A_BOLD}${A_LGREEN}Using current dir as autobot root.${RESET} \n"; |
|
alias autobotDir="cd ."; |
|
else |
|
alias autobotDir="cd $1"; |
|
fi |
|
|
|
echo -ne " ${A_BOLD}${A_GREEN}Done.${A_RESET}\n"; |
|
echo -ne "${A_BOLD}${A_ITALIC}determining configuration file...${A_RESET}"; |
|
if ! [[ -f "./$BOT_ECOSYSTEM_FILE" ]]; then |
|
# assuming that BOT_ECOSYSTEM_FILE has not been changed from default 'ecosystem.json' |
|
|
|
echo -ne "\n${A_BOLD}Didn't find ${A_RED}${BOT_ECOSYSTEM_FILE}${A_RESET}${A_BOLD}... ${A_RESET}${A_YELLOW}${A_ITALIC}looking for alternatives... ${RESET} \n"; |
|
|
|
if [[ -f "./ecosystem.config.js" ]]; then |
|
|
|
export BOT_ECOSYSTEM_FILE="ecosystem.config.js" |
|
echo -ne "\n${A_BOLD}Found ${A_GREEN}${BOT_ECOSYSTEM_FILE}${A_RESET}${A_BOLD}... ${A_RESET}${A_ITALIC}set env var ${BOT_ECOSYSTEM_FILE}. ${RESET} \n"; |
|
else |
|
export BOT_ECOSYSTEM_FILE="ecosystem.json" |
|
echo ne "\n${A_BOLD}Set ${A_GREEN}${BOT_ECOSYSTEM_FILE}${A_RESET} to default.\n"; |
|
fi |
|
fi |
|
|
|
echo -ne " ${A_BOLD}${A_GREEN}Done.${A_RESET}\n"; |
|
} |
|
|
|
runBotInstance() { |
|
initAutobotFuncs $#; |
|
startAutobot; |
|
} |
|
|
|
stopBotInstance() { |
|
initAutobotFuncs $#; |
|
stopAutobot; |
|
if [[ ${BOT_ECOSYSTEM_FILE} -eq ecosystem.config.js ]]; then |
|
npm run pm2-delete; |
|
fi |
|
} |
|
|
|
# ----------------------------- # |
|
# utility |
|
|
|
# simple analysis size function with normally installed linux CLI stuff |
|
# @param 1 - path: string - root path from which to search |
|
# @param 2 - n: number - the nth highest sized files will be displayed. |
|
findLargestNFiles() { |
|
if [[ ( $# -eq 0 ) || ( $# -gt 2 ) ]]; then |
|
echo -ne "${A_RED}${A_BOLD}FORMAT: ${RESET} findLargestNFiles( path: string, n: number )\n"; |
|
exit 1; |
|
fi |
|
|
|
ROOT_PATH = "/"; |
|
if [[ -z ${1} ]]; then |
|
ROOT_PATH = "${1}"; |
|
fi |
|
|
|
NUM_SHOWN = 10; |
|
if [[ -z ${2} ]]; then |
|
NUM_SHOWN = "${2}"; |
|
fi |
|
|
|
|
|
# go to provided directory, or `/` if none specified |
|
cd "${ROOT_PATH}"; |
|
|
|
echo -ne "${A_RED}${A_BOLD}[TOP FILES BY SIZE]${A_RESET}\n"; |
|
|
|
# this line written by ChatGPT on 12/9/22. Skynet moment |
|
find . -type f -exec du -h {} \; | sort -hr | head -${NUM_SHOWN}; |
|
|
|
exit 0; |
|
} |
|
|
|
# ----------------------------- # |
|
# find and kill process |
|
# by PORT |
|
|
|
|
|
|
|
# Lighter version of the following -- only handles a single argument and expects it to be provided. |
|
kPort() { |
|
echo -ne "${A_PURPLE}${A_BOLD}netstat'in${A_RESET}...\n"; |
|
sudo netstat -tulpn | grep ':${1}}'; |
|
|
|
echo -ne "${A_YELLOW}${A_INVERSE}REMOVING PROCESS ON${A_RESET} + '$1'\n" |
|
sudo fuser -k "$1"; |
|
} |
|
|
|
dispatchPort() { |
|
if [ $# -eq 0 ]; then |
|
echo -ne "${A_RED}${A_BOLD}No port provided as argument -- please do so. ${A_RESET}\n"; |
|
exit 1; |
|
fi |
|
|
|
echo "${A_RED}${A_BOLD}${A_UNDERLINE}KILLING EVERYTHING ON PORT${A_RESET}" + "$1" + "\n" |
|
# assume an arg is given |
|
for PORT in $# |
|
do |
|
kPort "$1"; |
|
done |
|
|
|
} |
|
|
|
# ----------------------------- # |
|
# my installers |
|
alias get_gh="curl -sL https://gist.githubusercontent.com/zudsniper/0ba53973f9e3fe6222ffd1763bc80055/raw/get_gh.sh | /bin/bash"; |
|
alias get_nvm="curl -sL https://gist.githubusercontent.com/zudsniper/dac0bd4122a00edf7bc00fdbec08956f/raw/get_gnvm.sh | /bin/bash"; |
|
|
|
# ----------------------------- # |
|
# set shell title |
|
|
|
# xterm title funcs |
|
settitle() { |
|
export PS1="\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ " |
|
echo -ne "\e]0;$1\a" |
|
} |
|
settitlepath() { |
|
export PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n$ " |
|
} |
|
|
|
# ----------------------------- # |
|
# git convenience funcs |
|
|
|
# INTERNAL FUNCTION to install gh correctly based on installed platforms' OS |
|
git_int_install() { |
|
checkOS; |
|
echo -ne "${A_CYAN}${A_INVERSE}operating system: ${opersys}${A_RESET}\n"; |
|
|
|
|
|
if [[ ${opersys} == "mac" ]]; then |
|
brew install gh; |
|
gh auth login; |
|
return; |
|
fi |
|
|
|
if [[ ${opersys} == "linux" ]]; then |
|
|
|
# from my gists! |
|
# date 02/02/2023 |
|
# ================================================= # |
|
sudo curl -L https://gist.githubusercontent.com/zudsniper/0ba53973f9e3fe6222ffd1763bc80055/raw/get_gh.sh | bash; |
|
#yes | sudo apt upgrade --allow-unauthenticated; |
|
#yes | sudo apt install gh --allow-unauthenticated; |
|
# ================================================= # |
|
fi |
|
} |
|
|
|
# avoid having to remember to install gh |
|
# i am lazy |
|
git_auth() { |
|
checkOS; |
|
if ! command -v gh >/dev/null 2>&1; then |
|
# echo "Install gh first" |
|
# installing gh... |
|
git_int_install; |
|
fi |
|
|
|
if ! gh auth status >/dev/null 2>&1; then |
|
# echo "You need to login: gh auth login" |
|
# prompting user for gh authorization |
|
gh auth login; |
|
fi |
|
|
|
} |
|
|
|
|
|
# adds all files in current dir to staged changes, commits with the message @params, and pushes the resulting commit |
|
# to the current branch upstream. |
|
git_acpush() { |
|
|
|
if [[ -z "$#" ]]; then |
|
echo -ne "${A_RED}${A_BOLD}Please provide a commit message to perform this operation.${A_RESET}\n" |
|
fi |
|
|
|
# add all files in current working directory |
|
git add .; |
|
|
|
# commit with provided message |
|
git commit -m "$#"; |
|
|
|
# push |
|
git push; |
|
|
|
} |
|
|
|
# ----------------------------- # |
|
# AUTO-UPDATING |
|
# (pushing updates IF gh auth user = zudsniper) |
|
|
|
updateGistInfo() { |
|
|
|
# Check if the local version of the file exists |
|
if [ ! -f "$2" ]; then |
|
echo "Error: Local file does not exist" |
|
exit 1 |
|
fi |
|
|
|
# Download the latest version of the file from the URL |
|
curl -L "$1" -o "temp.txt" |
|
|
|
# Compare the local version to the downloaded version |
|
if ! cmp -s "$2" "temp.txt"; then |
|
# Save the local version to a temporary file |
|
cp "$2" "$2.bak" |
|
# Overwrite the local version with the newer version |
|
mv "temp.txt" "$2" |
|
# Print a red alert message |
|
echo -e "\033[0;31mA newer version of your gist has been downloaded: $2\033[0m" |
|
else |
|
# If the local version is the same as the online version, delete the temporary file |
|
rm "temp.txt" |
|
fi |
|
|
|
} |
|
|
|
updateMyself() { |
|
me=`basename "$0"`; |
|
export dirr=$(pwd); |
|
cd "$(dirname "$0")"; |
|
gh gist edit https://gist.github.com/zudsniper/e5bbdb7d3384a2b5f76277b52d103e59 -f "${me}" .bashrc; |
|
echo -ne "${A_LGREEN}${A_INVERSE}${A_BOLD}Updated live gist!${A_RESET}\n\n"; |
|
cd "${dirr}"; |
|
} |
|
|
|
# update myself if out of date & push is not selected |
|
if [[ $1 -ne gpush ]]; then |
|
updateGistInfo https://gist.github.com/zudsniper/e5bbdb7d3384a2b5f76277b52d103e59 .bashrc |
|
fi |
|
|
|
if [[ $# -eq 0 ]]; then |
|
# do nothing |
|
# echo -ne "${A_BOLD}Hi! ${A_RESET} i'm zudsniper.\n\n" |
|
no=1 |
|
elif [[ $1 -eq gpush ]]; then |
|
updateMyself |
|
fi |
|
|
|
|
|
# ----------------------------- # |
|
# !!! WARNING !!! |
|
# (BROKEN, INFINITE LOOP) install nvm |
|
function installNVM() { |
|
|
|
if [[ $# -ne 0 ]]; then |
|
echo -ne "${A_PURPLE}${A_BOLD}Installing nvm...${A_RESET}\n"; |
|
|
|
if [[ $1 == "nvm1" ]]; then |
|
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash; |
|
source ~/.bashrc; |
|
installNVM nvm2; |
|
|
|
elif [[ $1 == "nvm2" ]]; then |
|
if [ -x "$(command -v nvm)" ]; then |
|
nvm install 18.8; |
|
nvm alias default 18.8; |
|
|
|
echo -ne "${A_LPURPLE}node version - ${A_INVERT}v18.8.x${A_RESET}\n"; |
|
else |
|
installNVM nvm1; |
|
fi |
|
|
|
fi |
|
else |
|
echo -ne "${A_RED}${A_BOLD}Failed to include internal argument to NVM installer script. FAILED. ${A_RESET}\n"; |
|
fi |
|
|
|
|
|
} |
|
# ----------------------------- # |
|
# nvm related |
|
|
|
# if nvm dir is not empty, source nvm |
|
if [ "$(ls -A "$HOME/.nvm")" ]; then |
|
export NVM_DIR="$HOME/.nvm" |
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm |
|
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion |
|
fi |
|
|
|
# ===================== # |
|
# *~end~* |
|
# ===================== # |
|
|
|
no=0 |
main