# Functions memq() { # memq ITEM ARRAY ## Test whether an ITEM is a member of ARRAY. ## Pass ARRAY as ${ARRAY[@]}. local e needle="$1" shift for e; do [[ "$e" == "$needle" ]] && { return 0 } done return 1 } rebashrc() { # rebashrc ## Reload ~/.bashrc printf "Loading ~/.bashrc..." >&2 if source "$HOME/.bashrc"; then echo "OK." >&2 else echo "ERROR!" >&2 fi } first_which() { # first_which COMMAND... ## Return the fully-qualified path of the first COMMAND found in $PATH. while :; do command -v "$1" && break [ -z "$1" ] && return 1 shift done } please() { # please [COMMAND...] # if run without arguments, run the last command with 'sudo' (aka sudo !!) # if run WITH arguments, alias as sudo history -d -1 if [ -z "$1" ]; then #set -- $(HISTTIMEFORMAT=$'\t' history 2 | sed 's/^.*\t//;q') set -- $(fc -lnr | sed 1q) fi echo >&2 sudo "$@" history -s sudo "$@" "${DEBUG:-false}" || sudo "$@" } mkcd() { if [ $# -lt 1 ]; then command cd return "$?" fi if [ "x$1" = x- ]; then command cd - return "$?" fi if ! [ -d "$1" ]; then read -p "$1 doesn't exist. Create (y/N)? " yn case "$yn" in n* | N*) return 1 ;; y* | Y*) mkdir -p "$1" ;; *) return 1 ;; esac fi command cd "$1" } alias cd='mkcd ' # from tomasino # alias julian='echo "x = $(date +%s); scale=5; x / 86400 + 2440587.5" | bc' julian() { echo "x = $(date ${1:+-d "$*"} +%s); scale=5; x / 86400 + 2440587.5" | bc } # find files for pipelines f() { find "${1:-$PWD}" -depth | while read -r file; do printf '%q\n' "$file" done } words() { grep -E "$1" /usr/share/dict/words | sed -e '/^[A-Z]/d' -e "/'s$/d" } if ! command -v dict >/dev/null 2>&1; then dict() { curl "dict://dict.org/d:$1" | less } fi if command -v thesauracles >/dev/null 2>&1; then thesauraphrase() { for word in "$@"; do thesauracles -q "$word" done | tr '\n' ' ' echo } fi up() { : "${UP_TODIRECTORY:=..}" : "${UP_SPECIALARGS:=true}" local ret=0 # echo "$UP_TODIRECTORY" "$UP_SPECIALARGS" if "$UP_SPECIALARGS"; then case "$1" in '') cd "$UP_TODIRECTORY" ;; up) UP_TODIRECTORY="${UP_TODIRECTORY}/.." up "${@:2}" ;; --) UP_SPECIALARGS=false up "${@:2}" ;; -*) if (( "$1" == -1 )); then up else UP_TODIRECTORY="${UP_TODIRECTORY}/.." up $(( "$1" + 1 )) fi ;; *) while cd ..; do case "$PWD" in /) ret=1; break ;; */"$1") break ;; esac done ;; esac else case "$1" in '') cd "$UP_TODIRECTORY" ;; *) while cd ..; do case "$PWD" in /) ret=1; break ;; */"$1") break ;; esac done ;; esac fi UP_TODIRECTORY= UP_SPECIALARGS= return "$ret" } apk() { # wrapper for apk(1) apk="$(which apk)" test -z "$apk" && return 1 case "$1" in add|del|fix|update|upgrade) doas "$apk" "$@" ;; install) shift; apk add "$@" ;; remove) shift; apk del "$@" ;; *) "$apk" "$@" ;; esac } sl() { printf >&2 '%s\n' "CHOO CHOO!" ls "$@" } mkssh() { ssh-keygen -t ed25519 -f "$HOME/.ssh/$1" cat "$HOME/.ssh/$1.pub" | tee /dev/stdout | wl-copy } p() { cmd="$(history | awk '{for(i=4;i<=NF;i++)printf "%s ",$i;print""}' | tail -n2 | head -n1)" echo "$cmd" eval $cmd }