-
-
Save benyanke/185dca2a236750eae5d0f920f01039c8 to your computer and use it in GitHub Desktop.
@ageis's ~/.bashrc 🖥️ with numerous useful functions, aliases and one-liners. ⚠️ NOTE: many paths in sourced scripts and environment variables are specific to my system, but if you dig in I hope you'll find something you can use!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#~/.bashrc: executed by bash(1) for non-login shells. | |
# kevin gallagher (@ageis) <[email protected]> | |
export MYUID=$(id -u) | |
export USER="$(id -un)" | |
if [[ "$TILIX_ID" ]] || [[ "$VTE_VERSION" ]]; then | |
source /etc/profile.d/vte.sh | |
fi | |
case $- in | |
*i*) ;; | |
*) | |
#clear | |
. /etc/profile | |
. ~/.profile | |
#return | |
;; | |
esac | |
[ -z "$PS1" ] && return | |
HISTCONTROL=ignoreboth | |
HISTSIZE= | |
HISTFILESIZE= | |
HISTIGNORE=?:?? | |
#HISTTIMEFORMAT="[%d/%m/%y %T] " | |
shopt -s histappend | |
shopt -s lithist | |
shopt -s checkwinsize | |
shopt -s globstar | |
shopt -s dotglob | |
shopt -s cmdhist | |
shopt -s autocd | |
shopt -s cdspell | |
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" | |
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then | |
debian_chroot=$(cat /etc/debian_chroot) | |
fi | |
export color_prompt=yes | |
if [ "$color_prompt" = yes ]; then | |
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' | |
else | |
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' | |
fi | |
export force_color_prompt="yes" | |
export CLICOLOR=1 | |
# If this is an xterm set the title to user@host:dir | |
case "$TERM" in | |
xterm* | rxvt*) | |
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" | |
;; | |
*) ;; | |
esac | |
if [ -x /usr/bin/dircolors ]; then | |
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)" | |
alias ls='ls --color=auto' | |
alias dir='dir --color=auto' | |
alias vdir='vdir --color=auto' | |
alias grep='grep --color=auto' | |
alias fgrep='fgrep --color=auto' | |
alias egrep='egrep --color=auto' | |
fi | |
alias ll='ls -l' | |
alias la='ls -A' | |
alias l='ls -CF' | |
# Alias definitions. | |
if [ -f ~/.bash_aliases ]; then | |
. ~/.bash_aliases | |
fi | |
if ! shopt -oq posix; then | |
if [ -f /usr/share/bash-completion/bash_completion ]; then | |
. /usr/share/bash-completion/bash_completion | |
elif [ -f /etc/bash_completion ]; then | |
. /etc/bash_completion | |
fi | |
fi | |
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then | |
function command_not_found_handle { | |
# check because c-n-f could've been removed in the meantime | |
if [ -x /usr/lib/command-not-found ]; then | |
/usr/lib/command-not-found -- "$1" | |
return $? | |
elif [ -x /usr/share/command-not-found/command-not-found ]; then | |
/usr/share/command-not-found/command-not-found -- "$1" | |
return $? | |
else | |
printf "%s: command not found\n" "$1" >&2 | |
return 127 | |
fi | |
} | |
fi | |
function activedisplay() { | |
#mapfile -t SESSIONS< <(loginctl list-sessions --nolegend | awk {'print $1'}) | |
local ACTIVETTY="$(cat /sys/class/tty/tty0/active)" | |
mapfile -t PROCS< <(pgrep -t "${ACTIVETTY}") | |
for PROC in "${PROCS[@]}}"; do | |
#if [[ "$(loginctl show-session -p State --value ${SESS})" =~ "active" ]]; then local ACTIVESESS="${SESS}"; fi | |
local DISP="$(awk -v RS='\0' -F= '$1=="DISPLAY" {print $2}' /proc/${PROC}/environ 2>/dev/null)"; [[ -n "${DISP}" ]] && break; | |
done; | |
echo -e "${DISP}" | |
} | |
function apparmor_enable() { | |
systemctl start apparmor | |
profiles=$(find /etc/apparmor.d -type f | grep -v tunables | grep -v local | grep -v abstractions) | |
profiles+=$(find /etc/apparmor.d -type f -exec grep -E "^(\s+)?profile" {} \; | cut -d'{' -f1 | sed 's/[ \t]*//' | cut -d' ' -f2 | uniq -u) | |
for profile in $profiles; do | |
aa-enforce -d /etc/apparmor.d $profile | |
done | |
} | |
function apparmor_complain() { | |
systemctl start apparmor | |
profiles=$(find /etc/apparmor.d -type f | grep -v tunables | grep -v local | grep -v abstractions) | |
profiles+=$(find /etc/apparmor.d -type f -exec grep -E "^(\s+)?profile" {} \; | cut -d'{' -f1 | sed 's/[ \t]*//' | cut -d' ' -f2 | uniq -u) | |
for profile in $profiles; do | |
aa-complain -d /etc/apparmor.d $profile | |
done | |
} | |
function apparmor_disable() { | |
systemctl stop apparmor | |
systemctl disable apparmor | |
profiles=$(find /etc/apparmor.d -type f | grep -v tunables | grep -v local | grep -v abstractions) | |
profiles+=$(find /etc/apparmor.d -type f -exec grep -E "^(\s+)?profile" {} \; | cut -d'{' -f1 | sed 's/[ \t]*//' | cut -d' ' -f2 | uniq -u) | |
for profile in $profiles; do | |
aa-disable -d /etc/apparmor.d $profile | |
done | |
} | |
function blockip() { | |
sudo iptables -A INPUT -s "$1" -j DROP | |
sudo iptables -A OUTPUT -d "$1" -j DROP | |
} | |
function buildkerneldeb() { | |
unset MAKEFLAGS | |
unset ARCH | |
CONCURRENCY_LEVEL=16 make-kpkg --rootcmd=fakeroot --verbose --arch-in-name --arch amd64 -j16 --initrd --uc --us kernel_image kernel_headers | |
} | |
function buildkernel() { | |
unset ARCH | |
make oldconfig | |
#CONCURRENCY_LEVEL=8 screen fakeroot make-kpkg --us --uc --revision 1.KMG --initrd kernel_image kernel_headers | |
CONCURRENCY_LEVEL=16 fakeroot make -j16 deb-pkg | |
} | |
function bytestohuman() { | |
b=${1:-0}; d=''; s=0; S=(Bytes {K,M,G,T,P,E,Z,Y}iB) | |
while ((b > 1024)); do | |
d="$(printf ".%02d" $((b % 1024 * 100 / 1024)))" | |
b=$((b / 1024)) | |
let s++ | |
done | |
echo "$b$d ${S[$s]}" | |
} | |
function cache_gpg_pass() { | |
local TMPFILE=$(mktemp) | |
gpg --quiet --with-keygrip -K "${GPG_KEY}" > ${TMPFILE} | |
local GPG_KEYGRIP="$(ack '\sKeygrip = (?<keygrip>[a-zA-Z][0-9].*$)' ${TMPFILE} --output '$+{keygrip}')" | |
/usr/lib/gnupg/gpg-preset-passphrase --preset "${GPG_KEYGRIP}" | |
gpg-connect-agent reloadagent /bye | |
} | |
function certcheck() { | |
openssl s_client -showcerts -connect "$1":443 | |
} | |
function certkeymatch() { | |
openssl x509 -in "$1" -noout -modulus | |
openssl rsa -in "$2" -noout -modulus | |
} | |
function certmatchkey() { | |
local certmd5=$(openssl x509 -noout -modulus -in "$1" | openssl md5) | |
local keymd5=$(openssl rsa -noout -modulus -in "$2" | openssl md5) | |
if [[ "$certmd5" == "$keymd5" ]]; then | |
echo -e "The certificate matches the key.\n" | |
elif [[ "$certmd5" != "$keymd5" ]]; then | |
echo -e "The certificate DOES NOT match the key.\n" | |
fi | |
} | |
function checkkey() { | |
openssl rsa -check -text -noout -in "$1" | |
} | |
function checkstarttls() { | |
openssl s_client -showcerts -connect "$1":25 -starttls smtp | |
} | |
function checktls() { | |
openssl s_client -showcerts -connect "$1" | |
} | |
function clean_repos() { | |
local CWD=$(pwd) | |
mapfile -t REPOS< <(find ${CWD} -type d -name '.git' -exec readlink -f {} \;) | |
unset GIT_CURL_VERBOSE | |
export GIT_PROMPT_DISABLE=1 | |
for REPO in "${REPOS[@]}"; do | |
local REPO_PATH="${REPO%/.git}" | |
git -C "${REPO_PATH}" reset --hard HEAD | |
git -C "${REPO_PATH}" clean -fdx | |
done | |
} | |
function confirm() { | |
read -p "Are you sure you want to $1? (y/n): " -n 1 -r REPLY | |
echo -e "\n" | |
if [[ $REPLY =~ ^[Yy]$ ]]; then | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
function copysite() { | |
local domain=$(echo "$@" | awk -F/ '{print $3}') | |
wget --recursive --page-requisites --html-extension --convert-links --domains "$domain" --no-parent "$@" | |
} | |
function cpanu() { | |
perl -MCPAN -e 'foreach (@ARGV) { CPAN::Shell->rematein("notest", "install", $_) }' $@ | |
} | |
function disable() { | |
local PROGRAM="$1" | |
if confirm "disable ${PROGRAM}" -eq 0; then | |
sudo systemctl disable "${PROGRAM}" | |
local EXITSTATUS="$?" | |
sleep 1s | |
[[ ${EXITSTATUS} == 0 ]] && success "Disabled ${PROGRAM}." || failure "Failed to disable ${PROGRAM}." | |
else | |
failure "No action taken." | |
fi | |
} | |
function dns() { | |
dig +nocmd "$1" any +multiline +noall +answer | |
} | |
function clrdockerenv() { | |
unset DOCKER_TLS_VERIFY | |
unset DOCKER_HOST | |
unset DOCKER_CERT_PATH | |
unset COMPOSE_TLS_VERSION | |
} | |
function dockerexec() { | |
local container="$1" | |
docker exec --privileged -it "$1" /bin/bash | |
} | |
function dockernets() { | |
local containers=$(docker ps -a -q) | |
for container in $containers; do | |
docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$container" | |
done | |
} | |
function dockerrm() { | |
local containers=$(docker ps -a -q) | |
local images=$(docker images -q) | |
for container in $containers; do | |
docker rm "$container" | |
done | |
for image in $images; do | |
docker rmi "$image" | |
done | |
} | |
function dockerstop() { | |
local containers=$(docker ps -a -q) | |
for container in $containers; do | |
docker stop "$container" | |
done | |
} | |
function dockervols() { | |
local containers=$(docker ps -a -q) | |
for container in $containers; do | |
docker inspect --format '{{ .Volumes }}' "$container" | |
done | |
} | |
function enable() { | |
local PROGRAM="$1" | |
if confirm "enable ${PROGRAM}" -eq 0; then | |
sudo systemctl enable "${PROGRAM}" | |
local EXITSTATUS="$?" | |
sleep 1s | |
[[ ${EXITSTATUS} == 0 ]] && success "Enabled ${PROGRAM}." || failure "Failed to enable ${PROGRAM}." | |
else | |
failure "No action taken." | |
fi | |
} | |
function encodemp3() { | |
local FULLPATH=$(readlink -e "$1") | |
local INPUTMEDIA=$(basename "$1") | |
local FNAME=$(echo "${INPUTMEDIA}" | cut -d'.' -f1) | |
local DESTDIR=$(dirname "${FULLPATH}") | |
ffmpeg -i "$1" -vn -ab 128k -acodec libmp3lame -ar 44100 -y "${DESTDIR}/${FNAME}.mp3" | |
} | |
function examinecert() { | |
openssl x509 -inform PEM -in "$1" -text -noout | |
} | |
function failure() { | |
ERR="$1" | |
echo -e "\e[01;31m* $ERR\e[0m" 1>&2 | |
} | |
function f() { | |
find . -not -iwholename '*.svn*' -not -iwholename '*.git*' -iname "*$1*" | |
} | |
function find_dirty_repos() { | |
local CWD=$(pwd) | |
mapfile -t REPOS< <(find ${CWD} -type d -name '.git' -exec readlink -f {} \;) | |
declare -a DIRTY_REPOS=() | |
for REPO in "${REPOS[@]}"; do | |
local REPO_PATH=${REPO%/.git} | |
git -C "$REPO_PATH" diff-index --quiet HEAD -- &>/dev/null | |
local GITSTATUS=$? | |
if [ "$GITSTATUS" -eq 1 ]; then | |
DIRTY_REPOS+=($REPO_PATH) | |
failure "$REPO_PATH is dirty." | |
# modifications | |
# timelimit -q -t 3 -T 5 git -C $REPO_PATH diff --minimal --compact-summary | pr -to 4 | |
# untracked files | |
# timelimit -q -t 3 -T 5 git -C $REPO_PATH ls-files . --abbrev --exclude-standard --others | pr -to 4 | |
timelimit -q -t 3 -T 5 git -C $REPO_PATH status -su | pr -to 4 | |
else | |
success "$REPO_PATH is clean." | |
fi | |
done | |
} | |
function fixpycode() { | |
autopep8 --max-line-length=120 --list-fixes -i "$1" | |
yapf -i -vv "$1" | |
black --line-length=120 -v "$1" | |
/usr/local/bin/reindent3 "$1" | |
} | |
function fixlogitech() { | |
# c52b : | |
# 046d : Logitech | |
find '/sys/devices/pci0000:00' -iname idProduct -exec cat {} \; | |
} | |
function flushiptables() { | |
declare -a iptcmds=("/usr/sbin/iptables" "/usr/sbin/ip6tables") | |
for i in "${iptcmds[@]}"; do | |
# [ ! -e $i -a ! -x $i ] | |
local ipt="sudo $i" | |
$ipt -P INPUT ACCEPT | |
$ipt -P FORWARD ACCEPT | |
$ipt -P OUTPUT ACCEPT | |
$ipt -F | |
$ipt -X | |
$ipt -t nat -F | |
$ipt -t nat -X | |
$ipt -t mangle -F | |
$ipt -t mangle -X | |
$ipt -t raw -F | |
$ipt -t raw -X | |
done | |
} | |
function freespace() { | |
local CWD=$(pwd) | |
mapfile -t BIGFILES< <(find ${CWD} -xdev -type f -size +50M -printf '%s\t%k\t%p\n' | numfmt --field=1 --from=iec --to=si --padding=8 | sort -rh | tail -100) | |
for f in "${BIGFILES[@]}"; do | |
local FNAME="$(echo $f | cut -d' ' -f3)" | |
local FSIZEKB="$(echo $f | cut -d' ' -f2)" | |
read -p "\nPress 'y' to delete ${FNAME}, 'm' to move it to another directory, and 'k' to keep: " -n 1 -r REPLY | |
if [[ $REPLY =~ ^[Mm]$ ]]; then | |
read -e -p "\nEnter new destination for ${FNAME}: " -n 64 -r DESTDIR | |
if [[ -d "${DESTDIR}" ]]; then | |
local FREESPACE="$(df -k --sync ${DESTDIR} | awk '{ print $4 }' | tail -n 1| cut -d'%' -f1)" | |
declare -i REMAINING=$(($FREESPACE - $FSIZEKB)) | |
if [[ "${REMAINING}" -gt 1024 ]]; then | |
local REMAINING_HUMAN_READABLE=$(printf '%dK\t' "${REMAINING}" | numfmt --field=1 --format="%-10f" --zero-terminated --from=auto --to=iec --padding=8) | |
success "\nThere will be ${REMAINING_HUMAN_READABLE} kilobytes left available on that filesystem after migrating the file..." | |
sudo mv -ivun -t "${DESTDIR}/" "${FNAME}" & | |
fi | |
fi | |
elif [[ $REPLY =~ ^[Kk]$ ]]; then | |
success "\nKeeping ${FSIZEKB} ${FNAME} where it's located." | |
elif [[ $REPLY =~ ^[Yy]$ ]]; then | |
sudo rm --preserve-root=all --one-file-system -rfvi "${FNAME}" | |
fi | |
done | |
for job in $(jobs -p); do | |
wait -n "$job" | |
done | |
} | |
# the following function is a WIP (work-in-progress) | |
function gencert() { | |
cd /etc/pki | |
export EASYRSA=$(pwd) | |
./easyrsa --batch --req-cn="$1" gen-req "$1" nopass | |
read -e -p "Enter any DNS subject alternative names (SANs) for $1: " -n 24 -r REPLY | |
if [[ $REPLY =~ ^\.(com|org|net|pro)$ || $REPLY == 'localhost' ]]; then | |
AVGPING=$(printf '%-8.2f' "$(fping -c3 -t300 --ipv4 --iface=eth0 -i 100 -W 3 "$REPLY" | tail -1 | awk '{ print $4 }' | cut -d '/' -f 2)") | |
DIGTIME=$(dig +noall +stats +timeout=3 @"$REPLY" google.com | awk '/Query/{sum+=$4}END{print ""sum"ms"}') | |
echo "AVGPING: $AVGPING" | |
echo "DIGTIME: $DIGTIME" | |
if (( $(echo "$AVGPING == 0" | bc -l) )) && (( $(echo "$DIGTIME == 0" | bc -l) )); then | |
failure "Couldn't ping/dig $REPLY. Not adding SAN to certificate." | |
local SANS="" | |
echo "SANS1: ${SANS}" | |
else | |
local SANS="DNS:${REPLY}" | |
echo "SAN2S: ${SANS}" | |
fi | |
else | |
local SANS="" | |
echo "SANS3: ${SANS}" | |
fi | |
unset REPLY | |
read -e -p "Enter any IP subject alternative names (SANs) for $1: " -n 24 -r REPLY | |
if [[ $REPLY =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then | |
AVGPING=$(printf '%-8.2f' "$(ping -c 10 -i 1 -W 3 "$REPLY" | tail -1 | awk '{ print $4 }' | cut -d '/' -f 2)") | |
if (( $(echo "$AVGPING == 0" | bc -l) )); then | |
failure "Couldn't ping $REPLY. Not adding SAN to certificate." | |
else | |
echo "SANS4: ${SANS}" | |
[[ -z "$SANS" ]] && local SANS="IP:${REPLY}" | |
[[ ! -z "$SANS" ]] && SANS+=",IP:${REPLY}" | |
fi | |
else | |
failure "${REPLY} is not a valid IP address. Not adding SAN to certificate." | |
fi | |
echo "SANS: ${SANS}" | |
# easyrsa --batch --subject-alt-name='${REPLY}' \ | |
# sign-req server example.org | |
} | |
# the following function is a WIP (work-in-progress) | |
function gendhparam() { | |
local OUTDIR="/etc/ssl" | |
echo -e "Generating Diffie-Hellman parameters...\n" | |
dhdata=$(tempfile 2>/dev/null) | |
trap "rm -f $dhdata" 0 1 2 5 15 | |
local ans="$(zenity --list --text "DH parameter size" --radiolist --height=256 --width=128 --column "Choose" --column "Bits" FALSE 1024 FALSE 2048 FALSE 3072 TRUE 4092)" | |
echo -e "$ans\n" | |
export ANS="/tmp/ans.$$" | |
mkfifo $ANS | |
dialog --backtitle "Parameter generation" --title "Diffie-Hellman key length" --output-fd 3 --stdout --radiolist "Choose:" 12 40 4 \ | |
1 "1024" off \ | |
2 "2048" off \ | |
3 "3072" off \ | |
4 "4096" on >&3 | |
case $(cat $dhata) in | |
1) export DH_KEYLENGTH=1024;; | |
2) export DH_KEYLENGTH=2048;; | |
3) export DH_KEYLENGTH=3072;; | |
4) export DH_KEYLENGTH=4096;; | |
esac | |
return 0 | |
while true; do | |
read -p "How many bytes? [1024] [2048] [4096] E[x]it: " -a array | |
for choice in "${array[@]}"; do | |
case "$choice" in | |
[1-1024]*) | |
export DHBITS="1024"; break;; | |
[20-2048]*) | |
export DHBITS="2048"; break;; | |
[30-3072]*) | |
export DHBITS="3072"; break;; | |
[40-4096]*) | |
export DHBITS="4096"; break;; | |
[x]* ) echo "Cancelled dhparam generation."; return 0;; | |
* ) failure "Invalid option."; return 0;; | |
esac | |
done | |
done | |
local numre="^[0-9]+$" | |
if [ "${DHBITS}" =~ $numre ]]; then | |
read -p "Chosen ${DHBITS} bits. Where do you want to write them? (${OUTDIR}): " -n 1 -r DHDEST | |
echo -e "\n" | |
if [[ $DHDEST =~ [^a-zA-Z0-9\ \/$] ]] && [ -d "$DHDEST" ]; then | |
openssl dhparam -out "${DHDEST}/dhparam-${DHBITS}.pem" "${DHBITS}" | |
fi | |
fi | |
} | |
function genpw() { | |
if hash diceware 2>/dev/null; then | |
local wordcount | |
wordcount=9 | |
if hash xclip 2>/dev/null; then | |
diceware "$@" -n $wordcount | tee >(xclip -selection clipboard) | |
else | |
diceware "$@" -n $wordcount | |
fi | |
else | |
strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 32 | tr -d '\n' | head -c 24 | |
echo | |
fi | |
} | |
function getdigest() { | |
openssl x509 -pubkey <"$1" | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64 | |
} | |
function getlinks() { | |
lynx -listonly -dump "$1" | awk '/^[ ]*[1-9][0-9]*\./{sub("^ [^.]*.[ ]*","",$0); print;}'| sort -u | |
} | |
function getoffline() { | |
NET_DEVICES=$(sudo lshw -short -C net -quiet -sanitize | tail +3 | awk {'print $2'}) | |
for device in $NET_DEVICES; do | |
timelimit -q -t 3 -T 5 sudo ifdown "${device}" | |
done | |
} | |
function getonline() { | |
sudo systemctl restart systemd-networkd | |
sudo systemctl restart networking | |
sudo systemctl restart NetworkManager | |
NET_DEVICES=$(sudo lshw -short -C net -quiet -sanitize | tail +3 | awk {'print $2'}) | |
for device in $NET_DEVICES; do | |
timelimit -q -t 3 -T 5 sudo dhclient "${device}" | |
timelimit -q -t 3 -T 5 sudo ifup "${device}" | |
done | |
sudo systemctl restart dnsmasq | |
sudo systemctl restart coredns | |
sudo systemctl restart systemd-resolved | |
} | |
function gitcommitdate() { | |
GIT_COMMITTER_DATE="$(date)" | |
git commit --amend --no-edit --date "$(date)" | |
} | |
function git_restore_deleted() { | |
local DELETED="$1" | |
local LAST_COMMIT="$(git rev-list -n 1 HEAD -- $DELETED)" | |
LAST_COMMIT+='^' | |
git checkout "${LAST_COMMIT}" -- "$DELETED" | |
} | |
function git_restore_previous() { | |
local PREVIOUS="$1" | |
local LAST_COMMIT="$(git rev-list -n 2 HEAD -- $PREVIOUS | tail -1)" | |
LAST_COMMIT+='^' | |
git checkout "${LAST_COMMIT}" -- "$PREVIOUS" | |
} | |
function headers() { | |
curl -I https://"$1" | |
} | |
function hiprio() { | |
local procs="$(pgrep -iw $1)" | |
for proc in $procs; do | |
sudo renice -n -19 -p "$proc" | |
sudo ionice -c 2 -n 0 -p "$proc" | |
done | |
} | |
function install_apt_depends() { | |
sudo apt-get install $(apt-cache depends $1 | grep Depends | sed "s/.*ends:\ //" | tr '\n' ' ') | |
} | |
function kicksysd() { | |
sudo systemctl daemon-reexec | |
sudo systemctl daemon-reload | |
sudo systemctl reset-failed | |
} | |
function killpulse() { | |
local PULSE_PID="$(pgrep pulseaudio)" | |
killall -wv pulseaudio | |
sleep 1 | |
sudo kill -9 "$PULSE_PID" | |
} | |
function killvagrant() { | |
local VPID="$(pgrep vagrant)" | |
kill "${VPID}" | |
sleep 1 | |
kill -9 "${VPID}" | |
} | |
function killvlc() { | |
local VPID="$(pgrep vlc)" | |
kill "$VPID" | |
sleep 1 | |
kill -9 "$VPID" | |
} | |
function largefolders() { | |
if [ -z "$1" ]; then | |
local searchpath="$(pwd)" | |
else | |
local searchpath="$1" | |
fi | |
sudo find "${searchpath}" -xdev -maxdepth 5 -type d -print0 | xargs -0 du -bx --max-depth=5 2>/dev/null | perl -M'Number::Bytes::Human format_bytes' -lane 'my $SIZE = format_bytes ($F[0], bs=>1000, round_style => 'round', quiet => 1, precision => 2); shift @F; print $SIZE . "\t@F";' | sort -rh | head -20 | |
} | |
function latlong() { | |
curl http://ipinfodb.com 2>/dev/null | perl -0777 -nE 'm/Latitude : (-?\d+\.\d+).+?Longitude : (-?\d+\.\d+)/ms; say "$1:$2" if $1 and $2' | |
} | |
function listvms() { | |
mapfile -t VBOX_VMS< <(VBoxManage list vms | sed -e 's/^"//' | cut -d'"' -f1) | |
mapfile -d '}' -t VBOX_VM_UUIDS< <(VBoxManage list vms | cut -d'{' -f2) | |
mapfile -d '}' -t VBOX_RUNNING_VMS< <(VBoxManage list runningvms | cut -d'{' -f2) | |
for i in ${!VBOX_VMS[@]}; do | |
local VBOXVM="${VBOX_VMS[$i]}" | |
local VBOXID="${VBOX_VM_UUIDS[$i]}" | |
if [[ "${VBOX_RUNNING_VMS[*]}" =~ ".*${VBOXID}.*" ]]; then | |
echo -e "\e[01;32m${VBOXVM} ${VBOXID} \n\e[0m" | |
else | |
echo -e "\e[01;31m${VBOXVM} ${VBOXID} \n\e[0m" | |
fi | |
done | |
} | |
function lock_resolv() { | |
sudo chattr +i /etc/resolv.conf | |
} | |
function loprio() { | |
local procs="$(pgrep -iw $1)" | |
for proc in $procs; do | |
echo "$proc" | |
sudo renice -n +19 -p "$proc" | |
sudo ionice -c 2 -n 7 -p "$proc" | |
done | |
} | |
function makecolors() { | |
pathpat="(/[^/]*)+:[0-9]+" | |
ccred=$(echo -e "\033[0;31m") | |
ccyellow=$(echo -e "\033[0;33m") | |
ccend=$(echo -e "\033[0m") | |
/usr/bin/make "$@" 2>&1 | sed -E -e "/[Ee]rror[: ]/ s%$pathpat%$ccred&$ccend%g" -e "/[Ww]arning[: ]/ s%$pathpat%$ccyellow&$ccend%g" | |
return ${PIPESTATUS[0]} | |
} | |
function maketarbz() { | |
# export TAR_OPTS="--auto-compress --one-file-system --quoting-style='literal' --utc --verbose --deference --compress --totals=SIGQUIT --ignore-failed-read --seek --wildcards --no-acls --no-selinux --no-xattrs --verify" | |
if [ -d "$1" ]; then | |
local ARCHIVENAME=$(basename "$1.tar.bz2") | |
export BZIP2="-9"; tar -pcvjf "${TAR_OPTS}" "$1" "${ARCHIVENAME}" | |
fi | |
} | |
function maketargz() { | |
# export TAR_OPTS="--auto-compress --one-file-system --quoting-style='literal' --utc --verbose --deference --compress --totals=SIGQUIT --ignore-failed-read --seek --wildcards --no-acls --no-selinux --no-xattrs --verify" | |
if [ -d "$1" ]; then | |
local ARCHIVENAME=$(basename "$1.tar.xz") | |
export XZ_OPT="-9"; tar -zpcvf "${TAR_OPTS}" "$1" "${ARCHIVENAME}" | |
fi | |
} | |
function maketarxz() { | |
# export TAR_OPTS="--auto-compress --one-file-system --quoting-style='literal' --utc --verbose --deference --compress --totals=SIGQUIT --ignore-failed-read --seek --wildcards --no-acls --no-selinux --no-xattrs --verify" | |
if [ -d "$1" ]; then | |
local ARCHIVEDIR=$(basename "$1.tar.gz") | |
export GZIP="-9"; tar -pcvJf "${TAR_OPTS}" "$1" "${ARCHIVENAME}" | |
fi | |
} | |
function newcert() { | |
openssl req -new -newkey rsa:4096 -nodes -sha512 -keyout domain.com.key -out domain.com.csr | |
} | |
function newlines() { | |
sed -i 's/\\n/\n/g' "$1" | |
} | |
function noblanklines() { | |
sed -i '/^$/d' "$1" | |
} | |
function nocomments() { | |
cat "$1" | egrep -v "(^#.*|^$)" | |
} | |
function noleading() { | |
sed -i "s/^[ \t]*//" "$1" | |
} | |
function parentproc() { | |
local PSTREE="$(mktemp)" | |
mkfifo "${PSTREE}" | |
local PID="$(sudo pgrep -inxw $1)" | |
for _pid in $PID; do | |
local PARENTPID="$(sudo ps -o ppid= -p $_pid)" | |
if [[ ! -z "${PARENTPID}" ]]; then | |
echo -e "Parent of $_pid is ${PARENTPID}.\n" | |
echo -e "$(sudo ps -p ${PARENTPID} -o command=)\n" | |
local PARENTOFPARENTPID="$(sudo ps -o ppid= -p $PARENTPID)" | |
if [ $? -eq 0 ]; then | |
echo -e "The parent's parent is ${PARENTOFPARENTPID}\n" | |
fi | |
fi | |
sudo pstree -ptshlU "${_pid}" >> $PSTREE 2>&1 | |
done | |
sudo sed -rn "/.{$($PSTREE expand -t1 2>/dev/null | wc -L 2>/dev/null)}/{p;q}" $PSTREE 2>/dev/null | |
sudo rm -f "${PSTREE}" | |
} | |
function pdfshrink() { | |
local input=$1 | |
local output=$2 | |
if [ -e $1 ]; then | |
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.6 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile="$2" "$1" | |
fi | |
} | |
function proxy_on() { | |
if [ -z ${HTTP_PROXY+http://127.0.0.1:8123/} ]; then | |
failure "Proxy was not turned on." | |
export HTTP_PROXY="http://127.0.0.1:8123" | |
else | |
success "Proxy will be set to '$HTTP_PROXY'."; | |
fi | |
export HTTPS_PROXY="$HTTP_PROXY" | |
export SOCKS_PROXY="$HTTP_PROXY" | |
export FTP_PROXY="$HTTP_PROXY" | |
export NO_PROXY="localhost,127.0.0.1" | |
env | grep --color=always -e _PROXY | sort | |
} | |
function proxy_off() { | |
variables=("HTTP_PROXY" "HTTPS_PROXY" "FTP_PROXY" "SOCKS_PROXY" "NO_PROXY") | |
for i in "${variables[@]}"; do | |
unset $i | |
done | |
env | grep --color=always -e _PROXY | sort | |
success "Proxy turned off." | |
} | |
function proxy_switch() { | |
success "Switching proxy to http://127.0.0.1:8118." | |
export HTTP_PROXY="http://127.0.0.1:8118" | |
proxy_on | |
} | |
function rebuildcabundle() { | |
perlbrew switch-off | |
mk-ca-bundle -kmvf /etc/ssl/cacert.pem | |
local TMPCABUNDLE=$(mktemp) | |
grep -vE '^(#|================)' /etc/ssl/cacert.pem > ${TMPCABUNDLE} | |
mapfile -t CA_METADATA < <(sed -e 's/END CERTIFICATE-----\(.*\)-----BEGIN CERTIFICATE/\1/' ${TMPCABUNDLE} | grep -vE 'BEGIN CERTIFICATE|END CERTIFICATE') | |
mapfile -t CA_NAMES < <(sed -n '$!N;/BEGIN CERTIFICATE/P;D' ${TMPCABUNDLE} | grep -v 'BEGIN CERTIFICATE') | |
for i in "${!CA_NAMES[@]}" ; do CA_NAMES[$i]="${CA_NAMES[$i]:-''}"; done | |
for ca in "${CA_NAMES[@]}"; do | |
sed -i "/^${ca}$/d" ${TMPCABUNDLE} | |
done | |
noblanklines ${TMPCABUNDLE} | |
nocomments ${TMPCABUNDLE} | |
nopreceding ${TMPCABUNDLE} | |
clean ${TMPCABUNDLE} | |
mv ${TMPCABUNDLE} /etc/ssl/cacert.pem | |
chmod 640 /etc/ssl/cacert.pem | |
chown root:ssl-cert /etc/ssl/cacert.pem | |
} | |
function reload() { | |
sudo systemctl reload "$1" | |
} | |
function repackdeb() { | |
if [ -e "$1" ]; then | |
dpkg-deb -I "$1" | |
fi | |
export DPKGTMPDIR="$(mktemp -d)" | |
export DEBARCHIVE="$(basename $1)" | |
export FULLPATH="$(readlink -e $1)" | |
export DPKGDEST="$(dirname $FULLPATH)" | |
export NEWDEBARCHIVE=$(printf '%s\n' "${DEBARCHIVE%.deb}_repacked.deb") | |
trap "rm -rf ${DPKGTMPDIR}" EXIT | |
mkdir -pv ${DPKGTMPDIR} | |
fakeroot sh -c 'dpkg-deb -RvD "${FULLPATH}" "${DPKGTMPDIR}"; exit' | |
# guake -n guake -e 'cd ${DPKGTMPDIR}; ls -lrt ${DPKGTMPDIR}' guake -r 'dpkg editing session' | |
read -n 1 -s -r -p "${DEBARCHIVE} extracted to ${DPKGTMPDIR}. Press Enter when finished making modifications." | |
fakeroot sh -c 'dpkg-deb -bvD "${DPKGTMPDIR}" "${DPKGDEST}/${NEWDEBARCHIVE}"' | |
debdiff "${FULLPATH}" "${DPKGDEST}/${NEWDEBARCHIVE}" | |
rm -rf "${DPKGTMPDIR}" | |
} | |
function restart() { | |
local PROGRAM="$1" | |
if confirm "restart ${PROGRAM}" -eq 0; then | |
sudo systemctl restart "${PROGRAM}" | |
local EXITSTATUS="$?" | |
sleep 1s | |
[[ ${EXITSTATUS} == 0 ]] && success "Restarted ${PROGRAM}." || failure "Failed to restart ${PROGRAM}." | |
else | |
failure "No action taken." | |
fi | |
} | |
function rmdockerlogs() { | |
local container="$1" | |
local logpath="$(docker inspect --format='{{.LogPath}}' "$1"f)" | |
truncate -s 0 "$logpath" | |
} | |
function rpmextract () { | |
local RPMFILE=$1 | |
rpm2cpio "${RPMFILE}" | cpio -idmv | |
} | |
function setuplocale() { | |
local l0c4l3=$(locale | cut -d '=' -f1) | |
for loc in $l0c4l3; do | |
export $loc=en_US.UTF-8 | |
done | |
} | |
function showcert() { | |
openssl x509 -text -noout -dates -in "$1" | |
} | |
function show_module_settings() { | |
systool -m "$1" -a | |
systool -m "$1" -v | |
} | |
function signal() { | |
#local signal_app_id="bikioccmkafdpakkkcpdbppfkghcmihk" | |
#nohup /usr/bin/google-chrome --profile-directory=Default --app-id="${signal_app_id}" "$@" >/dev/null 2>&1 & | |
nohup /usr/local/bin/signal-desktop >/dev/null 2>&1 & | |
} | |
function smiley() { | |
RC=$? | |
[[ ${RC} == 0 ]] && echo '😊' || echo "😠 ${RC}" | |
} | |
function sqldump() { | |
local MYSQL_USERNAME="$1" | |
local MYSQL_DATABASE="$2" | |
local TODAYS_DATE="$(date +%F)" | |
mysqldump -u "${MYSQL_USERNAME}" -p "${MYSQL_DATABASE}" --single-transaction --quick --lock-tables=false > "${MYSQL_DATABASE}_${TODAYS_DATE}.sql" | |
gzip "${MYSQL_DATABASE}_${TODAYS_DATE}.sql" | |
} | |
function start() { | |
local PROGRAM="$1" | |
if confirm "start ${PROGRAM}" -eq 0; then | |
sudo systemctl start "${PROGRAM}" | |
local EXITSTATUS="$?" | |
sleep 1s | |
[[ ${EXITSTATUS} == 0 ]] && success "Started ${PROGRAM}." || failure "Failed to start ${PROGRAM}." | |
else | |
failure "No action taken." | |
fi | |
} | |
function startvm() { | |
VBoxManage startvm "$1" --type headless | |
VBoxManage controlvm "$1" reset | |
} | |
function status() { | |
sudo systemctl status "$1" | |
} | |
function stop() { | |
local PROGRAM="$1" | |
if confirm "stop ${PROGRAM}" -eq 0; then | |
sudo systemctl stop "${PROGRAM}" | |
local EXITSTATUS="$?" | |
sleep 1s | |
[[ ${EXITSTATUS} == 0 ]] && success "Stopped ${PROGRAM}." || failure "Failed to stop ${PROGRAM}." | |
else | |
failure "No action taken." | |
fi | |
} | |
function stopvm() { | |
VBoxManage controlvm "$1" savestate | |
VBoxManage controlvm "$1" poweroff | |
} | |
function strlen() { | |
echo "$@" | awk '{ print length }' | |
} | |
function success() { | |
MSG="$1" | |
echo -e "\e[01;32m* $MSG\e[0m" | |
} | |
function testssl() { | |
/usr/local/bin/testssl.sh --openssl='/usr/bin/openssl' "$1" | |
} | |
function update_bash_completions() { | |
mapfile -t COMPLETIONS < <(find /usr/share/bash-completion/completions -mindepth 1 -type f -exec readlink -sf {} \;) | |
for C in "${COMPLETIONS[@]}"; do | |
local COMPLETION="$(basename ${C})" | |
if [[ ! -f "${COMPLETION}" ]]; then | |
sudo ln -s "${C}" "/etc/bash_completion.d/${COMPLETION}" | |
fi | |
done | |
} | |
function update_repos() { | |
local CWD=$(pwd) | |
mapfile -t REPOS< <(find ${CWD} -type d -name '.git' -exec readlink -f {} \;) | |
unset GIT_CURL_VERBOSE | |
export GIT_PROMPT_DISABLE=1 | |
for REPO in "${REPOS[@]}"; do | |
local REPO_PATH="${REPO%/.git}" | |
git -C "${REPO_PATH}" fetch -q -4 --all | |
local MAIN_REMOTE=$(git -C "${REPO_PATH}" remote show | head -1) | |
local REPO_URL=$(git -C "${REPO_PATH}" remote get-url "${MAIN_REMOTE}") | |
local REPO_NAME="$(basename ${REPO_URL})" | |
local DEFAULT_BRANCH=$(git -C "$REPO_PATH" symbolic-ref --short "refs/remotes/${MAIN_REMOTE}/HEAD" | sed "s@^${MAIN_REMOTE}/@@") | |
git -C ${REPO_PATH} checkout ${DEFAULT_BRANCH} | |
git -C ${REPO_PATH} pull ${MAIN_REMOTE} ${DEFAULT_BRANCH} | |
local EXITSTATUS="$?" | |
[[ ${EXITSTATUS} == 0 ]] && success "Updated ${REPO_NAME}." || failure "Failed to update ${REPO_NAME}." | |
done | |
} | |
function urlencode() { | |
old_lc_collate=$LC_COLLATE | |
LC_COLLATE=C | |
local length="${#1}" | |
for (( i = 0; i < length; i++ )); do | |
local c="${1:i:1}" | |
case $c in | |
[a-zA-Z0-9.~_-]) printf "$c" ;; | |
*) printf '%%%02X' "'$c" ;; | |
esac | |
done | |
LC_COLLATE=$old_lc_collate | |
} | |
function urldecode() { | |
local url_encoded="${1//+/ }" | |
printf '%b' "${url_encoded//%/\\x}" | |
} | |
function verifycert() { | |
openssl verify -verbose -CAfile <(cat "$2") "$1" | |
} | |
function viewlog() { | |
if [ -z "$1" ]; then | |
sudo journalctl -e | |
else | |
sudo journalctl -e -u "$1" | |
fi | |
} | |
function whatsmyip() { | |
local myipv4="$(dig +short -4 @resolver1.opendns.com myip.opendns.com A)" | |
local myipv6="$(dig +short -6 @resolver1.ipv6-sandbox.opendns.com myip.opendns.com AAAA)" | |
local reverse="$(dig +short -4 -x ${myipv4})" | |
echo -e "${myipv4}\n${myipv6}\n${reverse}" | |
} | |
function yml2json() { | |
python -c 'import json, sys, yaml ; y=yaml.safe_load(sys.stdin.read()) ; json.dump(y, sys.stdout)' | |
} | |
alias ansibledocs="nativefier --name 'Ansible Documentation' -e '4.2.3' --disable-dev-tools --verbose --clear-cache --icon '/home/kevin/dev/nativefier/ansible.png' --ignore-gpu-blacklist --show-menu-bar --single-instance --user-agent 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36' 'https://docs.ansible.com/ansible/latest/index.html'" | |
alias apt-cache="sudo apt-cache" | |
#alias apt-disable="sudo apt-disable" | |
#alias apt-enable="sudo apt-enable" | |
alias apt-get="sudo apt-get" | |
alias biosinfo="sudo dmidecode --type bios" | |
alias builddeb="dpkg-buildpackage -us -uc -b -D -rfakeroot -j16 -z9" | |
alias buildpy3mod="python3 setup.py sdist bdist_wheel" | |
alias buildpy3release="python3 setup.py egg_info -Db '' sdist bdist_egg" | |
alias chmod="sudo chmod" | |
alias chown="sudo chown" | |
alias clean="sed -i 's/[ \t]*$//'" | |
alias cleanenv="env -i bash --noprofile --norc" | |
alias code="/snap/bin/code" | |
alias clipboard="/usr/bin/xclip -selection clipboard" | |
alias dd="dd status=progress" | |
alias delpyc="find . -type f -iname "*.pyc" -exec rm -f {} \; && find . -type d -iname "__pycache__" -exec rm -rf {} \;" | |
alias diceware="diceware --no-caps --delimiter=' '" | |
alias dmesg="sudo dmesg" | |
alias dnslog="sudo less +G /var/log/dnsmasq.log" | |
alias dunderscores="find . -name \"* *\" -type d | /usr/local/bin/rename 's/ /_/g'" | |
alias editresolv="sudo chattr -i /etc/resolv.conf && sudo vim /etc/resolv.conf" | |
alias enablesearch="stty -ixon" | |
alias errs="sudo journalctl -p err -b" | |
alias exifprobe="exifprobe -c" | |
alias findstring="grep -Rnis" | |
alias fixscrn="xrandr --output HDMI-A-1 --right-of HDMI-A-0" | |
alias freshen="sudo apt-get -q -y install --reinstall -o Dpkg::Options::='--force-confold'" | |
alias funderscores="find . -name \"* *\" -type f | /usr/local/bin/rename 's/ /_/g'" | |
alias geoip2lookup='mmdblookup --file /usr/share/GeoIP/GeoLite2-ASN.mmdb --ip' | |
alias geoiplookup='geoiplookup -f /usr/share/GeoIP/GeoIPCity.dat' | |
alias getchmod="stat -c '%a %n' " | |
alias gitamend="git commit --amend --cleanup=strip --no-edit" | |
alias githist="git log --graph --topo-order --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset %C(cyan)<%an>%Creset' --abbrev-commit --date=relative" | |
alias gitlog_branches="git log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --" | |
alias gitlog="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --" | |
alias gitlog_plain="git log --graph --pretty=format:'%h -%d %s (%cr) <%an>' --abbrev-commit --" | |
alias gitmodified="git diff --minimal --compact-summary ." | |
alias git_tags="git fetch -v --all --tags && git for-each-ref --sort=taggerdate --format '%(refname) %(taggerdate)' refs/tags" | |
alias gituntracked="git ls-files . --exclude-standard --others" | |
alias globalprefix="export CMAKE_PREFIX_PATH=/usr; export MAKE_PREFIX_PATH=/usr" | |
alias gpgreset='echo RELOADAGENT | gpg-connect-agent' | |
alias gpg='/usr/bin/gpg2' | |
alias hist="history | sed 's/^[ ]*[0-9]\+[ ]*//'" | |
alias ionice="sudo ionice" | |
alias journalctl="sudo journalctl" | |
alias kill="sudo kill" | |
alias largefiles="sudo find . -xdev -type f -size +50M -printf '%s\t%k\t%p\n' | numfmt --field=1 --from=iec --to=si --padding=8 | sort -rh | head -100" | |
alias listdbus_sess="dbus-send --session --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames" | |
alias listdbus_sys="dbus-send --system --dest=org.freedesktop.DBus --type=method_call --print-reply /org/freedesktop/DBus org.freedesktop.DBus.ListNames" | |
alias listfailed="systemctl list-units --state=failed" | |
alias localprefix="export CMAKE_PREFIX_PATH=/usr/local; export MAKE_PREFIX_PATH=/usr;" | |
alias lockresolv="sudo chattr +i /etc/resolv.conf" | |
alias meminfo="sudo lshw -quiet -short -class memory" | |
alias mosh='mosh --server/usr/bin/mosh-server' | |
alias mount="sudo mount" | |
alias myip6="dig +short -6 @resolver1.ipv6-sandbox.opendns.com myip.opendns.com AAAA" | |
alias myip="dig -4 +short myip.opendns.com @resolver1.opendns.com" | |
alias mylocalip="ip addr show | grep -e 'inet' | awk {'print $2'} | grep -E '^192\.168\.*' | cut -d'/' -f1 | head -1" | |
alias myhost="dig +short -4 -x $(myip)" | |
alias newpw="pwgen -B 16 1 | tee >(xclip -selection clipboard)" | |
alias nocomment="sed -e 's/#.*//;/^\s*$/d'" | |
alias nopreceding="noleading" | |
alias ntpsync="sudo ntpdate -v -b -s -t 10 time.nist.gov 0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org" | |
alias optimize="export CFLAGS=\"-Ofast\"; export CPPFLAGS=\"-Ofast\";" | |
alias othercolumns="awk '{for (i=3; i<NF; i++) printf \"$i\" \" \"; print $NF}'" | |
alias pulseinputs="pacmd list-sources | grep -e 'index:' -e device.string -e 'name:'" | |
alias saveaudio="youtube-dl --extract-audio --audio-format best" | |
alias snd_default_input="pacmd list-sources | grep -e 'index:' -e device.string -e 'name:' | grep -A 1 '*' | tail -1 | cut -d':' -f2 | sed -E 's/(<|>)//g'" | |
alias snd_default_output="pacmd list-sinks | grep -e 'name:' -e 'index:' | grep -A 1 '*' | tail -1 | cut -d':' -f2 | sed -E 's/(<|>)//g'" | |
alias pulseoutputs="pacmd list-sinks | grep -e 'name:' -e 'index:'" | |
alias pulsemodules="pacmd list-modules | grep -e 'name:' | cut -d':' -f2 | sed -E 's/(<|>)//g'" | |
alias pulseenv="pax11publish -d -i" | |
alias promreload="curl -X POST http://127.0.0.1:9090/prometheus/-/reload" | |
alias perlupdate="cpan-outdated -p | cpanm --notest --quiet" | |
alias pkill="sudo pkill -e" | |
alias prevdir="cd -" | |
alias ps_mem="sudo ps_mem" | |
alias raminfo="sudo dmidecode --quiet --type 17 | more" | |
alias randhex="openssl rand -hex 16 | tee >(xclip -selection clipboard)" | |
alias renice="sudo renice" | |
alias restoreconf="sudo apt-get -q -y install --reinstall -o Dpkg::Options::='--force-confmiss'" | |
alias reverse="dig +short -4 -x" | |
alias rotatelogs="/usr/sbin/logrotate /etc/logrotate.conf" | |
alias routerlog="sudo less +G /var/log/router.log" | |
alias scanclam="sudo clamscan --block-encrypted --scan-mail=no --scan-archive=yes --max-scansize=500M --exclude-dir=/mnt --exclude-dir=/media --exclude-dir=smb4k --exclude-dir=/run/user/root/gvfs --exclude-dir=/root/.gvfs --exclude-dir=^\/root\/\.clamtk\/viruses --exclude-dir=^\/sys\/ --exclude-dir=^\/dev\/ --exclude-dir=^\/proc\/ --exclude-dir=.thunderbird --exclude-dir=.mozilla-thunderbird --exclude-dir=Mail --exclude-dir=kmail --exclude-dir=evolution --max-filesize=20M --recursive=yes -v" | |
alias shellformat="shfmt -ci -sr -s -f" | |
alias fwincoming="ufp -c -i -b | egrep -v '(172.17.0.1|169.254.0.1|224.0.0.[0-9]+|192.168.1.(1|2|255)|239.255.255.250)\s' | egrep -v '(SPT|DPT): 0\s'" | |
alias fwoutgoing="ufp -c -o -b | egrep -v '(172.17.0.1|169.254.0.1|224.0.0.[0-9]+|192.168.1.(1|2|255)|239.255.255.250)\s' | egrep -v '(SPT|DPT): 0\s'" | |
alias soundtest="speaker-test -t wav -c 2" | |
alias startdbus="/usr/bin/dbus-daemon --session --address=unix:path=/run/user/${MYUID}/bus --syslog --fork --systemd-activation" | |
alias startpulse="/usr/bin/pulseaudio --verbose --use-pid-file --disallow-exit=1 --fail=1 --daemonize -F /etc/pulse/default.pa" | |
alias suatom="sudo /usr/bin/atom --safe --new-window --clear-window-state" | |
alias susublime="sudo /opt/sublime_text/sublime_text --new-window" | |
alias sucat="sudo cat" | |
alias suchrome="sudo google-chrome --no-sandbox --user-data-dir=/root/.config/google-chrome" | |
alias sucode="sudo /usr/bin/code --user-data-dir='/root/.config/Code'" | |
alias sucp="sudo cp" | |
alias sudo="/usr/bin/sudo -E -H -n -S" | |
alias suln="sudo ln" | |
alias sumkdir="sudo mkdir" | |
alias sumv="sudo mv" | |
alias suppresserrors="export CFLAGS=\"-Wno-error\"; export CXXFLAGS=\"-Wno-error\"" | |
alias surm="sudo rm" | |
alias suvim="sudo vim" | |
alias svncleanup="svn status --no-ignore | grep '^[I?]' | cut -c 9- | while IFS= read -r f; do rm -rf "$f"; done" | |
alias syslog="sudo less +G /var/log/syslog" | |
alias systemctl="sudo systemctl" | |
alias torrenttrackers="git -C /home/$USER/dev/trackerslist pull && cat /home/$USER/dev/trackerslist/trackers_best.txt | tee >(xclip -selection clipboard)" | |
alias torlog="sudo less +G /var/log/tor/notice.log" | |
alias totp="oathtool -b --totp $(cat ~/.google_authenticator | head -1)" | |
#alias totp_twitter="oathtool -b --totp REDACTED" | |
#alias totp2="oathtool -b --totp REDACTED" | |
alias ufwlog="sudo less +G /var/log/ufw.log" | |
alias updatecacerts="sudo mk-ca-bundle -kmvf /etc/ssl/cacert.pem" | |
alias updategotools="go get -u golang.org/x/tools/..." | |
alias updatenodejs="npm -g update --unsafe-perm=true --allow-root" | |
alias updatepy3="python3 -m pip_review --auto && pip-check -c pip3 -rfHu" | |
alias updatepy2="python2 -m pip_review --auto && pip-check -c pip2 -rfHu" | |
alias vlc="/usr/bin/vlc" | |
alias weather='curl wttr.in' | |
alias suptcp="ss -t -4 -l -r -n -p -f inet '( src 0.0.0.0 )'" | |
alias supudp="ss -u -4 -l -r -n -p -f inet '( src 0.0.0.0 )'" | |
alias sup6="ss -t -u -4 -l -r -n -p '( src 0.0.0.0 )'" | |
alias connections="ss -t -u -4 -n -p -f inet state ESTABLISHED src 192.168.1.200" | |
alias xwindows="xlsclients | awk {'print $2'} | sort -u && xwininfo -root -children" | |
alias getxwindowid="xwininfo" | |
alias zcalc="/usr/bin/zsh -c zcalc" | |
alias zcashwallet="java -jar /home/$USER/dev/zcash-swing-wallet/build/jars/ZCashSwingWalletUI.jar" | |
alias zero="truncate -s 0" | |
export SSH_ENV="$HOME/.ssh/environment" | |
if [[ -f "${SSH_ENV}" ]]; then | |
eval "$(cat "${SSH_ENV}")" | |
fi | |
if [[ -z "$SSH_AUTH_SOCK" ]] || [[ -z "$SSH_AGENT_PID" ]]; then | |
source ~/.ssh/agent.sh | |
fi | |
if [ -z "${GPG_AGENT_INFO}" ]; then | |
eval "$(gpg-agent --daemon --options ~/.gnupg/gpg-agent.conf)" | |
fi | |
if [[ ! -d "/run/user/$(id -u)" ]]; then | |
sudo mkdir -p "/run/user/$(id -u)" | |
sudo chown -R "$(id -u):$(id -u)" "/run/user/$(id -u)" | |
fi | |
if [ -z "${DIRMNGR_INFO}" ]; then | |
eval "$(dirmngr --daemon --options ~/.gnupg/dirmngr.conf)" | |
fi | |
#eval $(cat ~/.gnupg/gpg-agent-info) | |
export ANSIBLE_NOCOWS=1 | |
export ANSIBLE_LOAD_CALLBACK_PLUGINS=1 | |
#export ARCH=amd64 | |
export ATOM_HOME="$HOME/.atom" | |
export AUTOMATED_TESTING=0 | |
export AUTO_NTFY_DONE_IGNORE="vim screen tmux sudo ssh rsync byobu irssi nano" | |
export AUTO_NTFY_DONE_LONGER_THAN=-L30 | |
export AUTO_NTFY_DONE_UNFOCUSED_ONLY=-b | |
export BROWSER="google-chrome" | |
export BZIP2="-9" | |
export CHARSET=UTF-8 | |
export COLUMNS=100; export LINES=37; | |
export CPANSCRIPT_LOGLEVEL=WARN | |
export CPAN_RUN_SHELL_TEST_WITHOUT_EXPECT=1 | |
export CURL_CA_BUNDLE="/etc/ssl/certs/ca-certificates.crt" | |
export CVSROOT="/home/$USER/dev/" | |
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus" | |
export COMPOSE_TLS_VERSION="TLSv1_2" | |
export DEB_BUILD_HARDENING=1 | |
export DEB_BUILD_MAINT_OPTIONS="hardening=+all" | |
#export DEBFULLNAME="" | |
#export DEBEMAIL="" | |
export DOCKER_CERT_PATH="/home/$USER/.docker" | |
export DOCKER_TLS_VERIFY=1 | |
export DOCKER_HOST=tcp://localhost:2376 | |
export DBUS_SYSTEM_BUS_ADDRESS="unix:path=/var/run/dbus/system_bus_socket" | |
export DISPLAY="$(activedisplay)" | |
export EDITOR="vim" | |
export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' | |
export GIT_CURL_VERBOSE=1 | |
export GIT_AUTHOR_NAME='' | |
export GIT_COMMAND="/usr/bin/git" | |
export GIT_COMMITTER_NAME='' | |
export GIT_DISCOVERY_ACROSS_FILESYSTEM=1 | |
export GIT_EDITOR="vim" | |
export GIT_PROMPT_DISABLE=0 | |
export GIT_PROMPT_ONLY_IN_REPO=0 | |
export GIT_PROMPT_FETCH_REMOTE_STATUS=0 | |
export GIT_PROMPT_SHOW_UPSTREAM=0 | |
export GIT_PROMPT_IGNORE_SUBMODULES=1 | |
export GIT_PROMPT_WITH_VIRTUAL_ENV=1 | |
export GIT_PROMPT_SHOW_UPSTREAM=1 | |
export GIT_PROMPT_SHOW_UNTRACKED_FILES=normal | |
export GIT_PROMPT_SHOW_CHANGED_FILES_COUNT=1 | |
export GIT_PROMPT_COMMAND_FAIL="😠 ${Red}✘ " | |
export GIT_PROMPT_COMMAND_OK="😊 ${Green}✔ " | |
#export GIT_PROMPT_START="$(__vte_osc7)" | |
export GIT_PROMPT_THEME="Solarized_UserHost" | |
export GIT_PROMPT_WITH_USERNAME_AND_REPO=1 | |
#export GIT_PROMPT_END="$(__vte_osc7) $(smiley)" | |
export GNOME_ACCESSIBILITY=0 | |
export GOOGLE_APPLICATION_CREDENTIALS='' | |
export GOPATH="$HOME/go" | |
export GOCACHE="$HOME/.cache/go-build" | |
export GOARCH="amd64" | |
export GOHOSTARCH="amd64" | |
export GOHOSTOS="linux" | |
export GOOS="linux" | |
export GOROOT="/usr/local/go" | |
export GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" | |
#export GREP_OPTIONS='--color=auto' | |
export CGO_CFLAGS="-g -Ofast -O3 -O2" | |
export CGO_CXXFLAGS="-g -Ofast -O3 -O2" | |
export CGO_FFLAGS="-g -Ofast -O3 -O2" | |
export CGO_LDFLAGS="-g -Ofast -O3 -O2" | |
export GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -Ofast -O3 -O2 -gno-record-gcc-switches" | |
export GPG_TTY=$(tty) | |
export GDK_SYNCHRONIZE=0 | |
#export GTK_IM_MODULE_FILE=/etc/gtk-2.0/gtk.immodules | |
#export GTK_IM_MODULE_FILE=/usr/lib/gtk-3.0/3.0.0/immodules.cache | |
#export GTK_IM_MODULE=ibus | |
export GZIP="-9" | |
export INSTALL_MOD_STRIP=1 | |
export JAVA_HOME="/opt/jre1.8.0_211" | |
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64" | |
export JAVA_OPTS="-XX:+IgnoreUnrecognizedVMOptions -Djava.net.preferIPv4Stack=true" | |
export JAVA_OPTIONS="${JAVA_OPTS}" | |
export KEYBASE_AUTOSTART=0 | |
export KEYBASE_NO_GUI=0 | |
export KEYBASE_NO_KBFS=0 | |
export KEYBASE_SYSTEMD=1 | |
export LIBGL_DEBUG=verbose | |
export VAAPI_MPEG4_ENABLED=true | |
export INTEL_NO_HW=1 | |
export LIBGL_DRI3_DISABLE=false | |
export LIBGL_ALWAYS_SOFTWARE=false | |
export LIBGL_DRIVERS_PATH="/usr/local/lib/x86_64-linux-gnu/dri:/usr/lib/x86_64-linux-gnu/dri" | |
export MESA_LOG_FILE=/var/log/mesa.log | |
export LPASS_HOME="$HOME/.lpass" | |
export LPASS_AGENT_TIMEOUT=0 | |
export LPASS_AGENT_DISABLE=0 | |
export LPASS_ASKPASS="/usr/bin/zenity --password --title=Password --timeout 30" | |
export LPASS_CLIPBOARD_COMMAND=/usr/bin/xclip | |
export LPDEST="/dev/null" | |
#export LD_LIBRARY_PATH=/opt/qt/5.12.3/gcc_64/lib | |
#export MAKEFLAGS="-j$((NB_CORES)) -l${NB_CORES}" | |
export MALLOC_CHECK_=0 | |
export MESON_TESTTHREADS=16 | |
export NODE_EXTRA_CA_CERTS="/etc/ssl/cacert.pem" | |
export NONINTERACTIVE_TESTING=1 | |
export NB_CORES=$(grep -c '^processor' /proc/cpuinfo) | |
export NO_AT_BRIDGE=1 | |
export NPM_CONFIG_PREFIX=/usr/local | |
export NVM_DIR="$HOME/.nvm" | |
export OOO_FORCE_DESKTOP="gnome" | |
export OS=linux | |
export PACKER_LOG=1 | |
export PAGER=less | |
export PARALLELMFLAGS="-j8" | |
export PERLBREW_CPAN_MIRROR="https://mirrors.sonic.net/cpan/" | |
export PERLBREW_HOME=/home/$USER/.perlbrew | |
export PERLBREW_ROOT=/usr/share/perl/perlbrew | |
export PERLBREW_PERL=perl-5.31.0 | |
export PERL_CANARY_STABILITY_NOPROMPT=1 | |
export PERL_CPANM_OPT="--verbose --notest --no-interactive --sudo --cascade-search --save-dists=/usr/share/perl/cpanm/cache --mirror=/usr/share/perl/cpanm/cache --mirror=https://mirrors.sonic.net/cpan" | |
#export CPAN_OPTS="-T -X" | |
export PERL_DEBUG_MSTATS=0 | |
export PERL_MM_NONINTERACTIVE=1 | |
export PERL_MM_USE_DEFAULT=1 | |
export PERL_DL_NONLAZY=0 | |
#export PERL5LIB="/home/$USER/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB; | |
#export PERL_LOCAL_LIB_ROOT="/home/$USER/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT; | |
#export PERL_MB_OPT="--install_base \"/home/$USER/perl5\""; export PERL_MB_OPT; | |
#export PERL_MM_OPT="INSTALL_BASE=/home/$USER/perl5"; export PERL_MM_OPT; | |
export PERLLIB="/usr/share/perl/5.24.1:/usr/share/perl/5.28.1:/usr/share/perl/5.29.8" | |
export PERL5LIB="${PERLLIB}" | |
export PLATFORM=$(uname -s | sed -e 's/ */-/g;y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/') | |
#export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig" | |
export PKG_CONFIG_PATH="/opt/qt/5.12.3/gcc_64/lib/pkgconfig" | |
#export POSIXLY_CORRECT=1 | |
#export PROMPT_COMMAND='echo -ne "$(smiley); PS1=$(\d \T\n[\u@\H\t\d\t\w\$)"' | |
#function custom_prompt() { | |
# __git_ps1 "\[\033[0;31m\]\u \[\033[0;36m\]\h:\w\[\033[00m\]" " \n\[\033[0;31m\]>\[\033[00m\] " " %s" | |
# VTE_PWD_THING="$(__vte_osc7)" | |
# PS1="$PS1$VTE_PWD_THING" | |
#} | |
export PROJECT_HOME="$HOME/dev" | |
#export PULSE_COOKIE="/tmp/pulse-cookie" | |
export PULSE_SERVER="unix:/tmp/pulse-socket" | |
export PYTHON="/usr/bin/python3.7" | |
export PYTHONDONTWRITEBYTECODE=0 | |
export PYTHONHTTPSVERIFY=1 | |
export QUOTING_STYLE=literal | |
export QT_ACCESSIBILITY=0 | |
export QT_X11_NO_MITSHM=1 | |
export QT_PLUGIN_PATH=/opt/qt/5.12.3/gcc_64/plugins/platforms | |
#export QT_IM_MODULE=ibus | |
export RELEASE_TESTING=0 | |
export RUST_BACKTRACE=1 | |
export S_COLORS=auto | |
export SDL_AUDIODRIVER='alsa' | |
export SDL_VIDEODRIVER='x11' | |
export SHELL="/bin/bash" | |
export SSH_ASKPASS="/usr/bin/ssh-askpass" | |
#export SOCKS5_PASSWORD="REDACTED" | |
export SOCKS5_SERVER="127.0.0.1:9050" | |
export SOCKS5_USER="$USER" | |
#export SSH_AUTH_SOCK="/home/$USER/.gnupg/S.gpg-agent.ssh" | |
#export SSH_AUTH_SOCK='/run/user/1000/gnupg/S.gpg-agent.ssh' | |
export TAR_OPTS="--auto-compress --one-file-system --quoting-style='literal' --utc --verbose --deference --compress --totals=SIGQUIT --ignore-failed-read --seek --wildcards --no-acls --no-selinux --no-xattrs -- | |
--format=gnu --blocking-factor=20" | |
export TERM=xterm-256color | |
export TEXARCH=x86_64-linux | |
export TMPDIR="/var/tmp" | |
export TOR_CONTROL_HOST=127.0.0.1 | |
#export TOR_CONTROL_PASSWD='"REDACTED"' | |
export TOR_CONTROL_PORT=9051 | |
export TOR_CONTROL_COOKIE_AUTH_FILE=/var/run/tor/control.authcookie | |
export TOR_NO_DISPLAY_NETWORK_SETTINGS=0 | |
export TOR_SKIP_CONTROLPORTTEST=1 | |
export TOR_SKIP_LAUNCH=1 | |
export TOR_SOCKS_HOST=127.0.0.1 | |
export TOR_SOCKS_PORT=9050 | |
#export TOR_TRANSPROXY=1 | |
export TZ="America/Los_Angeles" | |
export USER="$(id -un)" | |
export CHECKPOINT_DISABLE=1 | |
export VAGRANT_CHECKPOINT_DISABLE=1 | |
export VAGRANT_DEFAULT_PROVIDER="virtualbox" | |
export VAGRANT_DISABLE_VBOXSYMLINKCREATE=1 | |
export VAGRANT_INSTALL_LOCAL_PLUGINS=1 | |
export VAGRANT_LOCAL_PLUGINS_LOAD=1 | |
export VDPAU_DRIVER=va_gl | |
export VAGRANT_LOG=warn | |
export VAGRANT_DISABLE_RESOLV_REPLACE=1 | |
export VAGRANT_FORCE_COLOR=1 | |
export LIBVA_DRIVER_NAME=radeonsi_drv_video | |
export WINEARCH="win64" | |
export WINEPREFIX="$HOME/.wine" | |
export WORKON_HOME="/opt/venvs" | |
export XDG_RUNTIME_DIR="/run/user/$(id -u)" | |
#export XMODIFIERS=@im=ibus | |
export XZ_OPTS="-9"; export XZ_OPT="${XZ_OPTS}"; | |
export XZ_DEFAULTS="-T 8" | |
# builds | |
export CFLAGS="-g -O3 -Wno-error -m64 -march=native" | |
export CPPFLAGS="-O3 -Wno-error" | |
export CXXFLAGS="-g -O3 -Wno-error -m64 -march=native -ftree-vectorize -pipe" | |
export FCFLAGS="-g -O3" | |
export FFLAGS="-g -O3" | |
export GCJFLAGS="-g -O3" | |
export LDFLAGS="-Wl,-z,relro" | |
export OBJCFLAGS="-g -O3 -Wno-error" | |
export OBJCXXFLAGS="-g -O3 -Wno-error" | |
export CPU_FLAGS_X86="aes avx avx2 f16c fma3 mmx mmxext pclmul popcnt sse sse2 sse3 sse4_1 sse4_2 ssse3" | |
#export DEB_SIGN_KEYID="" | |
export DH_VERBOSE=1 | |
# locale | |
export LANG=en_US.UTF-8 | |
export LANGUAGE=en_US.UTF-8 | |
export LC_CTYPE="en_US.UTF-8" | |
export LC_NUMERIC="en_US.UTF-8" | |
export LC_TIME="en_US.UTF-8" | |
export LC_COLLATE="en_US.UTF-8" | |
export LC_MONETARY="en_US.UTF-8" | |
export LC_MESSAGES="en_US.UTF-8" | |
export LC_PAPER="en_US.UTF-8" | |
export LC_NAME="en_US.UTF-8" | |
export LC_ADDRESS="en_US.UTF-8" | |
export LC_TELEPHONE="en_US.UTF-8" | |
export LC_MEASUREMENT="en_US.UTF-8" | |
export LC_IDENTIFICATION="en_US.UTF-8" | |
export LC_ALL="en_US.UTF-8" | |
# PATH modifications | |
export PATH="/snap/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$HOME/.local/bin:$HOME/bin" | |
export PATH="$PATH:$HOME/go/bin" | |
export PATH="$PATH:$HOME/.cargo/bin" | |
export PATH="$HOME/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin:$PATH" | |
export PATH=$PATH:"/opt/imagemagick/bin" | |
export PATH=$PATH:"/opt/Android/SDK/platform-tools" | |
export PATH="/opt/jre-1.8.0_211/bin:$PATH" | |
export PATH="/opt/qt/5.12.3/gcc_64/bin:$PATH" | |
export PATH=$PATH:"/opt/Android/platform-tools" | |
export PATH="/usr/lib/ccache:$PATH" | |
export PATH="/opt/gradle-4.1/bin:$PATH" | |
export PATH="/snap/bin:$PATH" | |
#export PATH="/opt/node-v6.16.0-linux-x64/bin:$PATH" | |
export PATH="/opt/node-v10.15.3-linux-x64/bin:$PATH" | |
#export PATH="/opt/node-v11.13.0-linux-x64/bin:$PATH" | |
#export PATH="/opt/node-v8.16.0-linux-x64/bin:$PATH" | |
export PATH="/opt/wine64/bin:$PATH" | |
export PATH="/usr/local/texlive/2018/bin/x86_64-linux:$PATH" | |
#export PATH="$PATH:$HOME/.rvm/bin" | |
#export PATH="/home/$USER/.gem/ruby/2.6.0/bin:$PATH" | |
#export PATH="/home/$USER/.gem/ruby/2.6.3/bin:$PATH" | |
export PATH="/usr/lib/rstudio/bin:$PATH" | |
if [ -d ~/.bash-git-prompt ]; then source ~/.bash-git-prompt/gitprompt.sh; fi | |
source ~/.bash_profile | |
if [ -f /etc/profile.d/bash_completion.sh ]; then source /etc/profile.d/bash_completion.sh; fi | |
if [ -d ~/.homesick ]; then source ~/.homesick/repos/homeshick/homeshick.sh; fi | |
if [ -d /opt/perl5 ]; then source /opt/perl5/etc/bashrc; fi | |
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then source /usr/local/bin/virtualenvwrapper.sh; fi | |
if [ -f /etc/profile.d/nodejs.sh ]; then source /etc/profile.d/nodejs.sh; fi | |
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" | |
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm | |
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion | |
if $(python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('ntfy') else 1)") && [[ $MYUID -ne 0 ]]; then | |
/bin/true #eval "$(ntfy shell-integration)" | |
fi | |
if [ -f '/opt/google-cloud-sdk/path.bash.inc' ]; then . '/opt/google-cloud-sdk/path.bash.inc'; fi | |
if [ -f '/opt/google-cloud-sdk/completion.bash.inc' ]; then . '/opt/google-cloud-sdk/completion.bash.inc'; fi | |
# [[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh | |
export __bp_enable_subshells="true" | |
function precmd_git_dirty() { | |
if [ -d "$PWD/.git" ]; then | |
git diff-index --quiet HEAD -- &>/dev/null | |
local GITSTATUS=$? | |
if [ "$GITSTATUS" -eq 1 ]; then | |
failure "The current working directory is a Git repository with unstaged changes." | |
fi | |
fi | |
} | |
#preexec_functions+=(precmd_git_dirty) | |
#precmd_functions+=(precmd_git_dirty) | |
# exit status emoji | |
#export PROMPT_COMMAND='echo -ne "$(smiley) \033]0;${USER}@${HOSTNAME}: ${PWD}\007"' | |
#export PROMPT_COMMAND='echo -ne "$(smiley)$(__vte_osc7) \033]0 ${USER}@${HOSTNAME}: ${PWD}\007"' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment