2017-06-12 16:22:05 +02:00
###########################
#### Function Definitions #
###########################
2017-07-14 21:20:20 +02:00
## Selfupdate
function dotfiles_selfupdate
{
2020-02-14 16:37:44 +01:00
( . $DOTFILES /check_for_update.sh && _upgrade_dotfiles)
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## get cheat sheets for commands from cheat.sh. Usage: cheat commandname
function cheat
2017-06-12 16:22:05 +02:00
{
2020-02-14 16:37:41 +01:00
curl " https://cheat.sh/ $1 "
2018-03-31 02:33:42 +02:00
}
# get cheat sheets for commands matching $1
function cheatall
{
2020-02-14 16:37:41 +01:00
curl " https://cheat.sh/~ $1 "
2017-06-12 16:22:05 +02:00
}
2020-02-14 16:37:50 +01:00
# List all docker tags for an image
function dockertags
{
2019-12-07 22:32:14 +01:00
if [ [ -z $( command -v jq) ] ] ; then
2020-02-14 16:37:50 +01:00
echo "jq not installed. Please install jq." 1>& 2
return
fi
i = 0
while [ [ $? = = 0 ] ] ; do
i = $(( $i + 1 ))
curl " https://registry.hub.docker.com/v2/repositories/library/ $1 /tags/?page= $i " 2>/dev/null | jq '."results"[]["name"]'
done
}
2020-03-08 19:43:47 +01:00
# watch with grc enabled
function watchgrc
{
watch -n 1 -c grc --colour= on " $@ "
}
2017-07-14 21:20:20 +02:00
## Simple calculator. Usage: calc 1+1, calc 5/7, calc "sqrt(2)"
function calc
2017-06-12 16:22:05 +02:00
{
2019-12-07 22:32:14 +01:00
awk " BEGIN { print $* } "
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## Make new directory and cd to that directory. Usage: mcd newfolder
2017-06-12 16:22:05 +02:00
function mcd
{
2019-12-07 22:32:14 +01:00
mkdir -p " $1 "
2017-06-12 16:22:05 +02:00
cd $1
}
## Print full path of item in current directory
function ppath
{
2019-12-07 22:32:14 +01:00
echo " $PWD / $1 "
2017-06-12 16:22:05 +02:00
}
2019-12-07 22:32:14 +01:00
## Color string with given color. Usage: color $colorname "string", available colors in colors.sh
2017-06-12 16:22:05 +02:00
function color
{
color = $1
2019-12-07 22:32:14 +01:00
set -x
2017-06-12 16:22:05 +02:00
shift 1
2019-12-07 22:32:14 +01:00
echo -e " $" $color " $@ ${ CLEAR } \n "
set +x
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## These functions return a colored version of the input string. Usage: red "string"
2017-06-12 16:22:05 +02:00
function red
{
2017-07-14 21:20:20 +02:00
echo -e " $Red $@ $CLEAR "
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
function green
{
echo -e " $Green $@ $CLEAR "
2017-06-12 16:22:05 +02:00
}
2020-02-14 16:37:39 +01:00
function blue
{
echo -e " $Blue $@ $CLEAR "
2017-06-12 16:22:05 +02:00
}
## Flashes the screen until user presses a key
function flasher
{
2017-07-14 21:20:20 +02:00
while true; do printf "\e[?5h\007" ; sleep 0.25; printf "\e[?5l" ; read -s -n -t1 && break; done ;
2017-06-12 16:22:05 +02:00
}
## Beep until user presses a key
function beeper
{
2017-07-14 21:20:20 +02:00
while true; do printf "\e[?5h\007" ; sleep 0.25; printf "\e[?5l" ; read -s -n -t1 && break; done ;
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## Search youtube for string ($1) and play video (uses mplayer)
2017-06-12 16:22:05 +02:00
function pyt
{
echo 'https://www.youtube.com/results?search_query=' " $( sed 's/ /%20/g' <<< $( tr '\' '+' <<< " $@ " ) ) " ; id = $( curl -s 'https://www.youtube.com/results?search_query=' " $( sed 's/ /%20/g' <<< $( tr '\' '+' <<< " $@ " ) ) " | grep -om3 '"[[:alnum:]]\{11\}"' | awk NR = = 3 | tr -d \" ) ; url = 'https://www.youtube.com/watch?v=' " $id " ; echo -e " URL:\t $url " ; youtube-dl -q $url -o - | mplayer -vo corevideo -really-quiet /dev/fd/3 3<& 0 </dev/tty;
}
2017-07-14 21:20:20 +02:00
## Same as above, only play music (uses mplayer)
2017-06-12 16:22:05 +02:00
function pmusic
{
echo 'https://www.youtube.com/results?search_query=HD%20' " $( sed 's/ /%20/g' <<< $( tr '\' '+' <<< " $@ " ) ) " ; id = $( curl -s 'https://www.youtube.com/results?search_query=' HD%20" $( sed 's/ /%20/g' <<< $( tr '\' '+' <<< " $@ " ) ) " | grep -om3 '"[[:alnum:]]\{11\}"' | awk NR = = 3 | tr -d \" ) ; url = 'https://www.youtube.com/watch?v=' " $id " ; echo -e " URL:\t $url " ; youtube-dl -q $url -o - | mplayer -vo corevideo -really-quiet /dev/fd/3 3<& 0 </dev/tty;
}
## Simple http server for current directory (or path)
function httpserver
{
2019-12-07 22:32:14 +01:00
(
if [ [ -d $1 ] ] ; then
cd " $1 " && echo " Starting webserver in $( realpath $1 ) / " || echo " directory: $1 does not exist " >& 2 || exit 1
else
echo " Starting webserver in $PWD / "
fi
open "http://localhost:8000" & >/dev/null &
if [ [ $( python --version) = = "Python 3" * ] ] ; then
python -m http.server 8000
else
python -m SimpleHTTPServer
fi
)
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## Upload something using the transfer.sh service. Usage: transfer filename
2017-06-12 16:22:05 +02:00
function transfer
2018-03-31 02:33:42 +02:00
{
2017-06-12 16:22:05 +02:00
basefile = $( basename " $1 " | sed -e 's/[^a-zA-Z0-9._-]/-/g' )
out = $( curl --progress-bar --upload-file " $1 " " https://transfer.sh/ $basefile " )
echo -e " Done, file at:\t $out "
2017-07-14 21:20:20 +02:00
if [ [ $( uname) = = "Darwin" ] ] ; then
2018-03-31 02:33:42 +02:00
echo " $out " | pbcopy
else
2017-07-14 21:20:20 +02:00
echo " $out "
fi
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## If connecting through ssh and reverse forwarding port 2222 (ssh -R 2222:localhost:22 ), this function allows to copy the files back to the machine one is connecting from by typing 'mecp filename' (configure the username for "localhost" in ~/.ssh/config or add an username)
2017-06-12 16:22:05 +02:00
function mecp
{
2017-07-14 21:20:20 +02:00
rsync -r -P -e "ssh -p 2222" -R " $@ " localhost:~/Desktop/
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## generate a password using pwgen, generate_password 20 generates a 20 characters long password
2017-06-12 16:22:05 +02:00
function generate_password
{
2017-07-14 21:20:20 +02:00
pwgen -1sycn $1
2017-06-12 16:22:05 +02:00
}
2017-07-14 21:20:20 +02:00
## Generate a password from dev urandom using only printable characters
function genpwd
{
if [ [ $1 ] ] ; then
2017-06-12 16:22:05 +02:00
strlen = $1
else
strlen = 32
fi
2019-12-07 22:33:29 +01:00
# All characters excluding backlash
env LC_CTYPE = C tr -dc '[:graph]\' < /dev/urandom | fold -w $strlen | head -n 1
2017-06-12 16:22:05 +02:00
}
if [ [ " $( uname) " = = "Darwin" ] ] ; then
2017-07-14 21:20:20 +02:00
## Copy output of previous command to termbin.com (command line pastebin) and put in in clipboard
function termbin
{
2017-06-12 16:22:05 +02:00
nc termbin.com 9999 | pbcopy && echo -n " $( pbpaste) --> in clipboard "
}
else
2017-07-14 21:20:20 +02:00
## Copy output of previous command to termbin.com (command line pastebin)
function termbin
{
2020-02-14 16:37:41 +01:00
nc termbin.com 9999
2017-06-12 16:22:05 +02:00
}
fi
2017-07-14 21:20:20 +02:00
## List defined functions in $DOTFILES/functions.sh
function list_functions
{
2019-12-07 22:32:14 +01:00
grep --color= no -A 1 '^##' $DOTFILES /functions.sh | sed -E 's/function (.*)/\1/g'
2017-07-14 21:20:20 +02:00
}
2017-06-12 16:22:05 +02:00
###########################
2018-03-31 02:33:42 +02:00
## MAC SPECIFIC #
2017-06-12 16:22:05 +02:00
###########################
2017-07-17 01:28:35 +02:00
if [ [ " $( uname) " = = "Darwin" ] ] ; then
2017-07-14 21:20:20 +02:00
## Create a RAM disk. Default size 1GB. If supplied, first argument defines the RAM disk size in GB
function ramdisk
{
2017-07-17 01:28:35 +02:00
if [ [ -e $1 ] ] ; then
2017-07-14 21:20:20 +02:00
sizeingb = $1
else
sizeingb = 1
fi
2018-03-31 02:33:42 +02:00
2017-07-14 21:20:20 +02:00
# Numsectors is size in bytes / 512 (sector size in bytes)
name = 'RAM_disk'
sizeinbytes = $(( $sizeingb * 1000 * * 3 ))
NUMSECTORS = $(( $sizeinbytes / 512 ))
mydev = $( hdiutil attach -nomount ram://$NUMSECTORS )
# strip whitespace (hdiutil outputs a lot of spaces/tabs along with the device name)
mydev = $( echo " $mydev " | xargs echo )
2019-12-07 22:32:14 +01:00
newfs_hfs " $mydev "
2017-07-14 21:20:20 +02:00
mkdir -p " /tmp/ $name "
2019-12-07 22:32:14 +01:00
mount -t hfs " $mydev " " /tmp/ $name "
2017-07-14 21:20:20 +02:00
echo " RAM Disk mounted: /tmp/ $name "
echo "To eject (destroy) RAM disk, use:"
echo " $ diskutil eject $mydev "
}
## Open a pdf version of the man in Preview
function man2pdf
{
man -t " $1 " | open -f -a Preview
}
## Open Man in separate (different-looking) window
function nman
{
2017-07-17 01:28:35 +02:00
if [ $# -eq 1 ] ; then
2019-12-07 22:32:14 +01:00
open " x-man-page:// $1 "
2017-07-17 01:28:35 +02:00
elif [ $# -eq 2 ] ; then
2019-12-07 22:32:14 +01:00
open " x-man-page:// $1 / $2 "
2017-07-14 21:20:20 +02:00
fi
}
2019-12-07 22:32:14 +01:00
fi
2017-06-12 16:22:05 +02:00
2019-12-07 22:32:14 +01:00
### end of mac-specific functions
2018-03-31 02:33:42 +02:00
function pipupdate( ) {
2019-12-07 21:31:14 +01:00
for pip in pip2 pip3; do
if [ -z $pip ] ; then
continue
fi
$pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 $pip install -U
2018-03-31 02:33:42 +02:00
done
}
2017-06-12 16:22:05 +02:00
2020-02-14 16:37:42 +01:00
# dotfiles user functions
2019-12-07 22:32:14 +01:00
if [ [ -f $HOME /.dotfiles_functions ] ] ; then
source " $HOME /.dotfiles_functions "
2017-06-12 16:22:05 +02:00
fi