|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# make xclip work as I would expect. Copy to clipboard if piped data. Paste from otherwise
|
|
|
|
function clip(){
|
|
|
|
if type -p /usr/bin/xclip >/dev/null; then
|
|
|
|
if [[ -p /dev/stdin ]] ; then
|
|
|
|
# stdin is a pipe
|
|
|
|
# stdin -> clipboard
|
|
|
|
/usr/bin/xclip -i -selection clipboard
|
|
|
|
else
|
|
|
|
# stdin is not a pipe
|
|
|
|
# clipboard -> stdout
|
|
|
|
/usr/bin/xclip -o -selection clipboard
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo "Remember to install xclip"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#Swap two files
|
|
|
|
function swap() {
|
|
|
|
[ -e "$1._tmp" ] && return
|
|
|
|
mv "$1" "$1._tmp"
|
|
|
|
mv "$2" "$1"
|
|
|
|
mv "$1._tmp" "$2"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Add old extention
|
|
|
|
function old() {
|
|
|
|
for file in "$@"; do
|
|
|
|
mv "$file" "$file.old"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
# Cd that does what I normally want
|
|
|
|
function cd() {
|
|
|
|
# Try a normal cd
|
|
|
|
builtin cd "$@" 2> /dev/null
|
|
|
|
if [ $? = 0 ]; then
|
|
|
|
# If we get here cd was successful so do a ls
|
|
|
|
ls
|
|
|
|
else
|
|
|
|
# If we get here, cd was not successful
|
|
|
|
if [ -f "$1" ]; then
|
|
|
|
# If there is a file there, try and open it in vim
|
|
|
|
# ToDo: smarter open so it will open in zathura if it's a pdf for
|
|
|
|
# example
|
|
|
|
$EDITOR "$1"
|
|
|
|
else
|
|
|
|
# Otherwise fail clearly
|
|
|
|
echo "Can't cd"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
#updatePath
|
|
|
|
}
|
|
|
|
|
|
|
|
# Make a folder then cd into it
|
|
|
|
function mkcd() {
|
|
|
|
mkdir -p "$1"
|
|
|
|
cd "$1"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Adds sub folders in by .bin directory to the PATH if they are not already in it
|
|
|
|
# Also adds .bin to the path adjacent to any public_html folder
|
|
|
|
function updatePath(){
|
|
|
|
# Reset the path
|
|
|
|
PATH=$(echo $PATH | sed -E "s/:\/home\/jonathan\/\.bin\/.*//g")
|
|
|
|
for d in ~/.bin/*/; do
|
|
|
|
if [[ :$PATH: != *:"$d":* ]] ; then
|
|
|
|
PATH+=":$d"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
public_html=${PWD%/public_html*}/public_html
|
|
|
|
if [ -d $public_html ]; then
|
|
|
|
PATH+=":${PWD%/public_html*}/.bin"
|
|
|
|
fi
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
function reset_colourscheme(){
|
|
|
|
if [ -L $HOME/.dotfiles/shells/zsh/current-color-scheme ]; then
|
|
|
|
source $HOME/.dotfiles/shells/zsh/current-color-scheme
|
|
|
|
fi
|
|
|
|
exit 2
|
|
|
|
}
|
|
|
|
|
|
|
|
# If running ssh interactively (not tab completion) change the colour scheme
|
|
|
|
function ssh(){
|
|
|
|
if [[ -t 0 ]]; then
|
|
|
|
if [ -L $HOME/.dotfiles/shells/zsh/ssh-color-scheme ]; then
|
|
|
|
source $HOME/.dotfiles/shells/zsh/ssh-color-scheme
|
|
|
|
trap "reset_colourscheme" 2
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
command /usr/bin/ssh "$@"
|
|
|
|
if [[ -t 0 ]]; then
|
|
|
|
if [ -L $HOME/.dotfiles/shells/zsh/current-color-scheme ]; then
|
|
|
|
source $HOME/.dotfiles/shells/zsh/current-color-scheme
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Turn on a proxy
|
|
|
|
# Note that this is not fool proof. It is up to applications to check the
|
|
|
|
# environment variables
|
|
|
|
function proxy_on() {
|
|
|
|
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
|
|
|
|
|
|
|
|
if (( $# > 0 )); then
|
|
|
|
valid=$(echo $@ | sed -n 's/\([0-9]\{1,3\}.\?\)\{4\}:\([0-9]\+\)/&/p')
|
|
|
|
if [[ $valid != $@ ]]; then
|
|
|
|
>&2 echo "Invalid address"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
local proxy=$1
|
|
|
|
export http_proxy="$proxy" \
|
|
|
|
HTTP_PROXY="$proxy" \
|
|
|
|
https_proxy="$proxy" \
|
|
|
|
HTTPS_PROXY="$proxy" \
|
|
|
|
ftp_proxy="$proxy" \
|
|
|
|
FTP_PROXY="$proxy" \
|
|
|
|
rsync_proxy="$proxy" \
|
|
|
|
RSYNC_PROXY="$proxy"
|
|
|
|
echo "Proxy environment variable set."
|
|
|
|
return 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo -n "username: "; read username
|
|
|
|
if [[ $username != "" ]]; then
|
|
|
|
echo -n "password: "
|
|
|
|
read -es password
|
|
|
|
local pre="$username:$password@"
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo -n "server: "; read server
|
|
|
|
echo -n "port: "; read port
|
|
|
|
local proxy=$pre$server:$port
|
|
|
|
export http_proxy="$proxy" \
|
|
|
|
https_proxy=$proxy \
|
|
|
|
ftp_proxy=$proxy \
|
|
|
|
rsync_proxy=$proxy \
|
|
|
|
HTTP_PROXY=$proxy \
|
|
|
|
HTTPS_PROXY=$proxy \
|
|
|
|
FTP_PROXY=$proxy \
|
|
|
|
RSYNC_PROXY=$proxy
|
|
|
|
}
|
|
|
|
|
|
|
|
function proxy_off(){
|
|
|
|
unset http_proxy https_proxy ftp_proxy rsync_proxy \
|
|
|
|
HTTP_PROXY HTTPS_PROXY FTP_PROXY RSYNC_PROXY
|
|
|
|
echo -e "Proxy environment variable removed."
|
|
|
|
}
|
|
|
|
|
|
|
|
# Sanity check for dd
|
|
|
|
function dd(){
|
|
|
|
local drive="$(echo "$@" | grep -oE 'of=[^ ]+' | cut -d '=' -f 2-)"
|
|
|
|
if [ -n "$drive" ]; then
|
|
|
|
if mount | grep -q "$drive"; then
|
|
|
|
echo "It looks like that's mounted, probably not the drive you're after"
|
|
|
|
echo "If you are sure, run /usr/bin/dd ..."
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
/usr/bin/dd "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
# Man without options will use fzf to select a page
|
|
|
|
function man(){
|
|
|
|
MAN="/usr/bin/man"
|
|
|
|
if [ -n "$1" ]; then
|
|
|
|
$MAN "$@"
|
|
|
|
return $?
|
|
|
|
else
|
|
|
|
$MAN -k . | fzf --reverse --preview="echo {1,2} | sed 's/ (/./' | sed -E 's/\)\s*$//' | xargs $MAN" | awk '{print $1 "." $2}' | tr -d '()' | xargs -r $MAN
|
|
|
|
return $?
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
#
|
|
|
|
#######################
|
|
|
|
# Wordpress Helpers #
|
|
|
|
#######################
|
|
|
|
|
|
|
|
#Takes you to the parent theme
|
|
|
|
function ptheme() {
|
|
|
|
public_html=${${PWD%/public_html*}%/wiki*}/public_html
|
|
|
|
if [ -d $public_html ]; then
|
|
|
|
if [ -d $public_html/wp ]; then
|
|
|
|
wpPath=$public_html/wp;
|
|
|
|
else
|
|
|
|
wpPath=$public_html;
|
|
|
|
fi
|
|
|
|
domain="$(basename $(dirname $public_html ) ).local.jh"
|
|
|
|
theme=$(dirname $(wp --path="$wpPath" --url="$domain" theme path $(wp --path="$wpPath" --url="$domain" theme list 2> /dev/null | grep "parent" | awk '{print $1}') 2> /dev/null ))
|
|
|
|
if [ -d $theme ]; then
|
|
|
|
if [ -d "$theme" ]; then
|
|
|
|
cd $theme
|
|
|
|
else
|
|
|
|
echo " Can't find theme folder "
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo " Can't find theme folder "
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo " Can't find public_html folder."
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#Takes you to the child theme
|
|
|
|
function theme() {
|
|
|
|
if [ ! -z "$1" ]; then
|
|
|
|
ctheme=$(getthemepath "$1" 2> /dev/null)
|
|
|
|
else
|
|
|
|
ctheme=$(getthemepath 2> /dev/null)
|
|
|
|
fi
|
|
|
|
if [ ! -z "$ctheme" ]; then
|
|
|
|
cd $ctheme
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#Takes you to the js folder child theme
|
|
|
|
function js() {
|
|
|
|
ctheme=$(getthemepath)
|
|
|
|
if [ ! -z "$ctheme" ]; then
|
|
|
|
cd $ctheme/js
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#Takes you to the css folder child theme
|
|
|
|
function css() {
|
|
|
|
ctheme=$(getthemepath)
|
|
|
|
if [ ! -z "$ctheme" ]; then
|
|
|
|
cd $ctheme/css
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#Takes you to the plugin directory
|
|
|
|
function plugins() {
|
|
|
|
public_html=${${PWD%/public_html*}%/wiki*}/public_html
|
|
|
|
if [ -d $public_html ]; then
|
|
|
|
if [ -d $public_html/wp ]; then
|
|
|
|
wpPath=$public_html/wp;
|
|
|
|
else
|
|
|
|
wpPath=$public_html;
|
|
|
|
fi
|
|
|
|
cd $(wp --path="$wpPath" plugin path)
|
|
|
|
else
|
|
|
|
echo " Can't find public_html folder."
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#Takes you to the woocommece plugin directory
|
|
|
|
function woo() {
|
|
|
|
public_html=${${PWD%/public_html*}%/wiki*}/public_html
|
|
|
|
if [ -d $public_html ]; then
|
|
|
|
if [ -d $public_html/wp ]; then
|
|
|
|
wpPath=$public_html/wp;
|
|
|
|
else
|
|
|
|
wpPath=$public_html;
|
|
|
|
fi
|
|
|
|
cd $(dirname $(wp --path="$wpPath" plugin path woocommerce))
|
|
|
|
else
|
|
|
|
echo " Can't find public_html folder."
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#Takes you to the woocommerce templates plugin directory
|
|
|
|
function wooTemplates() {
|
|
|
|
public_html=${${PWD%/public_html*}%/wiki*}/public_html
|
|
|
|
if [ -d $public_html ]; then
|
|
|
|
if [ -d $public_html/wp ]; then
|
|
|
|
wpPath=$public_html/wp;
|
|
|
|
else
|
|
|
|
wpPath=$public_html;
|
|
|
|
fi
|
|
|
|
cd $(dirname $(wp --path="$wpPath" plugin path woocommerce))/templates
|
|
|
|
else
|
|
|
|
echo " Can't find public_html folder."
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#Takes you to the theme directory
|
|
|
|
function themes() {
|
|
|
|
public_html=${${PWD%/public_html*}%/wiki*}/public_html
|
|
|
|
if [ -d $public_html ]; then
|
|
|
|
if [ -d $public_html/wp ]; then
|
|
|
|
wpPath=$public_html/wp;
|
|
|
|
else
|
|
|
|
wpPath=$public_html;
|
|
|
|
fi
|
|
|
|
cd $(wp --path="$wpPath" theme path)
|
|
|
|
else
|
|
|
|
echo " Can't find public_html folder."
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
#function todo() {
|
|
|
|
# wikidir=${${PWD%/public_html*}%/wiki*}/wiki
|
|
|
|
# if [ -d "$wikidir" ]; then
|
|
|
|
# $EDITOR "$wikidir/ToDo.md"
|
|
|
|
# fi
|
|
|
|
#}
|
|
|
|
|
|
|
|
#This function toggles debug in wp-config
|
|
|
|
function debugToggle(){
|
|
|
|
public_html=${PWD%/public_html*}/public_html
|
|
|
|
if [ -d $public_html ]; then
|
|
|
|
current=$(egrep "'WP_DEBUG'" "$public_html/wp-config.php" | egrep -o "(true|false)")
|
|
|
|
[[ $current == true ]] && newvalue=false || newvalue=true
|
|
|
|
sed -i "s/'WP_DEBUG'.*/'WP_DEBUG', $newvalue\)\;/g" "$public_html/wp-config.php"
|
|
|
|
echo "WP_DEBUG is now $newvalue";
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function cat(){
|
|
|
|
local grcConfigs="$HOME/.config/grc/"
|
|
|
|
if ! type -p bat > /dev/null; then
|
|
|
|
/usr/bin/cat "$@"
|
|
|
|
return $?
|
|
|
|
fi
|
|
|
|
if [ -d "$1" ]; then
|
|
|
|
l "$1"
|
|
|
|
elif [ -f "$1" ]; then
|
|
|
|
local ext="${1##*.}"
|
|
|
|
if [ -f "${grcConfigs}conf.${ext}" ]; then
|
|
|
|
/usr/bin/cat "$1" | /usr/bin/grcat "${grcConfigs}conf.${ext}" | /usr/bin/bat --file-name "$1"
|
|
|
|
else
|
|
|
|
/usr/bin/bat "$@"
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
/usr/bin/bat "$@"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# These functions extend httpie in order to add an X-XSRF-TOKEN header based on the value of a cookie.
|
|
|
|
http-xsrf(){
|
|
|
|
sessionfile="$(echo "$*" | grep -Eo -- '--session[= ][^ ]*' | sed 's/^--session[= ]//')"
|
|
|
|
cookie="$(jq -r '.cookies."XSRF-TOKEN".value' "$sessionfile")"
|
|
|
|
http "$@" "X-XSRF-TOKEN:$cookie"
|
|
|
|
}
|
|
|
|
|
|
|
|
https-xsrf(){
|
|
|
|
sessionfile="$(echo "$*" | grep -Eo -- '--session[= ][^ ]*' | sed 's/^--session[= ]//')"
|
|
|
|
cookie="$(jq -r '.cookies."XSRF-TOKEN".value' "$sessionfile")"
|
|
|
|
https "$@" "X-XSRF-TOKEN:$cookie"
|
|
|
|
}
|
|
|
|
|