197 lines
4.5 KiB
Bash

# vim: ft=bash
_sod() {
if [ -d "$1" ] && [ -n "$(ls "$1")" ]; then
local filename
for filename in $(ls "$1" | sort -n)
do
source "${1}/${filename}"
done
fi
}
lt() {
du -h "${1:-.}" 2>/dev/null | sort -h
}
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() {
if [ -f "./venv/bin/activate" ]; then
source "./venv/bin/activate"
return 0
fi
local activate_venv
activate_venv="$(find -P . -maxdepth 3 -type f -wholename '*/bin/activate' | sort | head -n 1)"
readonly activate_venv
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
echo "extract: error: usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
return 2
fi
if ! [ -f "$1" ]; then
echo "extract: error: '$1' file does not exist" >&2
return 1
fi
local -r 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
)
mcd() {
if [ -z "$1" ]; then
cd "$(mktemp -td "${USER:-user}.XXXX")"
else
mkdir -p "$1" && cd "$1"
fi
}
open() {
test -e $1 || return 1
nohup xdg-open $1 1>/dev/null 2>&1 &
}
split-file() {
test -e "$1" || return 1
local -r 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")
readonly filename
if [ "${filename:0:1}" = "." ]; then
filename="${filename:1}"
fi
echo ${filename#*.}
}
rmt() {
local -r TRASH="${HOME}/.trash"
local filename
for filename in "$@"
do
local filename_out_path
filename_out_path="${TRASH}$(realpath "$filename")"
readonly filename_out_path
mkdir -p "$(dirname "$filename_out_path")"
mv "$filename" "${filename_out_path}_$(date +%s)"
done
}
showtips() {
local -r tips_dir="${HOME}/.tips"
if [ ! -d "$tips_dir" ]; then
mkdir "$tips_dir" 2>/dev/null
git init "$tips_dir"
fi
local content
local filename
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
}
# Enable X11Forwarding and disable mux session
sshx() {
ssh -X -o ControlMaster=no -o ControlPath=none "$@"
}
django_start_project() (
set -ue
local -r project_name="$1"
mkdir "$project_name"
cd "$project_name"
python3 -m virtualenv venv
. venv/bin/activate
pip install django
django-admin startproject core .
git init
)