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" } lsl () { local DIR DIR="$1" if [ -z "$1" ]; then DIR="$(pwd)" fi ls -lhFA --color=always "${DIR}" | tail -n +2 | less -R } workon() { local ENV_NAME ENV_NAME="$1" if [ -z "$1" ]; then ENV_NAME=$(basename "$(pwd)") fi source /opt/pythonenv/"$ENV_NAME"/bin/activate } cl() { local DIR DIR="$*" if [ $# -lt 1 ]; then DIR="$HOME" fi cd "${DIR}" && ls -F --color=auto } 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 () { mkdir -p "$1" && cd "$1" || return } # Syntax-highlight JSON strings or files # Usage: `json '{"foo":42}'` or `echo '{"foo":42}' | json` json() { if [ -t 0 ]; then # argument python -m json.tool <<< "$*" | pygmentize -l javascript else # pipe python -m json.tool | pygmentize -l javascript fi } # docker # execute bash shell in running container docker_ex() { docker exec -it $1 ${2:-bash} } # ips of docker containers docker_ips() { local DOC IP OUT NAME PORT for DOC in $(docker ps -q | tr '\n' ' ') do IP="$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$DOC" 2>/dev/null)" PORT="$(docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}}{{(index $conf 0).HostPort}}{{end}}' "$DOC" 2>/dev/null)" NAME="$(docker inspect --format='{{.Name}}' "$DOC" 2>/dev/null)" OUT+="${NAME#"/"}"'\t'"$IP":"$PORT"'\n' done echo -e $OUT 2>/dev/null | column -t } py() { test -z "$@" && ipython -i -c "q = exit" || python3 $@ } # toggle wireguard vpn with interface /etc/wireguard/wg0.conf vpn() { local STATUS SERVICE CONFIG CONFIGFILE CONFIG="$1" test -z "$CONFIG" && CONFIG="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" || sudo systemctl start "$SERVICE" ) } open() { test -e $1 || return 1 nohup xdg-open $1 1>/dev/null 2>&1 & }