#!/hint/bash ###################################################################### # Set up colors and settings for all the things # ###################################################################### if type dircolors &>/dev/null; then eval "$( { dircolors -p if [[ -f "${XDG_CONFIG_HOME}/dir_colors" ]]; then cat "${XDG_CONFIG_HOME}/dir_colors" fi } | dircolors -b - )" alias ls='ls -1v --color=auto' alias dir='dir -v --color=auto' alias vdir='vdir -v --color=auto' for xgrep in ${PATH//:/\/*grep }/*grep; do if [ -f "$xgrep" ]; then xgrep=$(basename "$xgrep") if [ "$xgrep" != pgrep ]; then alias $xgrep="$xgrep --color=auto" fi fi done unset xgrep wdiff() { if [[ -t 1 ]]; then local old new off if type colordiff &>/dev/null; then eval "$(colordiff <(echo old) <(echo new)|sed -rn 's@(.*)[<>] (old|new)(.*)@\2='\''\1'\''\noff='\''\3'\''\n@p')" else new="$(tput setaf 2)" old="$(tput setaf 1)" off="$(tput sgr0)" fi command wdiff \ -w "$old[-" \ -x "-]$off" \ -y "$new{+" \ -z "+}$off" \ "$@" else command wdiff "$@" fi } chardiff() { if [[ -t 1 ]]; then local old new off if type colordiff &>/dev/null; then eval "$(colordiff <(echo old) <(echo new)|sed -rn 's@(.*)[<>] (old|new)(.*)@\2='\''\1'\''\noff='\''\3'\''\n@p')" else new="$(tput setaf 2)" old="$(tput setaf 1)" off="$(tput sgr0)" fi command chardiff \ -w "$old[-" \ -x "-]$off" \ -y "$new{+" \ -z "+}$off" \ "$@" else command chardiff "$@" fi } diff() { if [[ -t 1 ]] && type colordiff &>/dev/null; then ( set -o pipefail command diff "$@" | colordiff ) else command diff "$@" fi } diffstat() { if [[ -t 1 ]]; then command diffstat -C "$@" else command diffstat "$@" fi } else alias ls='ls -1v' alias dir='dir -v' alias vdir='vdir -v' fi ###################################################################### # Set up the standard aliases for ls # ###################################################################### alias ll='ls -l' alias la='ls -a' alias l='ls -CF' ###################################################################### # Some preferences for miscellaneous stuff # ###################################################################### #alias rm='gvfs-trash' alias tree='tree --charset utf8' alias cd=pushd alias gitk='gitk --all --date-order' alias mv='mv -i' alias bc='bc -q' alias userctl='systemctl --user' alias journalctl='journalctl --no-hostname' # I know what host I'm on alias datetimectl=timedatectl # I forget which it is ###################################################################### # These are actually functions :P # ###################################################################### term-title() { local fmt='' case "$TERM" in screen|tmux) fmt='\ek%s\e\\';; xterm*|rxvt*) fmt='\e]0;%s\a';; esac printf "$fmt" "$*" } mvln() { local name=mvln local verbing=moving _cpln "$@" } cpln() { local name=cpln local verbing=copying _cpln "$@" } _cpln() { if [[ $# -lt 2 ]]; then libremessages error 'Usage: %s FILES... DEST' "$name" return 1 fi declare -i i=1 while [[ $i -lt $# ]]; do local src dst target link src="${!i}" dst="${!#}" if [[ ! -L "$src" ]]; then libremessages error 'Not a soft link: %s' "$src" return 1 fi if [[ -d "$dst" ]]; then link="$dst/${src##*/}" else link="$dst" fi target=$(readlink -f -- "$src") || return 1 ln -srT -- "$target" "$link" # using `cmp` instead of `[ "$src" -ef "$link" ]` has # the use-case where "$link" was a pre-existing link # to a duplicate of "$src". if ! cmp -- "$src" "$link"; then libremessages error 'Failed %s link: %s -> %s' "$verbing" "$src" "$link" return 1 fi if [[ "$name" = mvln ]]; then rm -f -- "$src" fi i+=1 done } jarls() { jar tf "$1" | sed -n 's/\.class$//p' | LC_ALL=C sort | xargs -r -d $'\n' javap -classpath "$1" } tarls() { local file for file in "$@"; do bsdtar tf "$file" | sed "s|^|$file:|" done } jarmain() { jarls "$1" 2>/dev/null | grep -E '(^[a-z]|public static void main\(java\.lang\.String\[\]\))' | grep -B1 '^ ' } calc() { bc <<<"$*" }