Note
These configurations are interdependent;
follow them in the given order.
WSL sections can be skipped for Linux configurations.
Prerequisites
- Packages :
eza
figlet
git
gh
tmux
neofetch
- Services :
sshd
apache2
mariadb
postgres
postfix
- Plugins :
oh-my-zsh
powerlevel10k
- Terminal :
QTerminal
- Fonts :
Nerd Font
Powerlevel10k Theme
### Powerlevel10k Theme
# Enable Powerlevel10k instant prompt. Should stay close to the top of ~/.zshrc.
# Initialization code that may require console input (password prompts, [y/n]
# confirmations, etc.) must go above this block; everything else may go below.
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# Make zsh instant prompt quiet
typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet
#######################################################################
ZSH Basic Config
### ZSH Basic Config
set autocd # change directory just by typing his name
setopt promptsubst # enable command substitution in prompt
# configure keybindings
bindkey -e # emacs keybindings
bindkey ' ' magic-space # do history expansion on space
# Uncomment the following line to use case-sensitive completion.
CASE_SENSITIVE="true"
#######################################################################
oh-my-zsh config
### oh-my-zsh Config
# Path to oh-my-zsh installation.
export ZSH="$HOME/.oh-my-zsh"
# Oh-My-Zsh custom theme
ZSH_THEME="powerlevel10k/powerlevel10k"
# ZSH_THEME="archcraft"
# Which plugins would you like to load?
# Standard plugins can be found in $ZSH/plugins/
# Custom plugins may be added to $ZSH_CUSTOM/plugins/
plugins=(
zsh-syntax-highlighting
zsh-autosuggestions
web-search
vscode
sudo
)
# Here to disable oh-my-zsh auto update
DISABLE_AUTO_UPDATE="true"
# This is for fastfile Oh-My-Zsh Plugin
fastfile_var_prefix='$'
# Declare the variable for zsh-syntax-highlighting styles
typeset -A ZSH_HIGHLIGHT_STYLES
# From ~/.oh-my-zsh/plugins/zsh-syntax-highlighting/highlighters/main/README.md
ZSH_HIGHLIGHT_STYLES[path]='none'
ZSH_HIGHLIGHT_STYLES[autodirectory]=fg='#ffffff'
ZSH_HIGHLIGHT_STYLES[suffix-alias]=fg='none'
ZSH_HIGHLIGHT_STYLES[precommand]=fg='none'
ZSH_HIGHLIGHT_STYLES[arg0]=fg='none'
ZSH_HIGHLIGHT_STYLES[single-quoted-argument]=fg='#23ff45'
ZSH_HIGHLIGHT_STYLES[double-quoted-argument]=fg='#23ff45'
ZSH_HIGHLIGHT_STYLES[single-hyphen-option]='fg=#37b0ff,bold'
ZSH_HIGHLIGHT_STYLES[double-hyphen-option]='fg=#37b0ff,bold'
ZSH_HIGHLIGHT_STYLES[redirection]='fg=#ffe541,bold'
ZSH_HIGHLIGHT_STYLES[globbing]='fg=#ff9000,bold'
ZSH_HIGHLIGHT_STYLES[command-substitution-unquoted]='fg=#d30ccf,bold'
ZSH_HIGHLIGHT_STYLES[command-substitution-delimiter]='fg=#d30ccf,bold'
# here the color of the auto-suggestion
# ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE=fg=#0000ff"
# source oh-my-zsh after everything have been loaded
source $ZSH/oh-my-zsh.sh
#######################################################################
Tmux Config
### Tmux Config
# Launch tmux at startup
case $TERM in
screen|tmux-256color);;
*)tmux att -t 0 2>/dev/null|| tmux;;
esac;
# this alias to launch tmux
alias tmx="tmx"
#this function for tmx alias
function tmx(){
if [[ $(tmux ls | wc -l) -gt 0 ]]; then
tmux rename-session "$(basename "$PWD")"
else
clear && br
fi
}
#######################################################################
ANSI Color Codes
### ANSI CODES VARIABLES
# Text Color
BLACK="\e[30m"
RED="\e[31m"
GREEN="\e[32m"
YELLOW="\e[33m"
BLUE="\e[34m"
MAGENTA="\e[35m"
CYAN="\e[36m"
LIGHT_GRAY="\e[37m"
DARK_GRAY="\e[90m"
LIGHT_RED="\e[91m"
LIGHT_GREEN="\e[92m"
LIGHT_YELLOW="\e[93m"
LIGHT_BLUE="\e[94m"
LIGHT_MAGENTA="\e[95m"
LIGHT_CYAN="\e[96m"
WHITE="\e[97m"
# Background Color
BG_BLACK="\e[40m"
BG_RED="\e[41m"
BG_GREEN="\e[42m"
BG_YELLOW="\e[43m"
BG_BLUE="\e[44m"
BG_MAGENTA="\e[45m"
BG_CYAN="\e[46m"
BG_LIGHT_GRAY="\e[47m"
BG_DARK_GRAY="\e[100m"
BG_LIGHT_RED="\e[101m"
BG_LIGHT_GREEN="\e[102m"
BG_LIGHT_YELLOW="\e[103m"
BG_LIGHT_BLUE="\e[104m"
BG_LIGHT_MAGENTA="\e[105m"
BG_LIGHT_CYAN="\e[106m"
BG_WHITE="\e[107m"
# Text Style
BOLD="\e[1m"
DIM="\e[2m"
UNDERLINE="\e[4m"
BLINK="\e[5m"
INVERT="\e[7m"
HIDDEN="\e[8m"
# Reset
RESET="\e[0m"
RESETBG="\e[49m\n"
# Character
CHECKMARK="$(printf '\xE2\x9C\x94')"
QUESTION_MARK="$(printf '\xE2\x9D\x93')"
#######################################################################
Basic Aliases
### Basic Aliases
# this alias to update the package
alias upd="allow_sudo && upd"
# this function for up alias
function upd(){
echo "u p d a t i n g . . ." | figlet -t -c;
br && sudo apt update && br;
}
# this alia to update the package
alias upg="allow_sudo && upg"
# this function for up alias
function upg(){
echo "u p g r a d i n g . . ." | figlet -t -c;
br && sudo apt upgrade && br;
}
# this alias to install package
alias ist="allow_sudo && ist"
# this function for ist alias
function ist(){
case "${1##*.}" in
git)
echo " C l o n i n g . . . " | figlet;
br && echo "Package =======> "${1%.*}" ";
br && git clone "$1" && br;
;;
*)
echo " I n s t a l l i n g . . . " | figlet;
c && br && echo "Package =======> "$1" ";
br && sudo apt install "$1" && br;
;;
esac
}
# this alias to install package
alias rmv="rmv"
# this function for ist alias
function rmv(){
case "${1##*.}" in
deb)
c && echo -e && echo -e && sudo clear && echo -e && echo -e && echo " r e m o v i n g . . . " | figlet | lolcat && echo -e && echo "Package =======> "${1%.*}" " && echo -e && sudo dpkg -r "$1" && echo -e;
;;
*)
c && echo -e && echo -e && sudo clear && echo -e && echo -e && echo " r e m o v i n g . . . " | figlet | lolcat && echo -e && echo "Package =======> "$1" " && echo -e && sudo apt remove "$1" && echo -e;
;;
esac
}
# this alias to rename a file / directory; and display it after
alias nm="nm"
# this function for cpf alias
function nm(){
mv "$1" "$2" && cv;
}
# this line to count line inside a file
alias cl="linecount"
# this function for the cl alias
function linecount() {
if [ -z "$1" ]; then
echo "Please provide a filename"
elif [ -z "$2" ]; then
wc -l "$1" | awk '{print $1, "lines"}'
else
grep -c "$1" "$2" | awk -v var="$1" '{print $1, var, "in it"}'
fi
};
# this line to view a command manual
alias mn="mn"
# this function for mn alias
function mn(){
if [[ $# -eq 1 ]]; then
man $1 | less
else
man $1 | grep $2 | less
fi
}
# this alias to view tthe manual entry for a command
alias mns="mns"
# this function for mn alias
function mns(){
if [[ $(command -v "$1") ]]; then
local manual_path=~/NTSOA/manual
# here to check if the command exists
man "$1" | cat > $manual_path/"$1"_manual.txt;
all $manual_path/"$1"_manual.txt;
vf $manual_path/"$1"_manual.txt;
cv;
else
cv
fi
}
# this alias to enter the manual directory
alias mnv="mnv"
# this function for mnv alias
function mnv(){
if [[ $# -eq 0 ]]; then
op /home/h471x/NTSOA/manual;
elif [[ $# -eq 1 ]]; then
op /home/h471x/NTSOA/manual "$1";
fi
}
# this alias to view the pc state
alias pc="c && br 2 && neofetch --source ~/.config/neofetch/htx2.txt"
# this alias to view the history
alias hst="hst"
# this function for hst alias
function hst(){
if [[ $# -eq 0 ]]; then
history | less && cv
else
re='^[0-9]+$'
# check if the argument is an integrer
if [[ $1 =~ $re ]]; then
history | tail -$1 | less && cv
else # else if it's a text to grep
history | grep "$1" | less && cv
fi
fi
}
# this alias to specify which command in the history to search
alias hsg="hsg"
# this function for hsg alias
function hsg(){
if [[ $# -eq 0 ]]; then
history | less && cv;
else
history | grep "$1" | less && cv;
fi
}
# this alias to count line and words inside a file
alias flc="flc"
# this function for the cl alias
function flc(){
if [[ -f "$1" ]]; then
if [ -z "$1" ]; then
echo "Please provide a filename"
elif [ -z "$2" ]; then
c && br;
echo -ne " ==> "
file "$1";
echo -ne " ==> ";
wc -l "$1" | awk '{print $1, "lines"}';
echo -ne " ==> ";
wc -w "$1" | awk '{print $1, "words"}';
br;
else
grep -c "$1" "$2" | awk -v var="$1" '{print $1, var, "in it"}'
fi
elif [[ -d "$1" ]]; then
dc "$1";
fi
}
# this alias to list
alias list="list"
# this function for list alias
function list(){
local list_app="eza --icons=always --no-quotes"
eval $list_app
}
# this alias to save a file content to another file
alias sv="sv"
# this function for sv alias
function sv(){
cat "$1" > "$2";
}
kill-line() {
if [[ $BUFFER == "" ]]; then
zle backward-kill-line
else
zle kill-whole-line
fi
}
zle -N kill-line
bindkey "²²" kill-line
# this alias to clear
alias c="clear"
# this alias to clear but with extra lines
alias x="clear && echo -e && echo -e && echo -e && echo -e && echo -e && echo -e"
# this alias to break a line
alias br="br"
# this function for br alias
function br(){
if [[ $# -eq 1 ]]; then
for ((i=1; i<=$1;i++)); do
echo -e;
done
elif [[ $# -eq 0 ]]; then
echo -e;
fi
}
# this alias to show the welcome message
alias cvi="cvii"
# here to write a welcome message
function cvii(){
clear && br 2;
echo "H 4 7 1 X" | figlet -t -c;
br 2;
}
x;
# this alias to exit
alias q='exit'
# this alias to give full permission
alias all="all"
# this function for all alias
function all(){
if [[ $# -eq 0 ]]; then
if [[ -d "$1" ]]; then
chmod 700 * && cv;
elif [[ -f "$1" ]]; then
chmod 777 * && cv;
fi
else
if [[ -d "$1" ]]; then
chmod 700 "$@" && cv;
elif [[ -f "$1" ]]; then
chmod 777 "$@" && cv;
fi
fi
}
#######################################################################
Navigation Aliases
### Navigation Aliases
# this alias to have the current view
# of working directory content using ls
alias cv="cv"
# this function for cv alias
# UPDATED : 01/25/2024
# to adjust the title
# when we have more than 50 visible items
function cv() {
local target="$1"
local folder_content="${target:-$PWD}"
local folder_name=$(basename $folder_content)
local visible_item=$(ls $folder_content | wc -l)
local total_item=$(ls -A $folder_content | wc -l)
local hidden_item=$((total_item - visible_item))
# this function for the header of cv alias
function show_header(){
local folder_header
if [[ $total_item -eq 0 ]]; then
folder_header="Empty(0)";
folder_icon=" "
elif [[ $hidden_item -eq 0 ]]; then
folder_header="total($visible_item)";
folder_icon=" "
else
folder_header="visible($visible_item) hidden($hidden_item) total($total_item) ";
folder_icon=" "
fi
echo "${BOLD}${WHITE} $folder_icon $folder_name -> $folder_header ${RESET}";
}
# this function to show the content of the cv
function show_content(){
# local flag="${1:-}"
# ls $flag $folder_content;
eza --icons=always --no-quotes --group-directories-first $folder_content
}
# this function to show the all of the cv content
function show_all(){
c && br;
if [[ $visible_item -lt 30 ]]; then
show_header;
br;
show_content;
br;
else
show_content;
br 2;
show_header;
br;
fi
}
show_all;
}
# this alias to view the current directory content
alias cvf="cvf"
# this function for cvf alias
# UPDATED : 01/25/2024
# to adjust the title
# when we have more than 50 visible items
function cvf() {
local target="$1"
local folder_content="${target:-$PWD}"
local folder_name=$(basename $folder_content)
local visible_item=$(ls $folder_content | wc -l)
local total_item=$(ls -A $folder_content | wc -l)
local hidden_item=$((total_item - visible_item))
# this function for the header of cv alias
function show_header(){
local folder_header
if [[ $total_item -eq 0 ]]; then
folder_header="Empty(0)";
folder_icon=" "
elif [[ $hidden_item -eq 0 ]]; then
folder_header="total($visible_item)";
folder_icon=" "
else
folder_header="visible($visible_item) hidden($hidden_item) total($total_item) ";
folder_icon=" "
fi
echo "${BOLD}${WHITE} $folder_icon $folder_name -> $folder_header ${RESET}";
}
# this function to show the content of the cv
function show_content(){
eza --icons=always --no-quotes -a --group-directories-first $folder_content;
}
# this function to show the cv
function show_all(){
c && br;
if [[ $hidden_item -lt 30 ]]; then
show_header;
br;
show_content;
br;
else
show_content;
br 2;
show_header;
br;
fi
}
show_all;
}
# this alias to view the current directory content
# with specifications
alias cvg="cvg"
# this function for cvg alias
function cvg(){
local folder_name=$(basename $PWD)
local item="$1"
local matched_items=$(ls -A | grep "$item" | wc -l)
function show_header(){
echo "${BOLD} $folder_name -> contains $matched_items '$1' ${RESET}";
}
function show_content(){
eza --icons=always --color=always -a --group-directories-first | grep "$1";
}
# this function to show the cv
function show_all(){
c && br;
if [[ $matched_items -lt 20 ]]; then
show_header $1; br;
show_content $1; br;
else
show_content $1; br;
show_header $1;
fi
}
show_all $item;
}
# this alias to open a directory
alias op="op"
# this function for op alias
function op() {
# Check if $1 is a symbolic link
if [[ -L "$1" ]]; then
# Resolve the real path of the symbolic link
real_path=$(readlink -f "$1")
# Check if the resolved path is a directory
if [[ -d "$real_path" ]]; then
if [[ $# -eq 1 ]]; then
cd "$real_path" && cv
elif [[ $# -eq 2 ]]; then
cd "$real_path" && cvg "$2"
fi
# Check if the resolved path is a file
elif [[ -f "$real_path" ]]; then
vf "$real_path"
fi
# If $1 is a directory (but not a symbolic link)
elif [[ -d "$1" ]]; then
if [[ $# -eq 1 ]]; then
cd "$1" && cv
elif [[ $# -eq 2 ]]; then
cd "$1" && cvg "$2"
fi
# If $1 is a file (but not a symbolic link)
elif [[ -f "$1" ]]; then
vf "$1"
fi
}
# this alias to create a directory
alias dr="dr"
# this function for dr alias
function dr(){
mkdir "$@" && cv;
}
# this alias to remove a directory
alias rd="rd"
# this function for rd alias
function rd(){
rm -r "$@" && cv;
}
# this line to have destination location for copy / cut
alias dt="dt"
# this function for dst alias
function dt(){
dest="$PWD" && c && echo -e && echo "d e s t s a v e d" | figlet -t -c && sleep 0.6 && cv;
}
# this alias to open a directory
# and make it as destination
alias opd="opd"
# this function for opd alias
function opd(){
op "$1" && dt && nd;
}
# this alias to create a directory
# and then directly enter to it
alias opdr="opdr"
# this function for opdr alias
function opdr(){
dr "$*" && op "$*";
}
# this alias to go back from a directory
alias b="b"
# this function for b alias
function b(){
if [[ $# -eq 0 ]]; then
cd .. && cv
else
for ((i=1; i<=$1;i++)); do
cd .. && cv
done
fi
}
# this alias to go to the previous directory
alias nd="nd"
# this function for nd alias
function nd(){
cd - &>/dev/null;
cv;
}
#######################################################################
Sudo Aliases
### Sudo Aliases
# this alias to give sudo
# access before command execution
alias allow_sudo="allow_sudo"
# this function for allow_sudo alias
# HACK : 05-12-2024 15:28
# check if sudo requires a password
# then show the password prompt,
# otherwise just execute the next command
function allow_sudo(){
sudo -n true &>/dev/null
if [ $? -eq 1 ]; then
sudo echo && return 0 || return 1
else
return 0
fi
}
# this alias to simulate the sudo behaviour
alias hndo="hndo"
# this function for hndo alias
function hndo(){
local attempts=3
local attempts_num=$(echo $attempts)
local expected_hashed_password="5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
# this is "password" hashed
# use this command : echo -n password | sha256sum | awk '{print $1}'
c && br 2
while [ $attempts -gt 0 ]; do
echo -ne "Your Password, Sir : "
read -s password
# Hash the entered password
hashed_input=$(echo -n "$password" | sha256sum | awk '{print $1}')
if [ "$hashed_input" = "$expected_hashed_password" ]; then
c && br
eval "$@"
return
else
attempts=$((attempts - 1))
br
echo -n "Wrong, Try Again"
br
if [ $attempts -gt 0 ]; then
continue
else
echo "hndo: $attempts_num incorrect password attempts"
return 1
fi
fi
done
}
# this alias to switch to root
alias ad="ad"
# this function for ad alias
function ad(){
c && echo -e && echo -e && sudo su && cv;
}
#######################################################################
Git Aliases
### Git Aliases
# this alias to git add and git commit at the same time
alias gad="gad"
# this function for gad alias
# SOLVED: 05-11-2024 23:43
# handled git add and git commit
# according to the first argument
# if it's not a file then it is
# a commit message, otherwise check
# if it is a file then the rest
# of the argument is the commit
function gad(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
if [[ $# -eq 0 ]]; then
git add --all && git commit
elif [[ $# -ge 1 ]]; then
if [[ -f "$1" ]]; then
if [[ $# -eq 1 ]]; then
echo "${BOLD}${RED}Error : no commit message !"
else
# consider all arguments from the second one as one string
git add "$1" && git commit "$1" -m "${*:2}";
fi
else
git add --all && git commit -m "$*"
fi
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to rename a git branch
alias gnm="gnm"
# this function for gnm alias
function gnm(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
local current_branch=$(git branch | awk '/\*/ {print $2}');
if [[ $# -eq 1 ]]; then
git branch -M $current_branch "$1";
cv;
elif [[ $# -eq 0 ]]; then
echo "${BOLD} ■■▶ Please pass the new name of '$current_branch' branch as argument " && br;
else
echo "${BOLD} ■■▶ Usage : gnm new_name_of_the_branch" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# autocomplete gnm
complete -F branch_auto_complete gnm
# this alias to switch to the last git branch
alias gck="gck";
# this function for gck alias
function gck(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [[ "$is_a_git_repo" == "true" ]]; then
local current_branch=$(git branch | awk '/\*/ {print $2}');
if [ "$has_remote" ]; then
local default_branch=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
local repo_url=$(git config --get remote.origin.url)
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
else
local default_branch=$(git config --get init.defaultBranch)
local repo_name=$(basename "$(git rev-parse --show-toplevel)")
fi
if [[ -z "$default_branch" ]]; then
default_branch=$(git config --get init.defaultBranch)
fi
if [[ $# -eq 0 ]]; then
if [[ "$current_branch" != "$default_branch" ]]; then
git checkout "$default_branch"
else
local user="$(whoami)"
if ! git rev-parse --verify "$user" >/dev/null 2>&1; then
function check_new_branch(){
echo -ne "${BOLD}${WHITE}New branch${GREEN} "$user"${WHITE} ? (y/n) ";
read branch
if [ "$branch" = "y" ]; then
git checkout -b "$user" &>/dev/null;
# check for remote
if [ "$has_remote" ]; then
function check_new_remote_branch(){
echo -ne "${BOLD}${WHITE}Add${GREEN} "$user"${WHITE} branch to ${LIGHT_BLUE}$repo_name ${WHITE} on GitHub ? (y/n) ";
read remote_branch
if [ "$remote_branch" = "y" ]; then
git push origin "$user";
elif [ "$remote_branch" = "n" ];then
return 0
else
check_new_remote_branch
fi
}
check_new_remote_branch
fi
elif [ "$branch" = "n" ];then
return 0
else
check_new_branch
fi
}
check_new_branch
else
git checkout "$user"
fi
fi
elif [[ $# -eq 1 ]]; then
# check if the branch doesn't exist yet
if ! git rev-parse --verify "$1" >/dev/null 2>&1; then
local new_branch="$1"
function check_new_branch(){
echo -ne "${BOLD}${WHITE}New branch${GREEN} "$new_branch"${WHITE} ? (y/n) ";
read branch
if [ "$branch" = "y" ]; then
git checkout -b "$new_branch" &>/dev/null;
# check for remote
if [ "$has_remote" ]; then
function check_new_remote_branch(){
echo -ne "${BOLD}${WHITE}Add${GREEN} "$new_branch"${WHITE} branch to ${LIGHT_BLUE}$repo_name ${WHITE} on GitHub ? (y/n) ";
read remote_branch
echo ${RESET}
if [ "$remote_branch" = "y" ]; then
git push origin "$new_branch";
elif [ "$remote_branch" = "n" ];then
return 0
else
check_new_remote_branch
fi
}
check_new_remote_branch
fi
elif [ "$branch" = "n" ];then
return 0
else
check_new_branch
fi
}
check_new_branch
else
git checkout "$1";
fi
else
echo "${BOLD} ■■▶ Usage : gck branch or gck (switch default branch)" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this function to autocomplete
# the branches of gck alias
function branch_auto_complete(){
local cur branches
# Get the current word being completed
cur="${COMP_WORDS[COMP_CWORD]}"
# Get the list of branches from `git branch`
branches=$(git branch --format '%(refname:short)')
# Generate completions
COMPREPLY=($(compgen -W "${branches}" -- "${cur}"))
}
# Register the completion function for `gck`
complete -F branch_auto_complete gck
# this alias to switch to the last git branch
alias gcb="gcb";
# this function for gcb alias
function gcb(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
if [[ $# -eq 0 ]]; then
git checkout -;
else
echo "${BOLD} ■■▶ Usage : gcb (no argument)" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to create a new branch and switch to it
alias gbr="gbr"
# this function for gbr alias
function gbr(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
if [[ $# -eq 1 ]]; then
git checkout -b "$1";
elif [[ $# -eq 0 ]]; then
git branch -a;
else
echo "${BOLD} ■■▶ Usage : gbr new_branch" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to revert back to last commit
alias grst="grst"
# this function for grst alias
function grst(){
if [[ $# -eq 0 ]]; then
git checkout -- .;
elif [[ $1 == "cmt" ]]; then
git reset --soft HEAD~1
else
git restore "$@";
fi
}
# this function to autocomplete
# files to reset from git status
function _grst_completion() {
local cur opts
# Get the current word being completed
cur="${COMP_WORDS[COMP_CWORD]}"
# Get the list of uncommitted changes from `git status -s`
opts=$(git status -s | awk '{print $2}')
# Generate completions
COMPREPLY=($(compgen -W "${opts}" -- "${cur}"))
}
# Register the completion function for `grst`
complete -F _grst_completion grst
# this alias to push changes on current repo to remote repo
alias gpsh="gpsh"
# this function for gpsh alias
function gpsh(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [ "$has_remote" ]; then
local repo_url=$(git config --get remote.origin.url)
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
else
local repo_name=$(basename "$(git rev-parse --show-toplevel)")
fi
if [[ "$is_a_git_repo" == "true" ]]; then
local current_branch=$(git branch | awk '/\*/ {print $2}');
# check if it has a remote to push
if [ "$has_remote" ]; then
git push origin $current_branch;
else
echo "${BOLD} The local repo ${LIGHT_BLUE}$repo_name ${WHITE}has ${RED}no remote";
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to pull changes from remote repo
alias gpl="gpl"
# this function for gpsh alias
function gpl(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [ "$has_remote" ]; then
local repo_url=$(git config --get remote.origin.url)
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
else
local repo_name=$(basename "$(git rev-parse --show-toplevel)")
fi
if [[ "$is_a_git_repo" == "true" ]]; then
local current_branch=$(git branch | awk '/\*/ {print $2}');
if [ "$has_remote" ]; then
local is_remote_branch=$(git branch -r | grep "origin/$current_branch")
# check if the current branch has remote
if [ -n "$is_remote_branch" ]; then
git pull origin $current_branch;
else
echo "${BOLD} ■■▶ The remote repo ${LIGHT_BLUE}$repo_name ${WHITE}has no branch named ${GREEN}$current_branch ${WHITE}!" && br;
fi
else
echo "${BOLD} The local repo ${LIGHT_BLUE}$repo_name ${WHITE}has ${RED}no remote";
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to view git status
alias gst="gst"
# this function for gst alias
function gst(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
git status -s
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to view git diff
alias gdf="gdf"
# this function for gdf alias
function gdf(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
git diff
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to view the git log commits number
alias glc="glc"
# this function for glc alias
function glc(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
local has_commits=$(git log > /dev/null 2>&1 && echo "true" || echo "false")
if [[ "$has_commits" == "true" ]]; then
local repo_name=$(basename "$(git rev-parse --show-toplevel)")
local current_branch=$(git branch | awk '/\*/ {print $2}');
local commits_num=$(git log --oneline | wc -l);
local commit_text;
local last_commit=$(git log --format="%H" -n 1);
local last_commit_message=$(git show --format=%B -s "$last_commit" | head -n 1);
local last_commit_author=$(git log --format='%an' -n 1)
local current_user=$(git config user.name)
local commits_done_today=$(git log --oneline --since="$(date +"%Y-%m-%d 00:00:00")" --author="$current_user" | wc -l)
local commits_contrib_today=$(git log --oneline --since="$(date +"%Y-%m-%d 00:00:00")" --author="$last_commit_author" | wc -l)
[[ $commits_num -le 1 ]] && commit_text="commit" || commit_text="commits";
[[ $commits_done_today -le 1 ]] && commit_done_text="commit" || commit_done_text="commits";
[[ $commits_contrib_today -le 1 ]] && commit_contrib_text="commit" || commit_contrib_text="commits";
[[ $commits_done_today -gt 0 ]] &&
commit_done="${WHITE}Including ${LIGHT_BLUE}$commits_done_today $commit_done_text ${WHITE}by ${GREEN}$current_user ${WHITE}today" ||
commit_done="${WHITE}Including ${LIGHT_BLUE}$commits_contrib_today $commit_contrib_text ${WHITE}by ${GREEN}$last_commit_author ${WHITE}today"
if [[ "$1" == "show" ]]; then
git log --oneline --no-decorate;
else
echo "${BOLD}${LIGHT_BLUE} $repo_name ${WHITE}has ${LIGHT_BLUE}$commits_num $commit_text ";
echo " $commit_done";
echo "${BOLD}${WHITE} Last Commit on ${GREEN}$current_branch ${WHITE}: $last_commit_message";
br;
fi
else
echo "${BOLD} ■■▶ Sorry, no commits yet inside this repo !" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# Completion function for glc
_glc_completion() {
local cur prev
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ ${COMP_CWORD} -eq 1 ]]; then
# Only suggest 'show' if no argument is provided
COMPREPLY=($(compgen -W "show" -- "$cur"))
else
# If there are additional arguments, clear completions
COMPREPLY=()
fi
}
# Register the completion function for ghv
complete -F _glc_completion glc
# this alias to merge branches
alias gmb="gmb"
# this function for gmb alias
function gmb(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
local current_branch=$(git branch | awk '/\*/ {print $2}');
if [[ $# -eq 1 ]]; then
# check if the branch doesn't exist
if ! git rev-parse --verify "$1" >/dev/null 2>&1; then
echo "${BOLD} ■■▶ Fatal ! $1 is a Non Existing branch " && br;
else
if [[ "$current_branch" == "$1" ]]; then
echo "${BOLD} ■■▶ Fatal ! Cannot Merge Identical Branch " && br;
else
git merge "$1";
fi
fi
elif [[ $# -eq 0 ]]; then
echo "${BOLD} ■■▶ Fatal ! Specify the Branch to merge to $current_branch" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# Register the completion function for `gmb`
complete -F branch_auto_complete gmb
#######################################################################
GitHub CLI Aliases
### GitHub CLI Aliases
# this function to sanitize the repository name
function clean_repo() {
local repo_name="$1"
# Replace any characters that are
# not alphanumeric or hyphen with hyphen
local repo_pattern='s/[^a-zA-Z0-9-]+/_/g'
local clean_name="$(echo "$repo_name" | sed -E "$repo_pattern")"
echo "$clean_name"
}
# this alias to create a new github repository using github cli
alias ghc="ghc"
# this function for ghc alias
# SOLVED: 05-11-2024 23:28
# use shift to assign the argument
# after the first one to be the
# condition of is Private
function ghc() {
if [[ $# -eq 0 ]]; then
local repo="$(basename "$PWD")"
elif [[ $# -eq 1 ]]; then
if [[ $1 != "private" ]]; then
local repo="$1"
elif [[ $1 -eq "private" ]]; then
local repo="$(basename "$PWD")"
local isPrivate="$1"
fi
elif [[ $# -gt 1 ]]; then
local repo="$1"
shift
local isPrivate="$1"
fi
local repo_name="$(clean_repo "$repo")"
local repo_visibility=$([[ $isPrivate == "private" ]] && echo "private" || echo "public")
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
local has_remote=$(git remote -v)
if [ "$has_remote" ]; then
echo "${BOLD} ■■▶ This repo has already a remote on GitHub !" && br;
else
local current_user=$(awk '/user:/ {print $2; exit}' ~/.config/gh/hosts.yml)
function check_set_repo(){
echo -ne "${BOLD}${WHITE} Create ${GREEN}$repo_visibility ${WHITE}repo ${LIGHT_BLUE}$repo_name ${WHITE}? (y/n) ";
read set_repo
if [ "$set_repo" = "y" ]; then
# create the repo & set it as remote of the local one
echo -ne "${BOLD} New repository ${LIGHT_BLUE}$repo_name ${WHITE}on GitHub ... "
gh repo create "$repo_name" --$repo_visibility &>/dev/null;
git remote add origin "[email protected]:$current_user/$repo_name.git";
echo "${BOLD}${GREEN} ${WHITE}"
function check_push(){
echo -ne "${BOLD}${WHITE} Push local commits to ${LIGHT_BLUE}$repo_name ${WHITE}? (y/n) ";
read check_push_commit
if [ "$check_push_commit" = "y" ]; then
local current_branch=$(git branch | awk '/\*/ {print $2}');
git push origin $current_branch;
elif [ "$check_push_commit" = "n" ];then
return 0
else
check_push
fi
}
local current_branch=$(git branch | awk '/\*/ {print $2}');
if git rev-list --count "$current_branch" 2>/dev/null | grep -q '^[1-9]'; then
check_push
fi
elif [ "$set_repo" = "n" ];then
return 0;
else
check_set_repo
fi
}
check_set_repo
fi
else
function check_create_repo(){
echo -ne "${BOLD}${WHITE} Create ${GREEN}$repo_visibility ${WHITE}repo ${LIGHT_BLUE}$repo_name ${WHITE}? (y/n) ";
read create_repo
if [ "$create_repo" = "y" ]; then
# create the repo & clone it locally
echo -ne "${BOLD} New repository ${LIGHT_BLUE}$repo_name ${WHITE}on GitHub ... "
gh repo create "$repo_name" --$repo_visibility -c &>/dev/null;
mv "$repo_name/.git" . && rm -rf "$repo_name";
echo "${BOLD}${GREEN} ${WHITE}"
elif [ "$create_repo" = "n" ];then
function check_local(){
echo -ne "${BOLD}${WHITE} Create ${GREEN}local ${WHITE}repo ${LIGHT_BLUE}$repo_name ${WHITE}? (y/n) ";
read create_local
echo ${RESET}
if [ "$create_local" = "y" ]; then
git init &>/dev/null
elif [ "$create_local" = "n" ];then
return 0
else
check_local
fi
}
check_local
else
check_create_repo
fi
}
check_create_repo
fi
}
# this alias to delete a github repo via Github CLI
alias ghd="ghd"
# this function for ghd alias
# IMPROVED : 09-11-2024 16:13
# Added has_remote check
function ghd(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
local has_remote=$(git remote -v)
if [ "$has_remote" ]; then
local repo_url=$(git config --get remote.origin.url)
local current_user=$(awk '/user:/ {print $2; exit}' ~/.config/gh/hosts.yml)
local repo_owner=$(echo "$repo_url" | awk -F '[/:]' '{print $(NF-1)}')
if [[ "$repo_owner" != "$current_user" ]]; then
echo "${BOLD} ■■▶ Sorry, you are not the owner of this repo !" && br;
else
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
local isPrivate=$(gh repo view $repo_name --json isPrivate --jq '.isPrivate')
local repo_visibility=$([[ $isPrivate == "true" ]] && echo "private" || echo "public")
function check_delete_local_repo(){
echo -ne "${BOLD}${WHITE} Delete ${GREEN}local ${WHITE}repo ${LIGHT_BLUE}$repo_name ${WHITE}? (y/n) ";
read delete_local_repo
if [ "$delete_local_repo" = "y" ]; then
local repo_source=$(git rev-parse --show-toplevel)
# delete the repo
echo -ne "${BOLD} Deleting ${GREEN}local ${WHITE}repo ${LIGHT_BLUE}$repo_name ${WHITE}... ";
rm -rf $repo_source/.git;
echo "${BOLD}${GREEN} ${WHITE}";
elif [ "$delete_local_repo" = "n" ];then
return 0
else
check_delete_local_repo
fi
}
function check_delete_repo(){
echo -ne "${BOLD}${WHITE} Delete ${GREEN}$repo_visibility ${WHITE}repo ${LIGHT_BLUE}$repo_name ${WHITE}? (y/n) ";
read delete_repo
if [ "$delete_repo" = "y" ]; then
# delete the repo
echo -ne "${BOLD} Deleting repository ${LIGHT_BLUE}$repo_name ${WHITE}on GitHub ... ";
gh repo delete "$repo_name" --yes &>/dev/null;
# remove the remote since we already
# deleted it in GitHub
git remote remove origin
echo "${BOLD}${GREEN} ${WHITE}";
echo -e;
check_delete_local_repo
elif [ "$delete_repo" = "n" ];then
return 0
else
check_delete_repo
fi
}
check_delete_repo
fi
else
local repo_name=$(basename "$(git rev-parse --show-toplevel)")
function check_delete_local_repo(){
echo -ne "${BOLD}${WHITE} Delete ${GREEN}local ${WHITE}repo ${LIGHT_BLUE}$repo_name ${WHITE}? (y/n) ";
read delete_local_repo
if [ "$delete_local_repo" = "y" ]; then
local repo_source=$(git rev-parse --show-toplevel)
# delete the repo
echo -ne "${BOLD} Deleting ${GREEN}local repo ${LIGHT_BLUE}$repo_name ${WHITE}... ";
rm -rf $repo_source/.git;
echo "${BOLD}${GREEN} ${WHITE}";
elif [ "$delete_local_repo" = "n" ];then
return 0
else
check_delete_local_repo
fi
}
check_delete_local_repo
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this function to autocomplete
# the branches of gbd alias
function branch_delete_auto_complete(){
local cur branches
# Get the current word being completed
cur="${COMP_WORDS[COMP_CWORD]}"
# Get the list of branches from `git branch`
branches=$(git branch --format '%(refname:short)')
# Generate completions
COMPREPLY=($(compgen -W "${branches}" -- "${cur}"))
}
# this alias to delete a branch
alias gbd="gbd"
# this function for gbd alias
function gbd() {
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [[ "$is_a_git_repo" == "true" ]]; then
local current_branch=$(git branch | awk '/\*/ {print $2}');
local default_branch=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
if [[ -z "$default_branch" ]]; then
default_branch=$(git config --get init.defaultBranch)
fi
if [[ $# -eq 1 ]]; then
if [[ "$1" == "$default_branch" ]]; then
echo "${BOLD} ■■▶ Fatal ! Cannot Delete the Default Branch " && br;
elif ! git show-ref --verify --quiet "refs/heads/$1" &>/dev/null; then
echo "${BOLD} ■■▶ Fatal ! Branch ${GREEN}$1 ${WHITE}doesn't exist ${RESET}" && br;
else
# this to check if we want to delete the remote branch too
function check_delete_remote_branch() {
if [[ "$current_branch" == "$default_branch" ]]; then
echo "${BOLD} ■■▶ Fatal ! Cannot Delete the Default Branch " && br;
else
echo -ne "${BOLD}${WHITE}Delete remote branch${GREEN} "$current_branch"${WHITE} ? (y/n) ${RESET}";
read delete_remote_branch
echo ${RESET}
if [ "$delete_remote_branch" = "y" ]; then
git push origin --delete "$current_branch";
elif [ "$delete_remote_branch" = "n" ];then
return 0
else
check_delete_remote_branch
fi
fi
}
function check_delete_branch() {
local branch_name="$1"
echo -ne "${BOLD}${WHITE}Delete branch${GREEN} "$branch_name"${WHITE} ? (y/n) ${RESET}";
read delete_branch
if [ "$delete_branch" = "y" ]; then
if [[ "$current_branch" != "$default_branch" ]]; then
git checkout $default_branch &>/dev/null;
fi
if [ "$has_remote" ]; then
local is_remote_branch=$(git branch -r | grep "origin/$1")
if [ -n "$is_remote_branch" ]; then
check_delete_remote_branch
fi
fi
git branch -D "$1";
elif [ "$delete_branch" = "n" ]; then
return 0;
else
check_delete_branch $branch_name
fi
}
check_delete_branch $1
fi
elif [[ $# -eq 0 ]]; then
if [[ "$current_branch" == "$default_branch" ]]; then
echo "${BOLD} ■■▶ Fatal ! Cannot Delete the Default Branch " && br;
else
function check_delete_branch() {
echo -ne "${BOLD}${WHITE}Delete branch${GREEN} "$current_branch"${WHITE} ? (y/n) ${RESET}";
read delete_branch
if [ "$delete_branch" = "y" ]; then
# TODO : Remote branch Deletion
function check_delete_remote_branch() {
if [[ "$current_branch" == "$default_branch" ]]; then
echo "${BOLD} ■■▶ Fatal ! Cannot Delete the Default Branch " && br;
else
echo -ne "${BOLD}${WHITE}Delete remote branch${GREEN} "$current_branch"${WHITE} ? (y/n) ${RESET}";
read delete_remote_branch
echo ${RESET}
if [ "$delete_remote_branch" = "y" ]; then
git push origin --delete "$current_branch";
elif [ "$delete_remote_branch" = "n" ];then
return 0
else
check_delete_remote_branch
fi
fi
}
git checkout "$default_branch" &>/dev/null;
if [ "$has_remote" ]; then
local is_remote_branch=$(git branch -r | grep "origin/$current_branch")
if [ -n "$is_remote_branch" ]; then
check_delete_remote_branch
fi
fi
git branch -D "$current_branch";
elif [ "$delete_branch" = "n" ];then
return 0
else
check_delete_branch
fi
}
check_delete_branch
fi
else
echo "${BOLD} ■■▶ Usage : gbd branch_to_delete" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# Register the completion function for `gbd`
complete -F branch_delete_auto_complete gbd
# this alias to change repo visibility
alias ghv="ghv"
# this function for ghv alias
# IMPROVED : 06-06-2024 10:47
function ghv(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [[ "$is_a_git_repo" == "true" ]]; then
if [[ "$#" -eq 0 || "$1" == "show" || "$1" == "owner" ]]; then
local current_user=$(awk '/user:/ {print $2; exit}' ~/.config/gh/hosts.yml)
if [ "$has_remote" ]; then
local repo_url=$(git config --get remote.origin.url)
local repo_owner=$(echo "$repo_url" | awk -F '[/:]' '{print $(NF-1)}')
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
else
local repo_owner=$(git config user.username)
local repo_name=$(basename "$(git rev-parse --show-toplevel)")
fi
if [[ "$repo_owner" != "$current_user" && "$1" != "owner" ]]; then
echo "${BOLD} ■■▶ Sorry, you are not the owner of this repo !" && br;
elif [[ "$1" == "owner" ]]; then
if [ "$has_remote" ]; then
echo "${BOLD} The repo ${LIGHT_BLUE}$repo_name ${WHITE}is owned by ${GREEN}$repo_owner";
else
echo "${BOLD} The local repo ${LIGHT_BLUE}$repo_name ${WHITE}is owned by ${GREEN}$repo_owner";
fi
else
if [ "$has_remote" ]; then
local isPrivate=$(gh repo view $repo_name --json isPrivate --jq '.isPrivate')
if [[ "$1" == "show" ]]; then
local visibility=$([[ $isPrivate == "true" ]] && echo "private" || echo "public")
echo "${BOLD} This repo ${LIGHT_BLUE}$repo_name ${WHITE}is ${GREEN}$visibility";
else
local new_visibility=$([[ $isPrivate == "true" ]] && echo "public" || echo "private")
function toggle_visibility(){
echo -ne "${BOLD}${WHITE} Make ${LIGHT_BLUE}$repo_name ${WHITE}repo ${GREEN}$new_visibility ${WHITE}? (y/n) ";
read change_visibility
if [ "$change_visibility" = "y" ]; then
# toggle visibility
echo -ne "${BOLD} Changing repo visibility to ${GREEN}$new_visibility ${WHITE}... ";
gh repo edit "$repo_owner/$repo_name" --visibility "$new_visibility" &>/dev/null;
echo "${BOLD}${GREEN} ${WHITE}";
elif [ "$change_visibility" = "n" ];then
return 0
else
toggle_visibility
fi
}
toggle_visibility
fi
else
echo "${BOLD} The local repo ${LIGHT_BLUE}$repo_name ${WHITE}is owned by ${GREEN}$repo_owner";
fi
fi
else
echo "${BOLD} ■■▶ Sorry, wrong command argument !" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# Completion function for ghv
# 07-31-2024 00:30
_ghv_completion() {
local cur prev opts
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="show owner"
if [[ ${COMP_CWORD} -eq 1 ]]; then
# Complete the options
COMPREPLY=($(compgen -W "$opts" -- "$cur"))
else
# No further completion needed
COMPREPLY=()
fi
}
# Register the completion function for ghv
complete -F _ghv_completion ghv
#this alias to view all repos in the GitHub
alias ghls="gh repo list -L 1000"
# this function to check if a username exists on github
# INSPIRED FROM : https://gist.github.com/RitheeshBaradwaj/22eafb0c33acf42af4db000366343d63
# 06-04-2024 19:48
function is_a_github_user() {
username="$1"
# Check if username is empty
if [[ -z "$username" ]]; then
return 1
fi
# Build the API URL
url="https://api.github.com/users/$username"
# Use wget to capture the response (redirecting output to a variable)
# wget by default outputs content, so we use the -q (quiet) option to suppress it
# -O- option specifies that the downloaded content should be written
# to standard output (stdout) instead of a file.
response=$(wget -qO- --no-check-certificate "$url")
# Check if there is no output
# meaning it is not found
if [[ -z "$response" ]]; then
# Not Found
return 1
else
# Found
return 0
fi
}
# this alias to add collaborator to the repo
alias ghadd="ghadd"
# this function for ghadd alias
# INSPIRED FROM : https://github.com/cli/cli/issues/2807
# 06-04-2024 19:23
# Uses the github cli rest API
function ghadd(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [[ "$is_a_git_repo" == "true" ]]; then
if [ "$has_remote" ]; then
if [[ $# -eq 0 ]]; then
echo "${BOLD} ■■▶ Specify the username of the new collaborator !" && br;
elif [[ $# -gt 0 ]]; then
local current_user=$(awk '/user:/ {print $2; exit}' ~/.config/gh/hosts.yml)
local repo_url=$(git config --get remote.origin.url)
local repo_owner=$(echo "$repo_url" | awk -F '[/:]' '{print $(NF-1)}')
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
# check if we are not the owner of the repo
if [[ "$repo_owner" != "$current_user" ]]; then
echo "${BOLD} ■■▶ Sorry, you are not the owner of this repo !" && br;
else
# Loop through each collaborator username provided as an argument
for collaborator in "$@"; do
echo -ne "${BOLD} Inviting ${LIGHT_BLUE}$collaborator ${WHITE}to collaborate on ${LIGHT_BLUE}$repo_name${WHITE} "
# Check if the collaborator exists on GitHub
if is_a_github_user "$collaborator"; then
# Add collaborator using gh api
gh api --method=PUT "repos/$current_user/$repo_name/collaborators/$collaborator" &>/dev/null
echo "${BOLD}${GREEN} ${WHITE}"
else
echo "${BOLD}${RED}✘ ${WHITE}"
fi
done
fi
fi
else
echo "${BOLD} ■■▶ This repo has no remote on GitHub !" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# this alias to delete a contributor
alias ghdel="ghdel"
# this function for ghdel alias
# IMPROVED : 06-04-2024 23:52
# Derived from ghadd
function ghdel(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [[ "$is_a_git_repo" == "true" ]]; then
if [ "$has_remote" ]; then
if [[ $# -eq 0 ]]; then
echo "${BOLD} ■■▶ Specify the username of the collaborator to remove !" && br;
elif [[ $# -gt 0 ]]; then
local current_user=$(awk '/user:/ {print $2; exit}' ~/.config/gh/hosts.yml)
local repo_url=$(git config --get remote.origin.url)
local repo_owner=$(echo "$repo_url" | awk -F '[/:]' '{print $(NF-1)}')
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
# check if we are not the owner of the repo
if [[ "$repo_owner" != "$current_user" ]]; then
echo "${BOLD} ■■▶ Sorry, you are not the owner of this repo !" && br;
else
# Retrieve the list of collaborators
local collaborators=$(gh api "repos/$current_user/$repo_name/collaborators" --jq '.[].login')
local invitations=$(gh api "repos/$current_user/$repo_name/invitations" --jq '.[].invitee.login')
# Loop through each collaborator username provided as an argument
for collaborator in "$@"; do
# Check if the collaborator exists in the list of collaborators
if echo "$collaborators" | grep -q "$collaborator" ||
echo "$invitations" | grep -q "$collaborator"; then
echo -ne "${BOLD} Removing ${LIGHT_BLUE}$collaborator ${WHITE}from ${LIGHT_BLUE}$repo_name${WHITE} "
# Check for pending invitations
local invitation_id=$(gh api "repos/$current_user/$repo_name/invitations" --jq ".[] | select(.invitee.login==\"$collaborator\") | .id")
if [[ -n "$invitation_id" ]]; then
# Delete the pending invitation
gh api --method=DELETE "repos/$current_user/$repo_name/invitations/$invitation_id" &>/dev/null
echo -ne " ${BOLD}(invitation deleted) "
fi
# Remove collaborator using gh api
gh api --method=DELETE "repos/$current_user/$repo_name/collaborators/$collaborator" &>/dev/null
echo "${BOLD}${GREEN} ${WHITE}"
else
echo "${BOLD}${LIGHT_BLUE}$collaborator ${WHITE}is not a ${LIGHT_BLUE}collaborator ${RED}✘ ${WHITE}"
fi
done
fi
fi
else
echo "${BOLD} ■■▶ This repo has no remote on Github !" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
# Completion function for ghdel
_ghdel_completion() {
local cur prev opts
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
if [[ ${COMP_CWORD} -eq 1 ]]; then
# Ensure we are in a git repository
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
if [[ "$is_a_git_repo" == "true" ]]; then
local current_user=$(awk '/user:/ {print $2; exit}' ~/.config/gh/hosts.yml)
local repo_url=$(git config --get remote.origin.url)
local repo_owner=$(echo "$repo_url" | awk -F '[/:]' '{print $(NF-1)}')
local repo_name="$(basename "$repo_url" .git)"
# Fetch collaborators and invitees
local collaborators=$(gh api "repos/$repo_owner/$repo_name/collaborators" --jq '.[].login')
local invitations=$(gh api "repos/$repo_owner/$repo_name/invitations" --jq '.[].invitee.login')
# Combine collaborators and invitees into a single list
local all_users=$(echo "$collaborators" "$invitations" | tr ' ' '\n' | sort | uniq)
# Provide completion suggestions
COMPREPLY=($(compgen -W "$all_users" -- "$cur"))
else
echo "Not inside a git repository."
fi
else
COMPREPLY=()
fi
}
# Register the completion function for ghdel
# complete -F _ghdel_completion ghdel
# this alias to list all collaborators
alias ghcls="ghcls"
# this function for ghcls alias
# IMPROVED : 06-04-2024 23:52
# Derived from ghadd
function ghcls(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local has_remote=$(git remote -v)
if [[ "$is_a_git_repo" == "true" ]]; then
if [ "$has_remote" ]; then
local current_user=$(awk '/user:/ {print $2; exit}' ~/.config/gh/hosts.yml)
local repo_url=$(git config --get remote.origin.url)
local repo_owner=$(echo "$repo_url" | awk -F '[/:]' '{print $(NF-1)}')
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
# check if we are not the owner of the repo
if [[ "$repo_owner" != "$current_user" ]]; then
echo "${BOLD} ■■▶ Sorry, you are not the owner of this repo !" && br;
else
echo -ne "${BOLD} ${LIGHT_BLUE}Collaborators ${WHITE}for the ${LIGHT_BLUE}$repo_name ${WHITE}repository "
# List collaborators using gh api
local collaborators=$(gh api "repos/$current_user/$repo_name/collaborators" --jq '.[].login')
local invitations=$(gh api "repos/$current_user/$repo_name/invitations" --jq '.[].invitee.login')
local collaborators_count=$(echo "$collaborators" | wc -l)
local invitations_count=$(echo "$invitations" | wc -l)
local collaborators_num=$((collaborators_count + invitations_count))
echo "${WHITE}${BOLD}($collaborators_count)"
# Iterate through each collaborator
if [[ -n "$collaborators" ]]; then
while IFS= read -r collaborator; do
if [[ "$collaborator" == "$current_user" ]]; then
echo " ● $collaborator (owner)"
else
echo " ● $collaborator"
fi
done <<< "$collaborators"
else
echo "No collaborators found."
fi
# Check if there are pending invitations
if [[ -n "$invitations" ]]; then
# Print pending invitations
while IFS= read -r invitee; do
echo " ● $invitee (invitation pending)"
done <<< "$invitations"
fi
fi
else
echo "${BOLD} ■■▶ This repo has no remote on GitHub !" && br;
fi
else
echo "${BOLD} ■■▶ This won't work, you are not in a git repo !" && br;
fi
}
#######################################################################
Services Aliases
### Services Aliases
# this alias to start services
alias svc_on="allow_sudo && svc_on"
# this function for svc_on alias
function svc_on(){
sudo service "$1" start;
}
# this alias to stop systemctl based services
alias svc_off="allow_sudo && svc_off"
# this function for svc_off alias
function svc_off(){
sudo service "$1" stop;
}
# this alias to view systemctl
# based services status
alias svc_stat="allow_sudo && svc_stat"
# this function for svc_stat alias
function svc_stat(){
sudo service "$1" status;
}
# this alias to show if a service if on or off
alias svc_show_stat="allow_sudo && svc_show_stat"
# this function for svc_show_stat alias
function svc_show_stat(){
br;
local service_name="$1";
local check_command="$2";
if [[ "$check_command" == *"Active: active"* ]]; then
echo "${BOLD}$service_name Active [${GREEN}✓${WHITE}]";
elif [[ "$check_command" =~ ^[0-9]+$ ]]; then
echo "${BOLD}$service_name Active [${GREEN}✓${WHITE}]";
else
echo "${BOLD}$service_name Off [${RED}x${WHITE}]";
fi
br;
}
# this alias to view the ssh server status
alias sth="sth"
# this function for sth alias
function sth(){
c && br;
if [[ $(pgrep sshd) ]]; then
c && br;
echo "${BOLD}Ssh Server Active [${GREEN}✓${WHITE}]"
br;
local is_wsl=$(grep -qi microsoft /proc/version && echo true || echo false)
if $is_wsl; then
local wifi_iface="wifi0"
else
# at least it is on kali linux
local wifi_iface="wlan0"
fi
local wifi_ip=$(ifconfig $wifi_iface | grep inet | awk '{print $2}');
# echo " Connect Via ==> ssh $USER@$ip";
# check_ngrok="cmd.exe /c 'tasklist | findstr /I "ngrok"'"
echo "Ssh Connection via $wifi_iface Interface";
echo "${BOLD}${WHITE}==> ssh $USER@$wifi_ip";
else
echo "${BOLD}Ssh Server Off [${RED}x${WHITE}]"
fi
}
# this alias to enable the ssh server
alias sshon="allow_sudo && sshon"
# this function for sshon alias
function sshon(){
local is_wsl=$(grep -qi microsoft /proc/version && echo true || echo false)
if $is_wsl; then
sudo /etc/init.d/ssh start &>/dev/null;
else
svc_on ssh;
fi
sth;
}
# this alias to kill the ssh server process
alias sshoff="allow_sudo && sshoff"
# this function for sshoff alias
function sshoff(){
# sudo /etc/init.d/ssh stop;
if [[ $(pgrep sshd) ]]; then
sudo kill $(pgrep sshd);
fi
sth;
}
# this function to view the current apache2
# service, its status
function stap(){
c && br;
if [[ $(pgrep apache2) ]]; then
echo "${BOLD}Apache Server Active [${GREEN}✓${WHITE}]"
br;
local eth_iface="eth0"
if $is_wsl; then
local wifi_iface="wifi0"
else
# at least it is on kali linux
local wifi_iface="wlan0"
fi
local loopback_iface="lo"
local wlan_ip=$(ifconfig $wifi_iface | grep "inet " | awk '{print $2}');
local loopback_ip=$(ifconfig $loopback_iface | grep "inet " | awk '{print $2}');
echo "$wifi_iface Interface Connection (Public) : ${BRIGHT_BLUE}http://$wlan_ip${WHITE}";
echo "$loopback_iface Interface Connection (Private) : ${BRIGHT_BLUE}http://$loopback_ip ${WHITE}";
br;
else
echo "${BOLD}Apache Server Off [${RED}x${WHITE}]"
br
fi
}
# this alias to start the apache2 service
alias apon="allow_sudo && apon"
# this function for apch alias
function apon(){
cd /var/www/html;
c && br;
echo "${BOLD}[${GREEN}+${WHITE}]${WHITE} Starting Apache Server ..."; br;
sudo service apache2 start &>/dev/null;
stap;
}
# this alias to stop the apache2 service
alias apoff="allow_sudo && apoff"
# this function for apch alias
function apoff(){
sudo service apache2 stop;
stap;
}
# this alias to open the
# Apache2 server directory
alias apd="apd"
# this function for apd alias
function apd(){
op /var/www/html
}
# this alias to start the sql service
alias sqlon="allow_sudo && sqlon"
# this function for sqlon alias
function sqlon(){
sudo service mariadb start;
sqls;
}
# this alias to stop the sql service
alias sqloff="allow_sudo && sqloff"
# this function for sqloff alias
function sqloff(){
sudo service mariadb stop;
sqls;
}
# this alias to view the sql service
alias sqls="allow_sudo && sqls"
# this function for sqloff alias
function sqls(){
c && br;
if [[ $(pgrep mariadb) ]]; then
echo "${BOLD}MySQL Server Active [${GREEN}✓${WHITE}]"
else
echo "${BOLD}MySQL Server Down [${RED}x${WHITE}]"
fi
}
# this alias to start the postgresql service
alias psqlon="allow_sudo && psqlon"
# this function for sqlon alias
function psqlon(){
if [[ $(pgrep postgres) ]]; then
sudo -u postgres psql;
else
c && br;
echo "${BOLD}${WHITE}[${GREEN}+${WHITE}] Starting ${WHITE}PostgreSQL Server ...";
sudo service postgresql start &>/dev/null;
c && br;
echo "${BOLD}PostgreSQL Server Active [${GREEN}✓${WHITE}]";
br;
function check_postgres_shell(){
echo -ne "${BOLD}${WHITE}Access PostgreSQL${GREEN} Shell${WHITE} ? (y/n) ";
read postgres_shell
if [ "$postgres_shell" = "y" ]; then
clear;
sudo su - postgres;
elif [ "$postgres_shell" = "n" ];then
return 1
else
check_postgres_shell
fi
}
check_postgres_shell
fi
return 0
}
# this alias to stop the postgresql service
alias psqloff="allow_sudo && psqloff"
# this function for sqloff alias
function psqloff(){
c && br;
echo "${BOLD}${WHITE}[${RED}x${WHITE}] Stopping ${WHITE}PostgreSQL Server ...";
sudo service postgresql stop &>/dev/null;
psqls;
}
# this alias to view the postgresql service
alias psqls="allow_sudo && psqls"
# this function for psqls alias
function psqls(){
c && br;
if [[ $(pgrep postgres) ]]; then
echo "${BOLD}PostgreSQL Server Active [${GREEN}✓${WHITE}]";
else
echo "${BOLD}PostgreSQL Server Off [${RED}x${WHITE}]";
fi
br;
}
# this alias to start the web servers
alias webon="allow_sudo && webon"
# this function for webon alias
function webon(){
c && br;
echo "${BOLD}${WHITE} Starting Web Servers"; br;
# Apache Server
echo -ne "${BOLD}${WHITE} ==> Starting ${GREEN}Apache ${WHITE}Server ..."
sudo service apache2 start &>/dev/null;
echo -e "[${GREEN}✓${WHITE}]";
# MySQL Server
echo -ne "${BOLD} ==> Starting ${GREEN}MySQL ${WHITE} Server ..."
sudo service mariadb start &>/dev/null;
echo -e "[${GREEN}✓${WHITE}]";
# Postfix Server
echo -ne "${BOLD} ==> Starting ${GREEN}Mail ${WHITE} Server ..."
sudo service postfix start &>/dev/null;
echo -e "[${GREEN}✓${WHITE}]";
# Status
br;
local eth_iface="eth0"
local is_wsl=$(grep -qi microsoft /proc/version && echo true || echo false)
if $is_wsl; then
local wifi_iface="wifi0"
else
# at least it is on kali linux
local wifi_iface="wlan0"
fi
local loopback_iface="lo"
local wlan_ip=$(ifconfig $wifi_iface | grep "inet " | awk '{print $2}');
local loopback_ip=$(ifconfig $loopback_iface | grep "inet " | awk '{print $2}');
echo "${BOLD} Access the Server"; br;
echo " ==> WAN : ${BRIGHT_BLUE}http://$wlan_ip${WHITE}";
echo " ==> LAN : ${BRIGHT_BLUE}http://$loopback_ip ${WHITE}";
br;
}
# this alias to stop the web servers
alias weboff="allow_sudo && weboff"
# this function for weboff alias
function weboff(){
c && br;
echo "${BOLD}${WHITE} Stopping Web Servers"; br;
# Apache Server
echo -ne "${BOLD}${WHITE} ==> Stopping ${RED}Apache ${WHITE}Server ..."
sudo service apache2 stop &>/dev/null;
echo -e "[${RED}x${WHITE}]";
# MySQL Server
echo -ne "${BOLD} ==> Stopping ${RED}MySQL ${WHITE} Server ..."
sudo service mariadb stop &>/dev/null;
echo -e "[${RED}x${WHITE}]";
# Postfix Server
echo -ne "${BOLD} ==> Stopping ${RED}Mail ${WHITE} Server ..."
sudo service postfix stop &>/dev/null;
echo -e "[${RED}x${WHITE}]";
# Status
br;
}
# this alias to view the web servers status
alias webs="allow_sudo && webs"
# this function for webs alias
function webs(){
c && br;
echo "${BOLD} Web Servers Status"; br;
function check_web(){
local server_name="$1";
local app_service="$2";
local color;
local sign;
if sudo service $app_service status &>/dev/null; then
color="${GREEN}";
sign="✓";
else
color="${RED}";
sign="x";
fi
echo "${BOLD} ==> $server_name Server $color$switch${WHITE}... [$color$sign${WHITE}]";
}
# Check apache server
check_web "Apache" apache2
check_web "MySQL " mariadb
check_web "Mail " postfix
if sudo service apache2 status &>/dev/null; then
br;
local eth_iface="eth0"
local is_wsl=$(grep -qi microsoft /proc/version && echo true || echo false)
if $is_wsl; then
local wifi_iface="wifi0"
else
# at least it is on kali linux
local wifi_iface="wlan0"
fi
local loopback_iface="lo"
local wlan_ip=$(ifconfig $wifi_iface | grep "inet " | awk '{print $2}');
local loopback_ip=$(ifconfig $loopback_iface | grep "inet " | awk '{print $2}');
echo "${BOLD} Access the Server"; br;
echo " ==> WAN : ${BRIGHT_BLUE}http://$wlan_ip${WHITE}";
echo " ==> LAN : ${BRIGHT_BLUE}http://$loopback_ip ${WHITE}";
br;
fi
}
# this alias to start the sql cli
alias rdb="allow_sudo && rdb"
# this function for rdb alias
function rdb(){
if ! pgrep mariadb > /dev/null; then
sudo service mariadb start &>/dev/null
fi
c && br
local user=${1:-root}
echo "${BOLD}MySQL Server Active [${GREEN}✓${WHITE}]"
echo "${BOLD}User : $user"
local is_root='[[ "$user" == "root" ]]';
local flag=$(eval "$is_root" && echo "" || echo "-p");
sudo mysql -u $user $flag;
br
function check_mysql_server(){
echo -ne "${BOLD}${WHITE}[${GREEN}?${WHITE}]${WHITE} ${GREEN}Stop ${WHITE}MySQL Server ? (y/n) ";
read server
if [ "$server" = "y" ]; then
# echo -ne " ${WHITE}[${GREEN}+${WHITE}]${WHITE} Stopping ${GREEN}MySQL ${WHITE}Server ";
echo "${BOLD}${WHITE}[${GREEN}+${WHITE}]${WHITE} Stopping MySQL Server ... "
sudo service mariadb stop &>/dev/null
echo "${BOLD}${WHITE}[${GREEN}+${WHITE}]${WHITE} MySQL Server Stopped ... ${GREEN}✓"
elif [ "$server" = "n" ];then
echo "${BOLD}${WHITE}[${GREEN}+${WHITE}]${WHITE} Keeping ${GREEN}MySQL ${WHITE}Server ${GREEN}On";
else
check_mysql_server
fi
}
check_mysql_server
}
# this alias to start the sql cli
alias rdbp="rdbp"
# this function for rdbp alias
function rdbp(){
clear && br 2 && sudo clear;
sudo systemctl start psql;
sudo mysql -u root;
sudo systemctl stop psql;
}
# this alias to check sendmail process
alias mails="allow_sudo && mails"
# this function for mails alias
function mails(){
c && br;
if sudo service postfix status &>/dev/null; then
echo "${BOLD}Mail Server Active [${GREEN}✓${WHITE}]"
else
echo "${BOLD}Mail Server Down [${RED}x${WHITE}]"
fi
}
# this alias to start sendmail service
alias mailon="allow_sudo && mailon"
# this function for mailon alias
function mailon(){
sudo service postfix start
mails
}
# this alias to stop sendmail service
alias mailoff="allow_sudo && mailoff"
# this function for mailon alias
function mailoff(){
sudo service postfix stop
mails
}
# this alias to check snmp service
alias snmps="snmps"
# this function for snmps alias
function snmps(){
local name="SNMP Server";
local cmd="$(pgrep snmpd)";
svc_show_stat $name $cmd;
}
# this function to start snmpd service
alias snmpon="snmpon"
# this function for snmpon alias
function snmpon(){
svc_on snmpd;
snmps;
}
# this alias to stop the snmp service
alias snmpoff="snmpoff"
# this function for snmpoff alias
function snmpoff(){
svc_off snmpd;
snmps;
}
#######################################################################
File Aliases
### File Aliases
# this alias to create a file
alias tf="tf"
# this function for tf alias
function tf(){
touch "$@" && all "$@" && cv;
}
# this alias to delete file
alias dlf="dlf"
# this function for dlf alias
function dlf(){
rm "$@" && cv;
}
# this alias to copy a file then display it
alias cpf="cpf"
# this function for cpf alias
function cpf(){
if [[ $# -eq 2 ]]; then
if [[ -d "$1" ]]; then #here to check if the first argument is a directory
cp -r "$1" "$2" && op "$2" && all "$1";
else
cp "$1" "$2" && op "$2" && all "$1";
fi
elif [[ $# -eq 1 ]]; then
if [[ -d "$1" ]]; then #here to check if the first argument is a directory
cp -r "$1" "$dest" && op "$dest" && all "$1";
else
cp "$@" "$dest" && op "$dest" && all "$@";
fi
fi
}
# this alias to copy the content of a file
alias cnf="cnf"
# this function for cnf alias
function cnf(){
cat "$1" > "$2" && dlf "$1" && all "$2";
}
# this alias to copy a file then display it
alias mvf="mvf"
# this function for cpf alias
function mvf(){
if [[ $# -eq 2 ]]; then
mv "$1" "$2" && op "$2";
elif [[ $# -eq 1 ]]; then
mv $@ $dest && op $dest;
# if there is only one argument,
# it will move the file / directory
# to the the variable
# dest defined in dt alias
fi
}
# this alias to force delete
alias rdf="allow_sudo && rdf"
# this function for rdf alias
function rdf(){
sudo rm -rfv "$@";
cv;
}
# this alias to count the number of file/directory
# inside a directory
alias dc="dc"
#this function for dc alias
function dc(){
if [[ $# -eq 0 ]]; then
clear;
br;
case "$(ls -1 | wc -l)" in
0)
br;
echo "There is nothing inside $(basename $PWD)";
br;;
*)
case "$(ls -1 | wc -l)" in
1)it="item";;
*)it="items";;
esac
echo " $(basename $PWD) folder has $(ls -1 | wc -l) $it : ";
br;
if [[ $(ls -1 | wc -l) -gt 50 ]]; then
br;
else
ls
fi
br;
esac
elif [[ $# -eq 1 ]]; then
clear;
br;
case "$(ls -1 $1 | wc -l)" in
0)
br;
echo "There is nothing inside $(basename $1)";
br;
sleep 1;
cv;
br;;
*)
case "$(ls -1 $1 | wc -l)" in
1)it="item";;
*)it="items";;
esac
echo " $(basename $1) folder has $(ls -1 $1 | wc -l) $it : ";
br;
if [[ $(ls -1 "$1" | wc -l) -gt 50 ]]; then
br;
else
ls "$1";
fi
br;
sleep 1;
cv;
esac
fi
}
# this alias to know the file type
alias tp="tp"
# this function for tp alias
function tp(){
type=$(ls -ld "$1" | cut -c1)
case $type in
-) echo "File" ;;
d) echo "Directory" ;;
b) echo "Block" ;;
l) echo "Sym-Link" ;;
c) echo "Character" ;;
*) echo "Other" ;;
esac
}
#######################################################################
Explorer Alias
### Explorer Alias
# this alias to open the current
# directory inside windows explorer
# or bu the default explorer on Linux
alias exop="exop"
# this function for exop alias
function exop() {
[ $# -eq 1 ] && cd "$1"
# check WSL
local is_wsl=$(
grep -qi microsoft /proc/version && echo true || echo false
)
if $is_wsl; then
explorer.exe .
else
xdg-open .
fi
cv
}
#######################################################################
Custom command not found
### Custom command not found
# Printing command not found when it is the case
command_not_found_handler() {
local command=$1
local command_found=0
# Check if the command is found in the .zshrc file
if grep -q -E "^alias $command=" "$HOME/.zshrc" ; then
command_found=1
fi
if [[ $command_found -eq 0 ]]; then
echo " ${BOLD}${WHITE}[${RED}x${WHITE}]${WHITE} Command Not Found"
fi
}
#######################################################################
$SHELLrc Aliases
### $SHELLrc Aliases
# this alias to edit $SHELLrc
alias ct="nvim ~/.zshrc"
# this alias to reload the zshrc file
alias rld="rld"
# this function for rld alias
function rld(){
c;
# local variables
local shellrc=.$(basename $SHELL)rc;
local is_wsl=$(grep -qi microsoft /proc/version && echo true || echo false)
local platform=$($is_wsl && echo "wsl" || echo "linux")
local backup_dir=$HOME/NTSOA/zshrc/$platform;
local backup_file=zshrc[$USER];
local saved_message="$shellrc backed up"
# source the config file and save it
source ~/$shellrc;
cat ~/$shellrc > $backup_dir/$backup_file;
# saved message display
c && br;
echo "${BOLD}${WHITE}$saved_message";
br && sleep 0.5;
op $backup_dir;
}
#######################################################################
Neovim Aliases
### Neovim Aliases
# this alias to open the current directory inside neovim
alias nvm="nvm"
# this function for nvm aliases
# if we have one argument then nvim will be launched with it,
# otherwise open the current directory if there is no argument
function nvm(){
nvim "${1:-.}";
}
# this alias to call neovim in a cooler way
alias hnvim="nvim"
# this alias to open nvim as root
alias nvmr="allow_sudo && nvmr"
# this function for nvmr alias
function nvmr(){
sudo nvim "${1:-.}";
}
# this alias to edit a file
alias ed="ed"
# this function for ed alias
function ed(){
# nvim -c "startinsert" "$1" && cv;
nvim "$1" && cv;
}
#######################################################################
Linux Network Aliases
### Kali Linux Network Aliases
# this function to switch from ethernet to wireless connection
function wf(){
c && br 2;
sudo clear;
br 2;
if [ -d /sys/class/net/wlan0 ]; then
downnet eth0 && upnet wlan0;
echo "w i r e l e s s" | figlet -t -c;
tlk "wifi on";
br && sleep 1 && cv;
else
echo "Can't switch to wireless, wlan0 not found";
br;
fi
}
# this function to bring a connection interface up
function upnet(){
sudo ifconfig "$1" up;
}
# this function to bring a connection interface down
function downnet(){
sudo ifconfig "$1" down;
}
# this alias to show the network configuration
alias ipsh="ipsh"
# this function for ntsh alias
function ipsh(){
c && br;
echo " Available IP Adresses : ";
br;
# ifconfig wlan0;
# br;
local eth_ip=$(ifconfig eth0 | grep "inet " | awk '{print $2}');
# Add a conditon to make it view
# IP from interface passed as argument
if [[ $# -eq 1 ]]; then
local iface_ip=$(ifconfig "$1" | grep "inet " | awk '{print $2}');
echo " $1 ==> $iface_ip";
else
if [ -d /sys/class/net/wlan0 ]; then
local wlan_ip=$(ifconfig wlan0 | grep "inet " | awk '{print $2}');
echo " wlan0 ==> $wlan_ip";
echo " eth0 ==> $eth_ip" && br;
else
echo " eth0 IP ==> $eth_ip" && br;
fi
fi
# ifconfig | awk -F '[ :]+' '/^[a-z]/ {interface=$1} /inet / {print interface " ==> " $3}'
}
# this alias to list the local IP adresses
alias ipls="ipls"
# this function for ipls alias
function ipls(){
c && br;
echo " Local Devices IP Adresses : ";
br;
arp -e;
br;
}
# this alias to show the network configuration
alias ntsh="ntsh"
# this function for ntsh alias
function ntsh(){
c && br;
if [ -d /sys/class/net/wlan0 ]; then
echo " Wireless Network informations : ";
if [[ $# -eq 0 ]]; then
br;
iwconfig wlan0 | grep "Mode" | awk -F ":" '{print $2}' | grep M | awk '{print "wlan0 Mode ==> " $1}';
br;
elif [[ $# -eq 1 ]]; then
br && iwconfig "$1" && br;
fi
else
echo "No Wireless adapter found" && br;
fi
}
# this alias to define the type of the wireless adapter
alias wtp="wtp"
# this function for wtp alias
function wtp(){
if [[ $# -eq 2 ]]; then
sudo ip link set "$1" down;
sudo iw "$1" set type "$2";
sudo ip link set "$1" up;
else
c && br 2;
echo "Invalid Argument" | figlet -t -c;
br;
fi
}
# this alias to scan wifi
alias scn="scn"
# this function for scn alias
function scn(){
c && br 2 && sudo clear;
wtp wlan0 monitor;
br 2;
echo "s c a n n i n g . . ." | figlet -t -c | lolcat;
sleep 1;
sudo airodump-ng wlan0;
wtp wlan0 managed;
br;
}
# this function to kill process
function kl(){
if pgrep -f "$1">/dev/null; then
sudo kill $(pgrep "$1");
fi
}
# this alias to switch to monitor mode
alias mntr="mntr"
# this function for mntr alias
function mntr(){
c && br 2;
sudo clear;
if [ -d /sys/class/net/wlan0 ]; then
c && br 2 && sudo clear;
kl NetworkManager;
kl wpa_supplicant;
kl dhclient;
sudo airmon-ng start wlan0 && c;
echo "M o n i t o r" | figlet -t -c;
sleep 0.5;
br;
else
br 2;
echo "No wireless adapter";
br;
fi
}
# this alias to set the network adapter to monitor mode
# in another way
alias rmon="rmon"
# this function for rmn alias
function rmon(){
c && br 2 && sudo clear;
sudo airmon-ng check wlan0;
c;
sleep 1;
sudo airmon-ng check kill wlan0;
c;
sleep 1;
sudo airmon-ng start wlan0;
c;
echo "M o n i t o r M o d e" | figlet -t -c | lolcat;
sleep 1;
c && br;
ntsh;
}
# this alias to switch to managed mode
alias mngd="mngd"
# this function for mngd alias
function mngd(){
c && br 2 && sudo clear;
wtp wlan0 managed;
br 2;
echo "M a n a g e d M o d e" | figlet -t -c | lolcat;
tlk "managed mode";
sleep 0.5;
c && br;
ntsh;
}
# this alias to restart the network manager after a hack
alias rst="allow_sudo && rst"
# this function for rst alias
function rst(){
c && br 2;
sudo service NetworkManager restart;
br 2;
echo "N e t R e s e t" | figlet -t -c;
# tlk "network reset";
sleep 1;
sudo service NetworkManager restart;
upnet eth0;
#upnet eth1;
if [ -d /sys/class/net/wlan0 ]; then
upnet wlan0;
wtp wlan0 managed;
sleep 0.5;
fi
cv;
}
# this alias to run wifite
alias whk="allow_sudo && whk"
# this function for whk alias
function whk(){
function hack_wifi(){
sudo wifite --kill;
br;
# this function will ask if the
# hacking should restart or not
function check_quit(){
echo -ne " ${BOLD}${WHITE}[${GREEN}?${WHITE}]${WHITE} ${GREEN}Restart ${WHITE}the wifi hacking ? (y/n) ";
read wifi
if [ "$wifi" = "y" ]; then
whk
elif [[ "$wifi" = "n" ]]; then
echo -ne " ${BOLD}${WHITE}[${GREEN}+${WHITE}]${WHITE} Switching to ${GREEN}Managed ${WHITE}Mode ";
downnet eth0 && upnet wlan0;
wtp wlan0 managed;
echo "${GREEN} ${WHITE}"
echo -ne " ${BOLD}${WHITE}[${GREEN}+${WHITE}]${WHITE} Restarting Network Manager "
sudo service NetworkManager restart;
echo "${GREEN} ${WHITE}"
else
check_quit
fi
}
allow_sudo && check_quit
}
if [ -d /sys/class/net/wlan0 ]; then
c && br
hack_wifi
else
br
echo " ${BOLD}${WHITE}[${RED}x${WHITE}]${WHITE} No ${RED}Wireless Card ${WHITE}Available"
br
fi
}
# this alias to create a Fake Access Point
alias facp="allow_sudo && facp"
# this function for facp alias
function facp(){
if [ -d /sys/class/net/wlan0 ]; then
sudo systemctl stop NetworkManager
sudo systemctl stop wpa_supplicant
sudo ifconfig wlan0 down
sudo ifconfig wlan0 up
sudo airbase-ng --essid "$*" -c 11 wlan0
else
echo "No wireless adapter found"
fi
function check_quit(){
echo -ne " ${BOLD}${WHITE}[${GREEN}?${WHITE}]${WHITE} ${GREEN}Restart ${WHITE}the Fake Acces Point ? (y/n) ";
read wifi
if [ "$wifi" = "y" ]; then
whk
elif [[ "$wifi" = "n" ]]; then
echo -ne " ${BOLD}${WHITE}[${GREEN}+${WHITE}]${WHITE} Switching to ${GREEN}Managed ${WHITE}Mode ";
downnet eth0 && upnet wlan0;
wtp wlan0 managed;
echo "${GREEN} ${WHITE}"
echo -ne " ${BOLD}${WHITE}[${GREEN}+${WHITE}]${WHITE} Restarting Network Manager "
sudo service NetworkManager restart;
echo "${GREEN} ${WHITE}"
else
check_quit
fi
}
check_quit
}
# function facp(){
# if [ -d /sys/class/net/wlan0 ]; then
# sudo systemctl stop NetworkManager
# sudo systemctl stop wpa_supplicant
# sudo ifconfig wlan0 down
# sudo ifconfig wlan0 up
#
# sudo airbase-ng --essid "$*" -c 11 wlan0 &
#
# sleep 5 # Wait for airbase-ng to create the at0 interface
#
# sudo ifconfig at0 up 10.0.0.1 netmask 255.255.255.0
# sudo dnsmasq -C /etc/dnsmasq.conf -d &
#
# echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
# sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# sudo iptables -A FORWARD -i eth0 -o at0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# sudo iptables -A FORWARD -i at0 -o eth0 -j ACCEPT
# else
# echo "No wireless adapter found"
# fi
# }
# this alias to deauth wireless connection
alias deauth="deauth"
# this function for deatuh alias
function deauth(){
if [[ $# -ge 1 ]]; then
if [ -d /sys/class/net/wlan0 ]; then
c && br 2 && sudo clear;
if [[ !$(pgrep NetworkManager) ]]; then
sudo systemctl start NetworkManager;
wtp wlan0 managed;
fi
kl wpa_supplicant;
kl dhclient;
echo " D e A u t h" | figlet && br;
echo " ==> Target Wi-Fi : '$*' " && br;
ssid="$*"
bssid=$(nmcli -f BSSID,SSID device wifi list | grep "$ssid" | awk '{print $1}')
# bssid=$(sudo iw dev wlan0 scan | grep -B 8 "SSID: $ssid" | awk -F "(" '/^BSS/{print $1}' | tr '[:lower:]' '[:upper:]' | sed 's/BSS //');
# here we use the iw dev wlan0 scan to show the wireless networks without using nmcli
# the grep -B 8 means it will match the eight's line before the found on the pattern
# use grep -A to match lines after the matched one
# awk -F "" will set the delimiter between matches and then it will print the first side of the matching pattern
# tr will then convert all the letter to uppercase
# the sed 's/BSS //' will replace BSS to nothing
# what can I say, today 11/11/2023 I'm becoming more and more good at pattern matching
if [ -n "$bssid" ]; then
# if [[ -n $(sudo airmon-ng check wlan0) ]]; then
# sudo airmon-ng check kill wlan0;
# fi
sudo aireplay-ng -0 0 -a "$bssid" wlan0 --ignore-negative-one;
else
echo "SSID '$ssid' not found";
br;
fi
else
echo "No wireless adapter found";
br;
fi
else
echo "Please pass the Wi-Fi SSID as the argument";
fi
}
# this alias to connect to a wifi via CLI
alias wcnt="wcnt"
# this function for wcnt alias
function wcnt(){
if [[ $# -eq 1 ]]; then
if [ -d /sys/class/net/wlan0 ]; then
nmcli device wifi connect "$1";
else
echo " No wireless adapter found";
br;
fi
elif [[ $# -eq 2 ]]; then
if [ -d /sys/class/net/wlan0 ]; then
nmcli device wifi connect "$1" password "$2";
else
echo " No wireless adapter found";
br;
fi
else
echo "Please pass the Wi-Fi SSID as argument";
fi
}
# this alias to list all the wifi nearby
alias wls="allow_sudo && wls"
# this function for wls alias
function wls(){
if [ -d /sys/class/net/wlan0 ]; then
downnet eth0 && upnet wlan0;
c && br 2;
echo " Wi-Fi connections nearby : " && br;
nmcli device wifi list
# nmcli -f SSID,BSSID,SECURITY,CHAN,SIGNAL,BARS,RATE,MODE device wifi list
# nmcli -f SSID,SECURITY,CHAN,SIGNAL,BARS,RATE,MODE device wifi list
# wait;
br;
else
c && br 2;
echo "No wireless adapter";
br;
fi
}
# this function to check saved wifi network
function wchk(){
# Get the saved Wi-Fi connections
nmcli connection show | grep -q "$1" && echo "$1 found" || echo "$1 not found"
# We have a cool ternary expression here :D
}
# this alias to run airgeddon
alias rhk="allow_sudo && rhk"
# this function for rhk alias
function rhk(){
sudo airgeddon
}
# this alias to run the cupp command
alias cupp="cupp"
# this function for cupp alias
function cupp(){
c && br;
if [[ $# -eq 0 ]]; then
cupp.py -i;
elif [[ $# -gt 0 ]]; then
cupp.py $@;
fi
}
# this alias to ping a network
alias reach="allow_sudo && reach"
#this function to check if pfsense is reachable
# coded 01/29/2024
function reach(){
local target_IP="$1"
local check_message="Checking $target_IP reachability..."
local check_IP="sudo ping -c 1 -W 5 "
local reachable="c && br && echo ' $check_message' && eval $check_IP $target_IP &> /dev/null;"
# the -c 1 means we send one packet to test it
# the -W 5 means if the ping have 5 seconds to check
# as always we run it in background in order to
# not see all the boring logs messages
if eval $reachable ;then
#if PfSense is reachable then
#we execute the next command after
#this function calling
# eval "$@"
echo " $target_IP is reachable"
else;
echo " $target_IP is not reachable"
fi
}
#######################################################################
Linux Programs Aliases
### Kali Linux Programs Aliases
# this alias to run an executable file or a script
alias rn="rn"
# this function for rn alias
function rn(){
#this will look for the extension of the file
case "${1##*.}" in
class)
java "$1";;
py)
if [[ $# -eq 1 ]]; then
# all "$1";
# c && br;
python3 "$1";
return 0;
# br;
elif [[ $# -gt 1 ]]; then
all "$1";
c && br;
python3 "$1" "$@";
return 0;
br;
fi
;;
c || cpp) # update 07/28/2023
file="$1";
out="${file%.*}"
# Condition 1: Check if the file extension is c
extension='[[ "${file##*.}" == "c" ]]';
# Condition 2: Check if the file contains math library
math='grep -E "^#include <math.h>" "$file" >/dev/null';
# Ternary expressions to determine compiler and flags
compiler=$(eval "$extension" && echo "gcc" || echo "g++");
flags=$(eval "$math" && echo "-lm" || echo "");
# check if an old executable exists
if [[ -f "$out" ]]; then
dlf "$out";
fi
# Compile the C file
"$compiler" "$file" -o "$out" $flags;
# Execute the resulting executable
all "$out";
clear && br;
./"$out";
br;;
html)
google-chrome "$1" && cv;;
asm)
nasm -felf64 "$1"
ld ${1%.*}.o -o ${1%.*}
./${1%.*}
;;
*)
all "$1" && c && ./"$1";;
esac
}
# this alias to run an executable file or a script
alias rns="allow_sudo && rns"
# this function for rn alias
function rns(){
#this will look for the extension of the file
case "${1##*.}" in
py)
if [[ $# -eq 1 ]]; then
# all "$1";
# c && br;
python3 "$1";
return 0;
# br;
elif [[ $# -gt 1 ]]; then
all "$1";
c && br;
python3 "$1" "$@";
return 0;
br;
fi
;;
c || cpp) # update 07/28/2023
file="$1";
out="${file%.*}"
# Condition 1: Check if the file extension is c
extension='[[ "${file##*.}" == "c" ]]';
# Condition 2: Check if the file contains math library
math='grep -E "^#include <math.h>" "$file" >/dev/null';
# Ternary expressions to determine compiler and flags
compiler=$(eval "$extension" && echo "gcc" || echo "g++");
flags=$(eval "$math" && echo "-lm" || echo "");
# check if an old executable exists
if [[ -f "$out" ]]; then
dlf "$out";
fi
# Compile the C file
"$compiler" "$file" -o "$out" $flags;
# Execute the resulting executable
all "$out";
clear && br;
./"$out";
br;;
html)
google-chrome "$1" && cv;;
asm)
nasm -felf64 "$1"
ld ${1%.*}.o -o ${1%.*}
./${1%.*}
;;
*)
all "$1" && c && sudo ./"$1";;
esac
}
# this alias to make the pc talk
alias tlk="espeak -v en+m3 -s 150"
# -v en+m3 -s 150" ==> those are optional
# this function for tlk alias
function tlk1(){
espeak "$1" && cv;
}
# this alias to serve files via the Php server
alias srv="srv"
# this function for srv alia
function srv(){
php -S 127.0.0.1:50000;
google-chrome 127.0.0.1:50000/"$1";
}
# alias to view inside a file
alias vf="vf"
# function for vf alias
# update 09/14/2023
function vf() {
local file="$1"
local extension="${file##*.}"
case "$extension" in
mcd)
cmd="katyushamcd";;
*)
cmd="xdg-open";;
esac
"$cmd" "$file" && cv
}
# this alias to view binary file
alias vfb="vfb"
# this function for vfb alias
function vfb(){
od -t x1 -A n "$1";
}
# this alias to copy files
alias cpf="cpf"
# this function for cpf alias
function cpf(){
local copy_target=${2:-$dest}
cp -r "$@" "$copy_target" && op "$copy_target";
}
function cpf2() {
cp "${@:1:$#-1}" "${@:$#}";
}
# this alias to copy the content of a file
alias cnf="cnf"
# this function for cnf alias
function cnf(){
cat "$1" > "$2" && dlf "$1" && all "$2";
}
# this alias to locate packages
alias lc="lc"
# this function for lc alias
function lc(){
locate "$1" | less && cv;
}
# this alias for ngrok
alias ngrok="ngrok"
# this function for ngrok alias
# IMPROVED: 05-30-2024 14:12
function ngrok() {
# get the ngrok arguments
local ngrok_args="$@"
# check for dashes then do not
# redirect to another terminal
for arg in "$@"; do
if [[ "$arg" == *-* ]]; then
command ngrok "$@"
return
fi
done
(setsid qterminal -e bash -c "ngrok $ngrok_args" >/dev/null 2>&1 &)
}
# this alias to view the irc sever status
alias irth="irth"
# this function for irth alias
function irth(){
c && br 2 && sudo clear;
echo " irc server status : ";
br;
sudo service inspircd status ;
br;
}
# this alias to start the irc server
alias ircon="ircon"
# this function for ircon alias
function ircon(){
clear && br 2 && sudo clear;
sudo service inspircd start;
irth;
}
# this alias to restart the irc server
alias ircrst="ircrst"
# this function for ircrst alias
function ircrst(){
clear && br 2 && sudo clear;
sudo service inspircd restart;
irth;
}
# this alias to stop the irc server
alias ircoff="ircoff"
# this function for ircoff alias
function ircoff(){
clear && br 2 && sudo clear;
sudo service inspircd stop;
irth;
}
#######################################################################
WSL Terminal Aliases
### WSL Terminal Aliases
# this alias to switch to windows terminal
alias wds="wds"
# this function for wds alias
function wds(){
c && br 2;
# Check the current directory
# because cmd will work only
# on windows'directory rather
# than WSL's one so we move
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe;
else
cd /mnt/c
cmd.exe;
cd - &>/dev/null
fi
cv;
}
# this alias to switch to powershell terminal
alias pws="pws"
# this function for pws alias
function pws(){
c && br 2;
powershell.exe;
cv;
}
# this alias to enter cmd as admin
alias cmd="cmd"
# this function for cmd alias
function cmd(){
powershell.exe -command "Start-Process cmd -Verb RunAs";
x;
}
#######################################################################
WSL Network Aliases
### WSL Network Aliases
# this alias to show the network configuration
alias ipsh="ipsh"
# this function for ntsh alias
function ipsh(){
c && br;
echo " Available IP Adresses : ";
br;
local eth_ip=$(ip addr show eth0 | grep -oP 'inet \K[\d.]+');
local wifi_ip=$(ip addr show wifi0 | grep -oP 'inet \K[\d.]+');
echo " eth0 ==> $eth_ip" && br;
echo " wifi0 ==> $wifi_ip" && br;
}
function clean_argument() {
local arg="$1"
# Replace spaces with backslashes
local clean_arg="${arg// /\\}"
# Replace special characters with escaped versions
local special_chars='[][{}()*+?.\\^$|]'
# Escape backslashes for sed
local escaped_special_chars="$(echo "$special_chars" | sed 's/\\/\\\\/g')"
local arg_pattern="s/[$escaped_special_chars]/\\\\&/g"
clean_arg="$(echo "$clean_arg" | sed -E "$arg_pattern")"
echo "$clean_arg"
}
# I don't know why but this alias
# make the PC slow down
# this alias to view saved wifi password
# SOLVED: 05-11-2024 22:44
# Just execute it inside the
# hard drive of windows instead of WSL
# directories, so just cd to whatever
# hard drive of windows to make it run
alias wpass="wpass"
# this function for wpass alias
function wpass(){
cd /mnt/c
if [[ $# -eq 0 ]]; then
# consider all arguments as one string
local wifi=$(
cmd.exe /c netsh wlan show profiles |
grep -i "All User Profile" |
awk '{print $5}' | shuf -n 1
)
local password=$(
cmd.exe /c netsh wlan show profiles "$wifi" key=clear |
grep "Key Content" |
awk '{print $4}'
)
echo "Wifi SSID : $wifi";
echo "Password : $password";
else
# consider all arguments as one string
local wifi="$*"
local password=$(
cmd.exe /c netsh wlan show profiles "$wifi" key=clear |
grep "Key Content" |
awk '{print $4}'
)
echo "Wifi SSID : $wifi";
echo "Password : $password";
fi
cd - &>/dev/null;
}
# Completion function for wpass
_wpass_completion() {
cd /mnt/c
local cur
# Get the current word being completed
cur="${COMP_WORDS[COMP_CWORD]}"
# Fetch WiFi profiles
local profiles=$(cmd.exe /c netsh wlan show profiles |
grep -i "All User Profile" |
awk '{$1=$2=$3=""; print substr($0, 6)}' |
head -n 1000
)
# Generate completions
COMPREPLY=($(compgen -W "${profiles}" -- "${cur}"))
cd - &>/dev/null
}
# Register the completion function for wpass
complete -F _wpass_completion wpass
# this alias to "list known wifi"
alias wls="wls"
# this function for wls alias
function wls(){
cd /mnt/c
function print_message(){
wifi="$1"
password="$2"
# Print Wi-Fi SSID and password
echo "Wifi SSID : $wifi"
echo "Password : $password"
echo
}
function wifi_and_pass(){
num_profiles="$1"
grep_string="$2"
# Loop through each Wi-Fi profile
while IFS= read -r wifi; do
# Retrieve password for the current Wi-Fi profile
local password=$(
cmd.exe /c netsh wlan show profiles "$wifi" key=clear |
grep "Key Content" | awk '{print $4}'
)
print_message $wifi $password
done < <(
cmd.exe /c netsh wlan show profiles |
grep -i "$grep_string" |
grep 'All User Profile' |
awk '{$1=$2=$3=""; print substr($0, 6)}' |
head -n "$num_profiles"
)
}
function wifi_name(){
wifi_count=0
# Loop through each Wi-Fi profile
while IFS= read -r wifi; do
echo "- $wifi"
((wifi_count++))
done < <(
cmd.exe /c netsh wlan show profiles |
grep 'All User Profile' |
awk '{$1=$2=$3=""; print substr($0, 6)}'
)
}
if [[ $# -eq 0 ]]; then
num_profiles=1
grep_string=$(
cmd.exe /c netsh wlan show profiles |
grep -i "All User Profile" |
awk '{print $5}' | shuf -n 1
)
wifi_and_pass $num_profiles $grep_string
elif [[ $# -eq 1 ]]; then
if [[ "$1" =~ ^[0-9]+$ ]]; then
num_profiles=$1
grep_string=""
wifi_and_pass $num_profiles $grep_string
elif [[ "$1" != "-a" ]]; then
num_profiles=99999999
grep_string="$1"
wifi_and_pass $num_profiles $grep_string
elif [[ "$1" -eq "-a" ]]; then
wifi_name
echo
echo "Known Wi-Fi Connections ($wifi_count) "
fi
fi
cd - &>/dev/null;
}
# this alias to reach a network
alias reach="allow_sudo && reach";
# this function to check if pfsense is reachable
# coded 01/29/2024
function reach(){
c && br;
local target_IP="$1"
local check_message="Checking $target_IP reachability..."
local check_IP="sudo ping -c 1 -W 5 "
local reachable="br && echo ' $check_message' && eval $check_IP $target_IP &> /dev/null;"
# the -c 1 means we send one packet to test it
# the -W 5 means if the ping have 5 seconds to check
# as always we run it in background in order to
# not see all the boring logs messages
if eval $reachable ;then
#if PfSense is reachable then
#we execute the next command after
#this function calling
# eval "$@"
echo " $target_IP is reachable"
else;
echo " $target_IP is not reachable"
fi
}
#######################################################################
WSL Browser
### WSL Browser
# SOLVED :
# this to make Github CLI know which default browser it would use
# this WSL issue was solved in gh GitHub Repo Pull Request
export BROWSER="chrome.exe"
# this alias to open file with browser
alias bwsop="bwsop"
# SOLVED : no need for this annoying code
# since we only use Windows Explorer to
# open files according to their default apps
# and there is no lag like we did here
# IMPROVED : 06-18-2024 21:44
# Handled the shell access after launch
#
# this function bwsop alias
function bwsop(){
local file_name="$1"
local file_extension="${file_name##*.}"
local current_directory="$PWD"
# Replace all Spaces and Back-slashes with %20
local formatted_path=$(wslpath -m . | sed -e 's/ /%20/g' -e 's/\\//g')
local formatted_file=$(echo "$file_name" | sed -e 's/ /%20/g' -e 's/\\//g')
# Check if it a Pdf file
local isPdf="[[ "$file_extension" == "pdf" ]]"
# Open Pdf file with edge and the other files with chrome
local browser=$( eval $isPdf && echo msedge.exe || echo chrome.exe)
# if the current directory is a WSL
# directory then switch to windows
# directory before executing the script
if [[ "$current_directory" != "/mnt/"* ]]; then
cd /mnt/c
fi
# Open the file with the browser
cmd.exe /c start $browser file:///$formatted_path/$formatted_file
# if we changed directory then get back
if [[ "$PWD" != "$current_directory" ]]; then
cd - &>/dev/null
fi
return 0
}
#######################################################################
WSL PWA Alias
### WSL PWA Alias
# HTX:
# this alias to open web app
alias open_web_app="allow_sudo && open_web_app";
# CREATED : 02-11-2024 20:13
# this function to open chrome based app
# it uses the Id of the App we created within
# the Chrome browser, it will take 3 arguments :
# first the domain of the App
# then the chrome App Id
# finally the name of the App (optional)
# NOTE : 08-26-2024 11:28
# This is just PWA that can
# be installed in whatever browser
# IMPROVED : 05-30-2024 18:36
# Shell access after execution
function open_web_app(){
local browser="chrome.exe"
local app_domain="$1"
local app_id="$2"
local app_name="${3:-$(convert_url $app_domain)}"
local current_directory="$PWD"
local check="sudo ping -c 1 -W 5 "
local check_message="Checking $app_name ..."
local reachable="c && br && echo ' $check_message' && eval $check $app_domain &> /dev/null;"
# if the current directory is a WSL
# directory then switch to windows
# directory before executing the script
if [[ "$current_directory" != "/mnt/"* ]]; then
cd /mnt/c
fi
# if there is an app ID open
# that windowed chrome app
# otherwise launch chrome with
# with the domain passed as argument
if [ -n "$app_id" ]; then
open_app='cmd.exe /c start $browser --profile-directory=Default --app-id=$app_id;'
else
open_app='cmd.exe /c start $browser $app_domain'
fi
# this function to display the web app status
function web_app_stat(){
c && br
echo " WebApp : $app_name"
echo " Link : $app_domain"
echo " Browser : $browser"
echo " Status : $1"
}
# check the stat
if eval $reachable; then
web_app_stat "Connected"
else
web_app_stat "Not Connected"
fi
# here to call the open_app function
eval $open_app
# if we changed directory then get back
if [[ "$PWD" != "$current_directory" ]]; then
cd - &>/dev/null
fi
return 0
}
#######################################################################
WSL PWAs
### PWAs Aliases
# this function to convert url to name
function convert_url(){
url="$1"
domain="${url%.*}"
# Capitalize the first letter of the domain
capitalized_domain="$(tr '[:lower:]' '[:upper:]' <<< ${domain:0:1})${domain:1}"
echo "$capitalized_domain"
}
# this alias to open the GitHub app
alias gthb="gthb"
# this function for gthb alias
function gthb(){
local is_a_git_repo=$(git rev-parse --is-inside-work-tree 2>/dev/null)
local github_id="mjoklplbddabcmpepnokjaffbmgbkkgg"
local github_link="github.com"
local github_name="GitHub"
if [[ "$is_a_git_repo" == "true" ]]; then
local has_remote=$(git remote -v)
if [ "$has_remote" ]; then
local repo_url=$(git config --get remote.origin.url)
local repo_owner=$(echo "$repo_url" | awk -F '[/:]' '{print $(NF-1)}')
local repo_name="$(echo "$repo_url" | awk -F '/' '{print $NF}' | sed 's/.git$//')"
else
local repo_owner=$(git config user.username)
local repo_name=$(basename "$(git rev-parse --show-toplevel)")
fi
local current_branch=$(git branch | awk '/\*/ {print $2}');
function check_view(){
echo -ne "${BOLD}${GREEN}Open ${WHITE}the repo ${LIGHT_BLUE}$repo_name ${WHITE}on GitHub ? (y/n) ";
read check_view
echo ${RESET}
if [ "$check_view" = "y" ]; then
cd /mnt/c
cmd.exe /c start chrome.exe \
--profile-directory=Default --app-id=$github_id \
--app=https://github.com/$repo_owner/$repo_name/tree/$current_branch \
cd - &>/dev/null
# gh repo view $repo_owner/$repo_name \
# --web --branch $current_branch \
# &>/dev/null
elif [ "$check_view" = "n" ];then
open_web_app $github_link $github_id $github_name
else
check_view
fi
}
# check if the repo has a remote
# on github otherwise open the pwa
if [ "$has_remote" ]; then
local is_remote_branch=$(git branch -r | grep "origin/$current_branch")
# check if the current branch has remote
if [ -n "$is_remote_branch" ]; then
check_view
else
echo "${BOLD} ■■▶ The remote repo ${LIGHT_BLUE}$repo_name ${WHITE}has no branch named ${GREEN}$current_branch ${WHITE}!" && br;
fi
else
open_web_app $github_link $github_id $github_name
fi
else
if [[ $# -eq 0 ]]; then
open_web_app $github_link $github_id $github_name
fi
fi
}
# this alias to open chatGpt app
alias gpt="gpt"
# this function for gpt alias
function gpt(){
local gpt_id="febkkahnhhdppidjakkemnckfhnkidba"
local gpt_link="chatgpt.com"
local gpt_name="ChatGpt"
open_web_app $gpt_link $gpt_id $gpt_name
}
# this alias to open Google Gemini app
alias gmn="gmn"
# this function for gmn alias
function gmn(){
local gmn_id="acehpdabncjaanhpihehcmhidhmbdcoo"
local gmn_link="gemini.google.com"
local gmn_name="Gemini"
open_web_app $gmn_link $gmn_id $gmn_name
}
# this alias to open ClaudeAI app
alias cld="cld"
# this function for cld alias
fuction cld(){
local claude_id="fmpnliohjhemenmnlpbfagaolkdacoja"
local claude_link="claude.ai"
local claude_name="ClaudeAI"
open_web_app $claude_link $claude_id $claude_name
}
# this alias to open reddit forum
alias rdt="rdt"
# this function for rdt alias
function rdt(){
local reddit_id="lgnggepjiihbfdbedefdhcffnmhcahbm"
local reddit_link="reddit.com"
open_web_app $reddit_link $reddit_id
}
# this alias to open Digital Clock Web App
alias clock="allow_sudo && clock"
# this function for clock alias
function clock(){
local clock_id="pgoffdmnhcendlolaaobdojhhdnkfdlj"
local clock_link="localhost"
local clock_name="Digital Clock"
# start apache server if not running
if ! pgrep apache2 > /dev/null; then
sudo service apache2 start &>/dev/null;
fi
# open clock PWA or Progressive Web App
open_web_app $clock_link $clock_id $clock_name;
# stop apache server
sudo service apache2 stop &>/dev/null;
}
# this alias to open the GitLab app
alias gtlb="gtlb"
# this function for gthb alias
function gtlb(){
local gitlab_id="jndlecohfigjmhidboiabnpjfmjgmacp"
local gitlab_link="gitlab.com"
local gitlab_name="GitLab"
open_web_app $gitlab_link $gitlab_id $gitlab_name
}
# this alias to open pypi
alias pypi="pypi"
# this function for pypi alias
function pypi(){
local pypi_id="dhfmdekmhnminddhppcomhncjifnohcg"
local pypi_link="pypi.org"
local pypi_name="PyPi"
open_web_app $pypi_link $pypi_id $pypi_name
}
# this alias to open testpypi
alias testpypi="testpypi"
# this function for pypi alias
function testpypi(){
local test_pypi_id="opibpddgphoocjppppodcfdfdccdeoif"
local test_pypi_link="test.pypi.org"
local test_pypi_name="Test PyPi"
open_web_app $test_pypi_link $test_pypi_id $test_pypi_name
}
# this alias to open crates Web App
# crates.io is the official rust package repo
alias crates="crates"
# this function for crates alias
function crates(){
local crates_id="jeibpciabahgpgbljbmbkjgkkmjcfhdp"
local crates_link="crates.io"
local crates_name="Crates"
open_web_app $crates_link $crates_id $crates_name
}
# this alias to open cloud convert
alias conv="conv"
# this function for img alias
function conv(){
local cloud_convert_id="hdmdoclnahphbppladolaimacehflnnb"
local cloud_convert_link="cloudconvert.com"
local cloud_convert_name="Cloud Convert"
open_web_app $cloud_convert_link $cloud_convert_id $cloud_convert_name
}
# this alias to open mastodon.social
alias mstdn="mstdn"
# this function for mstdn alias
function mstdn(){
local mastodon_id="ikigfogfljecogfmdkeiipdcamdbibjl"
local mastodon_link="mastodon.social"
open_web_app $mastodon_link $mastodon_id
}
# this alias to open Facebook app
alias fb="fb"
# this function for fb alias
function fb(){
local fb_id="gelmehpcmiomoockkmdlfadoankpigol"
local fb_link="facebook.com"
open_web_app $fb_link $fb_id
}
# this alias to open Instagram app
alias itg="itg"
# this function for fb alias
function itg(){
local insta_id="akpamiohjfcnimfljfndmaldlcfphjmp"
local insta_link="instagram.com"
open_web_app $insta_link $insta_id
}
# this alias to open the discord app
alias dsc="dsc"
# this function for dsc alias
function dsc(){
local discord_id="magkoliahgffibhgfkmoealggombgknl"
local discord_link="discord.com"
open_web_app $discord_link $discord_id
}
# this alias to open Twitter X Web App
alias twx="twx"
# this function for twx alias
function twx(){
local twitter_id="lodlkdfmihgonocnmddehnfgiljnadcf"
local twitter_link="x.com"
local twitter_name="TwitterX"
open_web_app $twitter_link $twitter_id $twitter_name
}
# this alias to open YouTube Web App
alias ytb="ytb"
# this function for ytb alias
function ytb(){
local youtube_id="agimnkijcaahngcdmfeangaknmldooml"
local youtube_link="youtube.com"
local youtube_name="YouTube"
open_web_app $youtube_link $youtube_id $youtube_name
}
# this alias to open hackerank
alias hcrk="hcrk"
# this function for hcrk alias
function hcrk(){
local hackerrank_id="jlokchaaimeiedjgobonphmigfpingaj"
local hackerrank_link="hackerrank.com"
local hackerrank_name="HackerRank"
open_web_app $hackerrank_link $hackerrank_id $hackerrank_name
}
# this alias to open LinkedIn WebApp
alias lnk="lnk"
# this function for lnk alias
function lnk(){
local linkedin_id="ohghonlafcimfigiajnmhdklcbjlbfda"
local linkedin_link="linkedin.com"
local linkedin_name="LinkedIn"
open_web_app $linkedin_link $linkedin_id $linkedin_name
}
# this alias to open netlify web app
alias ntlf="ntlf"
# this function for ntlf alias
function ntlf(){
local netlify_id="dlbhokdiippnblopfealccihgfhaofkb"
local netlify_link="netlify.com"
local netlify_name="NetLify"
open_web_app $netlify_link $netlify_id $netlify_name
}
# this alias to open dev.to web app
alias devto="devto"
# this function for devto alias
function devto(){
local devto_id="ecapchmcnohmakooheeinoaidebbiacm"
local devto_link="dev.to"
local devto_name="DevTo"
open_web_app $devto_link $devto_id $devto_name
}
# this alias to open Compiler Explorer Web App
alias cmplr="cmplr"
# this function for cmplr alias
function cmplr(){
local cmplr_id="chjjlngghpbmipjipdfdjhcndbiklfje"
local cmplr_link="godbolt.org"
local cmplr_name="Compiler Explorer"
open_web_app $cmplr_link $cmplr_id $cmplr_name
}
# this alias to open daedalOS Web App
alias daeos="daeos"
# this function for daeos alias
function daeos(){
local daeos_id="ojamcdcpaheomdkldanjflobhhpeoegg"
local daeos_link="dustinbrett.com"
local daeos_name="daedalOS"
open_web_app $daeos_link $daeos_id $daeos_name
}
# this alias to open MacOs BigSur Web App
alias bigsur="bigsur"
# this function for bigsur alias
function bigsur(){
local bigsur_id="hejggljhmjcedakiebjfafljllofblid"
local bigsur_link="macos-big-sur-clone.vercel.app"
local bigsur_name="MacOs BigSur"
open_web_app $bigsur_link $bigsur_id $bigsur_name
}
# this alias to open Windows 11 Web App
alias win="win"
# this function for win alias
function win(){
local win_id="kmdomeghommpdkfhamainmeepipgbgpi"
local win_link="win11.blueedge.me"
local win_name="Windows 11"
open_web_app $win_link $win_id $win_name
}
# this alias to open Google Hacking Database Web App
alias exdb="exdb"
# this function for exdb alias
function exdb(){
local exdb_id="oibdijhbidmbckpcenopepmcaafbiiih"
local exdb_link="www.exploit-db.com"
local exdb_name="Google Hacking Database"
open_web_app $exdb_link $exdb_id $exdb_name
}
# this alias to open Kaggle Web App
alias kgl="kgl"
# this function for kgl alias
function kgl(){
local kgl_id="ajdemkepbiggbelkgicfebbjokenncei"
local kgl_link="kaggle.com"
local kgl_name="Kaggle"
open_web_app $kgl_link $kgl_id $kgl_name
}
# this alias to open Ip Info Web App
alias ipinfo="ipinfo"
# this function for ipinfo alias
function ipinfo(){
local ipinfo_id="adopfgmhmfaggadmlkiklebhncpjnnac"
local ipinfo_link="ipinfo.io"
local ipinfo_name="IpInfo"
open_web_app $ipinfo_link $ipinfo_id $ipinfo_name
}
# this alias to open Course Careers Web App
alias crs="crs"
# this function for crs alias
function crs(){
local crs_id="ndljfckhgknkknnkmemfkalcibbpfhla"
local crs_link="coursecareers.com"
local crs_name="Course Careers"
open_web_app $crs_link $crs_id $crs_name
}
# this alias to open Stackoverflow Web App
alias stck="stck"
# this function for stck alias
function stck(){
local stck_id="gafidhmaaknkinigcnolmldilpdlfdpa"
local stck_link="stackoveerflow.com"
local stck_name="Stack Over Flow"
open_web_app $stck_link $stck_id $stck_name
}
# this alias to open Canva App
alias canva="canva"
# this function for canva alias
function canva(){
cd /mnt/c/Users/lab_l/AppData/Local/Programs/Canva
cmd.exe /c start Canva.exe
cd - &>/dev/null
}
# this alias to open MuseScore Web App
alias mscr="mscr"
# this function for mscr alias
function mscr(){
local mscr_id="ocbioacpdhnddoolpphbcnbndighhfkn"
local mscr_link="musescore.com"
local mscr_name="MuseScore"
open_web_app $mscr_link $mscr_id $mscr_name
}
# this alias to open Docker Hub Web App
alias dckhb="dckhb"
# this function for dckhb alias
function dckhb(){
local dckhb_id="mclclddaglkchjeeijdmnlfcfedonbll"
local dckhb_link="hub.docker.com"
local dckhb_name="Docker Hub"
open_web_app $dckhb_link $dckhb_id $dckhb_name
}
# this alias to open Nano Midi Web App
alias midi="midi"
# this function for midi alias
function midi(){
local midi_id="cajodfhkmmnbofphdiodilpglpkjaepb"
local midi_link="nanomidi.net"
local midi_name="Nano Midi"
open_web_app $midi_link $midi_id $midi_name
}
# this alias to open Google Chat Web App
alias chat="chat"
# this function for chat alias
function chat(){
local chat_id="mdpkiolbdkhdjpekfbkbmhigcaggjagi"
local chat_link="mail.google.com"
local chat_name="Google Chat"
open_web_app $chat_link $chat_id $chat_name
}
# this alias to open Virus Total Web App
alias virustotal="virustotal"
# this function for virustotal alias
function virustotal(){
local virustotal_id="dnopbpmlkabcondfpckfnhgabfcncjmg"
local virustotal_link="virustotal.com"
local virustotal_name="Virus Total"
open_web_app $virustotal_link $virustotal_id $virustotal_name
}
# this alias to open CodinGame Web App
alias codingame="codingame"
# this function for codingame alias
function codingame(){
local codingame_id="mdmdhiclipbbmgikhgefloaghajjcheg"
local codingame_link="codingame.com"
local codingame_name="CodinGame"
open_web_app $codingame_link $codingame_id $codingame_name
}
# this alias to open Cisco Skills For All Web App
alias cisco="cisco"
# this function for cisco alias
function cisco(){
local cisco_id="imjciepmglgacccklncenjgecohaihcj"
local cisco_link="skillsforall.com"
local cisco_name="Cisco Skills For All"
open_web_app $cisco_link $cisco_id $cisco_name
}
# this alias to open Hack Tricks Web App
alias tricks="tricks"
# this function for tricks alias
function tricks(){
local tricks_id="mggngfogmkhbpicjamlefjpciidpodmm"
local tricks_link="book.hacktricks.xyz"
local tricks_name="Hack Tricks"
open_web_app $tricks_link $tricks_id $tricks_name
}
# this alias to open Try Hack Me Web App
alias hackme="hackme"
# this function for hackme alias
function hackme(){
local hackme_id="daeaiadaklimdlhhcpgbdkgdkmghbkmf"
local hackme_link="tryhackme.com"
local hackme_name="Try Hack Me"
open_web_app $hackme_link $hackme_id $hackme_name
}
# this alias to open google translate Web App
alias translate="translate"
# this function for translate alias
function translate(){
local translate_id="edanbjnaiofggfmimiidpfmhggkbokck"
local translate_link="translate.google.com"
local translate_name="Google Translate"
open_web_app $translate_link $translate_id $translate_name
}
# this alias to open Marvell Web App
alias marvell="marvell"
# this function for marvell alias
function marvell(){
local marvell_id="fdleagllbcbhmlabenhdmdddefhohnbb"
local marvell_link="marvell.com"
local marvell_name="Marvell"
open_web_app $marvell_link $marvell_id $marvell_name
}
# this alias to open DhIWise Web App
# N.B. this is an app that have templates
# for web and mobile app ready for production
# 08-16-2024 19:11
alias dhiwise="dhiwise"
# this function for dhiwise alias
function dhiwise(){
local dhiwise_id="dcinmcknnkhikonobhpniddjnehmnkac"
local dhiwise_link="app.dhiwise.com"
local dhiwise_name="DhiWise"
open_web_app $dhiwise_link $dhiwise_id $dhiwise_name
}
# this alias to open Quora Forum Web App
alias quora="quora"
# this function for quora alias
function quora(){
local quora_id="cechoboadpfjgoaooidphlandgelehhi"
local quora_link="quora.com"
local quora_name="Quora"
open_web_app $quora_link $quora_id $quora_name
}
# this alias to open npmjs Web App
alias npmjs="npmjs"
# this function for npmjs alias
function npmjs(){
local npmjs_id="foijodnoknckfliaajfnihbonnniljbe"
local npmjs_link="npmjs.com"
local npmjs_name="Npm JS"
open_web_app $npmjs_link $npmjs_id $npmjs_name
}
# this alias to open LolBas Web App
alias lolbas="lolbas"
# this function for lolbas alias
function lolbas(){
local lolbas_id="jlhledfapfgaeockhmjniedihamlliga"
local lolbas_link="lolbas-project.github.io"
local lolbas_name="LolBas"
open_web_app $lolbas_link $lolbas_id $lolbas_name
}
# this alias to open Loud Me Web App
alias loudme="loudme"
# this function for loudme alias
function loudme(){
local loudme_id="iancljhjkfkhobcfkijolghiieciilka"
local loudme_link="loudme.ai"
local loudme_name="LoudMe"
open_web_app $loudme_link $loudme_id $loudme_name
}
# this alias to open Snap Save
# Facebook Video Downloader Web App
alias snap="snap"
# this function for snap alias
function snap(){
local snap_id="caepnkackbfnijpgljjkjfjhoiodmdek"
local snap_link="snapsave.app"
local snap_name="Snap Save"
open_web_app $snap_link $snap_id $snap_name
}
# this alias to open Suno Web App
alias suno="suno"
# this function for suno alias
function suno(){
local suno_id="poemkolicenobkfdpoibhjjbgmjnlnpj"
local suno_link="suno.com"
local suno_name="Suno"
open_web_app $suno_link $suno_id $suno_name
}
# this alias to open itch games Web App
alias itch="itch"
# this function for itch alias
function itch(){
local itch_id="bhgdfnaojobmidmdmdipcadlijbopndi"
local itch_link="itch.io"
local itch_name="Itch Games"
open_web_app $itch_link $itch_id $itch_name
}
# this alias to open BitLy Web App
alias bitly="bitly"
# this function for bitly alias
function bitly(){
local bitly_id="iojpgkodflboefdoklfpbegdhbhmcjhe"
local bitly_link="app.bitly.com"
local bitly_name="BitLy"
open_web_app $bitly_link $bitly_id $bitly_name
}
# this alias to open Binance Web App
# NOTE : Binance is used for
# Cryptocurrency Exchange for Bitcoin,
# Ethereum & Altcoins
alias binance="binance"
# this function for binance alias
function binance(){
local binance_id="cnncjkiomekpjaednmgfcfiommnjogjo"
local binance_link="binance.com"
local binance_name="Binance"
open_web_app $binance_link $binance_id $binance_name
}
# this alias to open Wikipedia Web App
alias wiki="wiki"
# this function for wiki alias
function wiki(){
local wiki_id="mabbogacohpoeacebobbecclmpanobce"
local wiki_link="wikipedia.org"
local wiki_name="Wikipedia"
open_web_app $wiki_link $wiki_id $wiki_name
}
# this alias to open Flux AI Web App
alias fluxai="fluxai"
# this function for fluxai alias
function fluxai(){
local fluxai_id="mlmnaccmlmoihcobbmciddblmpjjaacp"
local fluxai_link="www.fluxpro.ai"
local fluxai_name="Flux AI"
open_web_app $fluxai_link $fluxai_id $fluxai_name
}
# this alias to open W3SCHOOLS Offline Web App
alias wscl="allow_sudo && wscl"
# this function for wscl alias
function wscl(){
local wscl_id="lcmlmpinhhipbaifakfjccanpehnglei"
local wscl_link="localhost"
local wscl_name="W3Schools"
if [[ ! $(pgrep apache2) ]]; then
echo -ne "${BOLD}[${GREEN}+${WHITE}]${WHITE} Starting Apache Server ...";
sudo service apache2 start &>/dev/null;
fi
open_web_app $wscl_link $wscl_id $wscl_name
}
# this alias to open Cyber Chef Web App
alias cbr="allow_sudo && cbr"
# this function for cbr alias
function cbr(){
local github_reachable="sudo ping -c 1 -W 5 github.com"
if eval $github_reachable; then
local cbr_id="laoalcpgflnjimblmgmjfhdfheldnmeo"
local cbr_link="gchq.github.io"
local cbr_name="Cyber Chef"
open_web_app $cbr_link $cbr_id $cbr_name
else
cd /mnt/d/NTSOA/dev/github_repo/forks/cyber_chef
bwsop CyberChef_v10.18.8.html
cd -&>/dev/null
fi
}
# this alias to open fast.com
alias fast="open_web_app fast.com"
# this alias to recharge the router
alias rtr="rtr"
# this function for rtr alias
function rtr(){
local airtel_id="phkfjlcmjmnindcbhfmnmlikainlhodg"
local airtel_link="www.airtel.mg"
local airtel_name="Airtel Router"
open_web_app $airtel_link $airtel_id $airtel_name
}
# this alias to view the HTX_AP dashboard
alias htx="htx"
# this function for htx alias
function htx(){
local router_id="mgnpfopekbaehajaakfppclfjmcpceke"
local router_IP="192.168.8.1"
local router_name="h471x Router"
# start apache server if not running
if ! pgrep apache2 > /dev/null; then
sudo service apache2 start &>/dev/null;
fi
# open clock PWA or Progressive Web App
open_web_app $router_IP $router_id $router_name;
# stop apache server
sudo service apache2 stop &>/dev/null;
}
#######################################################################
WSL Programs Aliases
### WSL Programs Aliases
# this alias to run an executable file or a script
alias rn="rn"
# this function for rn alias
function rn(){
# this will look the extension of the file
# use of ${1%.*} to retrieve the file name
# explanation :
# ${file%pattern} ==> this will remove the matched
# pattern from the file from the end of the file
#
# use of ${1##*.} to retrieve extension
# explanation :
# ${file##*.} ==> this will remove the longest
# matched string from the beginning of the file
# 2024-02-12 00:27
case "${1##*.}" in
py)
# all "$1" && c && echo -e && py "$1" && echo -e;;
python "$@" && return 0;;
c || cpp) # update 07/28/2023
file="$1";
out="${file%.*}"
# Condition 1: Check if the file extension is c
extension='[[ "${file##*.}" == "c" ]]';
# Condition 2: Check if the file contains math library
math='grep -E "^#include <math.h>" "$file" >/dev/null';
# Ternary expressions to determine compiler and flags
compiler=$(eval "$extension" && echo "gcc" || echo "g++");
flags=$(eval "$math" && echo "-lm" || echo "");
# check if an old executable exists
if [[ -f "$out" ]]; then
dlf "$out";
fi
# Compile the C file
"$compiler" "$file" -o "$out" $flags;
# Execute the resulting executable
all "$out";
clear && br;
./"$out";
br;;
js)
c && br 2 && node "$1" && br
;;
com)
open_web_app "$1";
;;
bat)
cmd.exe /c "$1";
;;
html || pdf)
bwsop "$1"
;;
*)
all "$1" && c && ./"$1";;
esac
}
# this alias to view inside a file
alias vf="vf"
# this function for vf alias
function vf() {
if [[ -f "$1" ]]; then
case "${1##*.}" in
db|sqlite*|xlsx|docx|pptx|ppt|wmv|pcapng|pdf|jpg|png|JPG|PNG|lnk|docx|xslsx|pptx|mp*|zip|rar|gns3)
explorer.exe "$1"
;;
# open all files that have default app with windows explorer
html)
if [[ "$PWD" == "/mnt/"* ]]; then
explorer.exe "$1"
else
bwsop "$1"
fi
;;
fxml)
cmd.exe /c start SceneBuilder.exe "$@"
;;
*) nvim "$1" ;;
esac
return 0
elif [[ -d "$1" ]]; then
op "$1"
fi
}
# this alias to call the sqlite3.Exe file
alias sqlite="sqlite"
# this function for ssqlite alias
function sqlite(){
if [[ $# -eq 0 ]]; then
echo "■■▶ Please specify a file.db ";
else
if [[ $# -eq 1 && "${1##*.}" -eq "db" ]]; then
c && br;
sqlite3.exe $@;
cv;
else
sqlite3.exe $@;
fi
fi
}
# this alias to call the windows nodeJS Program
alias node="node"
# this function for node alias
function node(){
node.exe $@;
}
# this alias to launch eclipse IDE
alias eclipse="eclipse"
# this function for eclipse alias
function eclipse(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start eclipse.exe ${@:-.}
else
cd /mnt/c
cmd.exe /c start eclipse.exe ${@:-.}
cd - &>/dev/null
fi
}
# this alias to launch Apache NetBeans IDE
alias beans="beans"
# this function for beans alias
function beans(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start netbeans64.exe ${@:-.}
else
cd /mnt/c
cmd.exe /c start netbeans64.exe ${@:-.}
cd - &>/dev/null
fi
}
# this alias to launch intelijieda
alias idea="idea"
# this function for idea alias
function idea(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start idea64.exe ${@:-.}
else
cd /mnt/c
cmd.exe /c start idea64.exe ${@:-.}
cd - &>/dev/null
fi
}
# this alias to open PyCharm
alias charm="charm"
# this function for charm alias
function charm(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start pycharm64.exe ${@:-.}
else
cd /mnt/c
cmd.exe /c start pycharm64.exe ${@:-.}
cd - &>/dev/null
fi
}
# this alias to launch ppsspp
alias psp="psp"
# this function for psp alias
function psp(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start PPSSPPWindows.exe $@
else
cd /mnt/c
cmd.exe /c start PPSSPPWindows.exe $@
cd - &>/dev/null
fi
}
# this alias to open tor browser
alias tor="tor"
# this function for tor alias
function tor(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start tor.exe $@
else
cd /mnt/c
cmd.exe /c start tor.exe $@
cd - &>/dev/null
fi
}
# this alias for windows ngrok
alias ngrok="ngrok"
# this function for ngrok alias
# IMPROVED: 05-29-2024 10:25
function ngrok(){
# default ngrok command that redirects
# to a new terminal so the current one
# is available for other commands
local ngrok_cmd='cmd.exe /c start ngrok "$@"'
# check for dashes then do not
# redirect to another terminal
for arg in "$@"; do
if [[ "$arg" == -* || "$arg" == --* ]]; then
local ngrok_cmd='cmd.exe /c ngrok "$@"'
break
fi
done
# Check the current directory
# because ngrok will work only
# on windows'directory rather
# than WSL's one so we move
if [[ "$PWD" == "/mnt/"* ]]; then
eval $ngrok_cmd
else
cd /mnt/c
eval $ngrok_cmd
cd - &>/dev/null
fi
}
# Completion function for ngrok
_ngrok_completion() {
local cur
cur="${COMP_WORDS[COMP_CWORD]}"
# Define the list of possible completions
local commands="api completion config credits diagnose help http service start tcp tls tunnel update version"
# Provide completion options based on the current word being completed
COMPREPLY=($(compgen -W "${commands}" -- "$cur"))
}
# Register the completion function for ngrok
complete -F _ngrok_completion ngrok
# this alias to launch process explorer
alias prex="prex"
# this function for prex alias
function prex(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start procexp64
else
cd /mnt/c
cmd.exe /c start procexp64
cd - &>/dev/null
fi
}
# Alias to call the windows npm
alias npm="npm"
# Function for npm alias
function npm() {
local npm_cmd='cmd.exe /c start npm "$@"'
for arg in "$@"; do
if [[ ("$arg" != "--verbose" || "$arg" != "-g") && ("$arg" == -* || "$arg" == --*) ]]; then
local npm_cmd='cmd.exe /c npm "$@"'
break
fi
done
if [[ "$PWD" == "/mnt/"* ]]; then
eval $npm_cmd
else
echo "${BOLD}${RED}Please execute this command inside Windows directory!"
fi
}
# Alias to call the windows npx
alias npx="npx"
# Function for npx alias
function npx() {
local npx_cmd='cmd.exe /c start npx "$@"'
for arg in "$@"; do
if [[ "$arg" != "--verbose" && ("$arg" == -* || "$arg" == --*) ]]; then
local npx_cmd='cmd.exe /c npx "$@"'
break
fi
done
if [[ "$PWD" == "/mnt/"* ]]; then
eval $npx_cmd
else
echo "${BOLD}${RED}Please execute this command inside Windows directory!"
fi
}
# Alias to call the windows vue
alias vue="vue"
# Function for vue alias
function vue() {
local vue_cmd='cmd.exe /c start vue "$@"'
for arg in "$@"; do
if [[ "$arg" != "--verbose" && ("$arg" == -* || "$arg" == --*) ]]; then
local vue_cmd='cmd.exe /c vue "$@"'
break
fi
done
if [[ "$PWD" == "/mnt/"* ]]; then
eval $vue_cmd
else
echo "${BOLD}${RED}Please execute this command inside Windows directory!"
fi
}
# this alias to open apple music
alias music="music"
# this function for music alias
function music(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start AppleMusic.exe
else
cd /mnt/c
cmd.exe /c start AppleMusic.exe
cd - &>/dev/null;
fi
}
# this alias to launch xampp
alias xampp="xampp"
# this function for xampp alias
function xampp(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start xampp-control.exe
else
cd /mnt/c
cmd.exe /c start xampp-control.exe
cd - &>/dev/null;
fi
}
# this alias to open notepad
alias ntp="ntp"
# this function for ntp alias
function ntp(){
if [[ $# -eq 0 ]]; then
cmd.exe /c start notepad.exe 2>/dev/null
elif [[ $# -eq 1 ]]; then
local formatted_path=$(wslpath -w .)
cmd.exe /c start notepad.exe "$formatted_path\\$1" 2>/dev/null
else
echo "${BOLD} ■■▶ Usage : ntp file_to_open" && br;
fi
}
# this alias to open VirtualBox
alias vm="vm"
# this function for vm alias
function vm(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start VirtualBox.exe
else
cd /mnt/c
cmd.exe /c start VirtualBox.exe
cd - &>/dev/null;
fi
}
# this alias to open wireshark
alias wsh="wsh"
# this alias for wsh alias
function wsh(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c start wireshark.exe
else
cd /mnt/c
cmd.exe /c start wireshark.exe
cd - &>/dev/null;
fi
}
# this alias to open total commander
alias tcmd="TOTALCMD64.exe && cv"
# this alias to launch windows python
alias python="python.exe"
# this alias to launch windows go
alias go="go"
# this function for go alias
function go(){
# check if we are inside wsl directory
# or inside a symbolic link
if [[ "$PWD" == "/mnt/"* || -L "$PWD" ]]; then
cmd.exe /c go $@
else
echo "${BOLD}${RED}Please execute this command inside Windows (/mnt/*) directory!"
fi
}
# this alias to run rustc
alias rustc="rustc"
# this function for rustc alias
function rustc(){
# check if we are inside wsl directory
# or inside a symbolic link
if [[ "$PWD" == "/mnt/"* || -L "$PWD" ]]; then
cmd.exe /c rustc $@
else
echo "${BOLD}${RED}Please execute this command inside Windows (/mnt/*) directory!"
fi
}
# this alias to run cargo
alias cargo="cargo"
# this function for cargo alias
function cargo(){
# check if we are inside wsl directory
# or inside a symbolic link
if [[ "$PWD" == "/mnt/"* || -L "$PWD" ]]; then
cmd.exe /c cargo $@
else
echo "${BOLD}${RED}Please execute this command inside Windows (/mnt/*) directory!"
fi
}
# this alias to launch windows java
alias java="java.exe"
# this alias to launch javac windows
alias javac="javac.exe"
# this alias to launch jar windows
alias jar="jar.exe"
# Alias to call the windows pip
alias pip="pip"
# Function for pip alias
function pip() {
# check if we are inside wsl directory
# or inside a symbolic link
if [[ "$PWD" == "/mnt/"* || -L "$PWD" ]]; then
cmd.exe /c pip "$@"
else
cd /mnt/c
cmd.exe /c pip "$@"
cd - &>/dev/null;
fi
}
# this alias to use windows nslookup
alias nslookup="nslookup"
# this function for nslookup alias
function nslookup(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c nslookup "$@"
else
cd /mnt/c
cmd.exe /c nslookup "$@"
cd - &>/dev/null;
fi
}
# this alias to use windows arp
alias arp="arp"
# this function for arp alias
function arp(){
if [[ "$PWD" == "/mnt/"* ]]; then
cmd.exe /c arp "$@"
else
cd /mnt/c
cmd.exe /c arp "$@"
cd - &>/dev/null;
fi
}
# this alias to run jupyter notebook
alias jptr="jptr"
# this function for jptr alias
function jptr(){
# check if we are inside wsl directory
# or inside a symbolic link
if [[ "$PWD" == "/mnt/"* || -L "$PWD" ]]; then
cmd.exe /c start jupyter notebook
else
echo "${BOLD}${RED}Please execute this command inside Windows (/mnt/*) directory!"
fi
}
# this alias to launch gta san andreas
alias gta="gta"
# this function for gta alias
function gta(){
cd /mnt/d/NTSOA/INSTALLED/GTA\ SAN\ ANDREAS
cmd.exe /c start /affinity 2 gta_sa.exe
cd - &>/dev/null
}
# this alias to open visual paradigm
alias paradigm="paradigm"
# this function for paradigm alias
function paradigm(){
cd /mnt/d/NTSOA/INSTALLED/VISUAL\ PARADIGM/Visual\ Paradigm\ CE\ 17.2/bin
explorer.exe visual.lnk
cd - &>/dev/null
}
# this alias open Bluestacks
alias android="android"
# this function for android alias
function android(){
cd /mnt/c/Program\ Files/BlueStacks_nxt
cmd.exe /c start HD-Player.exe
cd - &>/dev/null
}
#######################################################################
P10k Config
### p10k Config
# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh.
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
#######################################################################