_sod() { if [ -d "$1" ] && [ -n "$(ls "$1")" ]; then for FILENAME in $(ls "$1" | sort -n) do source "$1/$FILENAME" done fi } lt() { du -h "${1:-.}" 2>/dev/null | sort -h | tac } destroy() { test -n "$1" || return 1 test -e "$1" || return 1 echo -n "Sure want to destroy file '$1' with size $(du -hs "$1" | awk '{printf $1}') [y/N] " read -r response [[ $response == [yY] ]] && shred -zun 25 "$1" } workon() { source /opt/pythonenv/"${1:-$(basename $PWD)}"/bin/activate } py() { if [[ -z "$@" && -x "$(command -v ipython 2>/dev/null)" ]]; then ipython -i -c "q = exit" else python3 $@ fi } ve() { python3 -m virtualenv "${1:-venv}" && . "${1:-venv}/bin/activate" } va() { local activate_venv if [ -f "./venv/bin/activate" ]; then source "./venv/bin/activate" return 0 fi activate_venv="$(find -P . -maxdepth 3 -type f -wholename '*/bin/activate' | sort | head -n 1)" if [ -n "$activate_venv" ]; then source "$activate_venv" return 0 else echo "va: error: virtual environment not found, use python3 -m virtualenv venv" >&2 return 1 fi } extract() { if [ -z "$1" ]; then # if string non-zero # display usage if no parameters given echo "extract: error: usage: extract ." return 2 fi if ! [ -f "$1" ]; then # if file not exist echo "extract: error: '$1' file does not exist" >&2 return 1 fi local NAME NAME=${1%%.*} # removes extension from filename if [ -e "$NAME" ]; then echo "extract: error: '$NAME' exists" >&2 return 1 fi mkdir "$NAME" && cd "$NAME" || return 1 case $1 in *.tar.bz2) tar xjf ../"$1" ;; *.tar.gz) tar xzf ../"$1" ;; *.tar.xz) tar xJf ../"$1" ;; *.lzma) unlzma ../"$1" ;; *.bz2) bunzip2 ../"$1" ;; *.rar) unrar x -ad ../"$1" ;; *.gz) gunzip ../"$1" ;; *.tar) tar xf ../"$1" ;; *.tbz2) tar xjf ../"$1" ;; *.tgz) tar xzf ../"$1" ;; *.zip) unzip ../"$1" ;; *.Z) uncompress ../"$1" ;; *.7z) 7z x ../"$1" ;; *.xz) unxz ../"$1" ;; *.exe) cabextract ../"$1" ;; *) echo "extract: error: '$1' - unknown archive method" >&2 ;; esac cd .. } mcd() { if [ -z "$1" ]; then cd "$(mktemp -td "${USER:-user}.XXXX")" else mkdir -p "$1" && cd "$1" fi } # toggle wireguard vpn with interface /etc/wireguard/wg0.conf # to allow sudo user toggle vpn without password: ## sudo groupadd wireguard ## sudo usermod -aG wireguard $USER vpn() { local STATUS SERVICE CONFIG CONFIGFILE CONFIG="${1:-wg0}" CONFIGFILE="/etc/wireguard/$CONFIG.conf" test -e "$CONFIGFILE" || (echo "Config '$CONFIGFILE' not exists" >&2; return 1) && ( SERVICE="wg-quick@$CONFIG.service" systemctl --quiet is-active "$SERVICE" && \ (sudo systemctl stop "$SERVICE" && echo DOWN) || \ (sudo systemctl start "$SERVICE" && ip -br a | grep "$CONFIG" | awk '{print $1":\t"$3}') ) } toggle-ssh-proxy() { SSH_PROXY_CONTROL_FILE="$XDG_RUNTIME_DIR/ssh_$1_proxy.control" if [ -z "$1" ]; then echo "Proxy ssh server hostname not specified" 1>&2 return 1 fi if [ -e "$SSH_PROXY_CONTROL_FILE" ]; then unset {http,https,ftp,rsync,no}_proxy ssh -S "$SSH_PROXY_CONTROL_FILE" -O exit "$1" unset SSH_PROXY_PID echo "Disabled" else ssh -nCTN -S "$SSH_PROXY_CONTROL_FILE" -D 1080 "$1" export {http,https,ftp,rsync}_proxy="socks5://127.0.0.1:1080" && \ export no_proxy="localhost,127.0.0.1/8,localaddress,.localdomain.com,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12" echo "Enabled" fi } open() { test -e $1 || return 1 nohup xdg-open $1 1>/dev/null 2>&1 & } split-file() { test -e "$1" || return 1 local _size="${2:-1G}" if [ -d "$1" ]; then (mkdir "$1.tar.gz.splitted" && cd "$1.tar.gz.splitted" && tar -cz "../$1" | split -d -b "$_size") else (mkdir "$1.splitted" && cd "$1.splitted" && split -d -b "$_size" "../$1") fi } json() { if [ -t 0 ]; then # argument python -m json.tool <<< "$*" else # pipe python -m json.tool fi } _get_full_file_extension() { local filename filename=$(basename "$1") if [ "${filename:0:1}" = "." ]; then filename="${filename:1}" fi echo ${filename#*.} } rmt() { local TRASH TRASH=~/.trash local filename for filename in $* do local filename_out_path="${TRASH}$(realpath "$filename")" mkdir -p "$(dirname "$filename_out_path")" mv "$filename" "${filename_out_path}_$(date +%s)" done } showtips() { TIPS_DIR="$HOME/.tips" if [ ! -d "$TIPS_DIR" ]; then mkdir "$TIPS_DIR" 2>/dev/null git init "$TIPS_DIR" fi local content for filename in "$TIPS_DIR"/* do content="$(cat "$filename")" echo "$content" done return 0 } most-often-commands() { history 0 | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn } # calculator = () { echo "$*" | bc -l } # Enable X11Forwarding and disable mux session sshx() { ssh -X -o ControlMaster=no -o ControlPath=none $@ }