config/shell: update & move aliases & helpers
Among others to remove excessive sudo prompts
This commit is contained in:
parent
27b93aed3e
commit
1e399f122b
|
@ -1,3 +1,3 @@
|
||||||
[termname]*vbell: True
|
[termname]*vbell: True
|
||||||
*.font: mono:pixelsize=28:antialias=true:autohint=true;
|
#*.font: mono:pixelsize=28:antialias=true:autohint=true;
|
||||||
*.background: #222
|
*.background: #222
|
||||||
|
|
|
@ -45,25 +45,14 @@ ulimit -c unlimited # Enable core dumps
|
||||||
which lsb_release >/dev/null && export DIST=$(lsb_release --id | cut -d' ' -f2) || true
|
which lsb_release >/dev/null && export DIST=$(lsb_release --id | cut -d' ' -f2) || true
|
||||||
|
|
||||||
unalias rd 2>/dev/null
|
unalias rd 2>/dev/null
|
||||||
rd() {
|
|
||||||
for f in "$@"
|
|
||||||
do
|
|
||||||
if test -d "$f"; then
|
|
||||||
if test -d "$f/.git"
|
|
||||||
then echo "Force delete git project?" && read answer && test "$answer" = "y" && rm -rf "$f"
|
|
||||||
else find "$f" -maxdepth 1 -type d -empty -printf "Removing empty %p\n" -delete
|
|
||||||
fi
|
|
||||||
else rm -i "$f"
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# like "which", but shows contents if it resolves to a file
|
# like "which", but shows contents if it resolves to a file
|
||||||
|
# and resolves recursive aliases
|
||||||
wh() {
|
wh() {
|
||||||
res=$(which "$@")
|
res=$(which "$@")
|
||||||
if expr "$res" : "${@:$#}: aliased to" >/dev/null
|
if expr "$res" : "${@:$#}: aliased to" >/dev/null && ! expr "$res" : ".*builtin" >/dev/null
|
||||||
then echo "$res" | bat --style=plain --language=sh && wh $(expr "$res" : "${@:$#}: aliased to ${@:$#} " >/dev/null && echo "-p") $(echo "$res" | cut -d' ' -f$(expr 5 '&' "$res" : ".*\(sudo\|noglob\)" '|' 4))
|
then echo "$res" | bat --style=plain --language=sh &&
|
||||||
|
wh $(expr "$res" : "${@:$#}: aliased to ${@:$#} " >/dev/null && echo "-p") $(echo "$res" | cut -d' ' -f$(expr 5 '&' "$res" : ".*\(sudo\|noglob\)" '|' 4) | cut -d'(' -f2)
|
||||||
# use command which for other shells
|
# use command which for other shells
|
||||||
else test -r "$res" && b --style=header "$res" || echo "$res" | bat --style=plain --language=sh
|
else test -r "$res" && b --style=header "$res" || echo "$res" | bat --style=plain --language=sh
|
||||||
fi
|
fi
|
||||||
|
@ -74,6 +63,8 @@ alias calc='rlwrap -a bc -l'
|
||||||
alias logoff="loginctl terminate-user $USER"
|
alias logoff="loginctl terminate-user $USER"
|
||||||
blues() { bluedevil-sendfile $(echo "$@" | xargs -n 1 realpath | xargs -n 1 echo -n " --files") }
|
blues() { bluedevil-sendfile $(echo "$@" | xargs -n 1 realpath | xargs -n 1 echo -n " --files") }
|
||||||
|
|
||||||
|
alias u='topgrade'
|
||||||
|
|
||||||
alias j='jrnl'
|
alias j='jrnl'
|
||||||
jn() { jrnl -to today "$@" | bat --style=plain --pager="less +G" }
|
jn() { jrnl -to today "$@" | bat --style=plain --pager="less +G" }
|
||||||
compdef jn=jrnl
|
compdef jn=jrnl
|
||||||
|
@ -84,9 +75,6 @@ alias edgrub='sudoedit /etc/default/grub && sudo update-grub'
|
||||||
alias edenv='sudoedit /etc/environment'
|
alias edenv='sudoedit /etc/environment'
|
||||||
alias edpart='sudoedit /etc/fstab && sudo findmnt --verify'
|
alias edpart='sudoedit /etc/fstab && sudo findmnt --verify'
|
||||||
|
|
||||||
# Underline arg
|
|
||||||
highlight() { echo "[4m$1[0m" }
|
|
||||||
|
|
||||||
alias dedup='awk '"'"'!a[$0]++'"'"
|
alias dedup='awk '"'"'!a[$0]++'"'"
|
||||||
listconf() {
|
listconf() {
|
||||||
{ cat "$conf_cache"; test -f "$conf_extra" && cat "$conf_extra";
|
{ cat "$conf_cache"; test -f "$conf_extra" && cat "$conf_extra";
|
||||||
|
@ -102,7 +90,7 @@ edconf() {
|
||||||
mkdir -p "$conf_cache_dir"
|
mkdir -p "$conf_cache_dir"
|
||||||
touch "$conf_cache"
|
touch "$conf_cache"
|
||||||
sel=$(listconf | fzf -1 -0 --tiebreak=end,length --preview '$(test -r "{}" || echo "sudo") bat --color=always --style=numbers --line-range :200 {}' --query="$1" --history "$conf_cache_dir/searches")
|
sel=$(listconf | fzf -1 -0 --tiebreak=end,length --preview '$(test -r "{}" || echo "sudo") bat --color=always --style=numbers --line-range :200 {}' --query="$1" --history "$conf_cache_dir/searches")
|
||||||
test "$sel" && ((echo "$sel" | cat - "$conf_cache" | head -30 >"$conf_tmp" && mv "$conf_tmp" "$conf_cache") & edit "$sel")
|
test "$sel" && ((echo "$sel" | cat - "$conf_cache" | head -20 >"$conf_tmp" && mv "$conf_tmp" "$conf_cache") & edit "$sel")
|
||||||
}
|
}
|
||||||
|
|
||||||
alias hist='print -z $(history | tac | fzf --tiebreak=index --bind="'"del:execute(echo \"'/;{4..}$/d'\" && sed '/;{4..}$/d' -i.bak $HISTFILE)"'" | sed "s|^ \+||" | cut -d" " -f5-)'
|
alias hist='print -z $(history | tac | fzf --tiebreak=index --bind="'"del:execute(echo \"'/;{4..}$/d'\" && sed '/;{4..}$/d' -i.bak $HISTFILE)"'" | sed "s|^ \+||" | cut -d" " -f5-)'
|
||||||
|
@ -130,7 +118,7 @@ edshell() {
|
||||||
|
|
||||||
alias l="ls -l --almost-all --human-readable --group-directories-first --file-type"
|
alias l="ls -l --almost-all --human-readable --group-directories-first --file-type"
|
||||||
cd() {
|
cd() {
|
||||||
test ! -d "$1" && test $# -eq 1 && dir=$(f --glob "$1*" "$DATA" --maxdepth 2 --type d --max-results 1) &&
|
test "$1" != "-" -a ! -d "$1" -a $# -eq 1 && dir=$(f --glob "$1*" "$DATA" --maxdepth 2 --type d --max-results 1) &&
|
||||||
test -n "$dir" && cd "$dir" && return
|
test -n "$dir" && cd "$dir" && return
|
||||||
builtin cd $1 &&
|
builtin cd $1 &&
|
||||||
command ls --file-type --group-directories-first --color=always --format=vertical -w $COLUMNS | head -3
|
command ls --file-type --group-directories-first --color=always --format=vertical -w $COLUMNS | head -3
|
||||||
|
@ -157,9 +145,8 @@ t() {
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
alias tw='timew'
|
alias tw='timew'
|
||||||
twsm() { timew summary $(date --date="Monday $1 week ago" -I) to tomorrow :ids ${@:2} }
|
# Create a temporary timewarrior database for testing
|
||||||
alias twtest='( cp -r "$TIMEWARRIORDB" /tmp/tw-bak && TIMEWARRIORDB=/tmp/timewarriordb-test/$(date +%s) && mkdir -p "$TIMEWARRIORDB"/data && :> "$TIMEWARRIORDB"/timewarrior.cfg && $SHELL )'
|
alias twtest='( cp -r "$TIMEWARRIORDB" /tmp/tw-bak && TIMEWARRIORDB=/tmp/timewarriordb-test/$(date +%s) && mkdir -p "$TIMEWARRIORDB"/data && :> "$TIMEWARRIORDB"/timewarrior.cfg && $SHELL )'
|
||||||
|
|
||||||
alias expr='noglob expr'
|
alias expr='noglob expr'
|
||||||
|
@ -222,7 +209,7 @@ unv() { strings $1 | sed 's/5$//' | dedup }
|
||||||
hex() { hexyl "$@" | "${PAGER:-less}" }
|
hex() { hexyl "$@" | "${PAGER:-less}" }
|
||||||
|
|
||||||
# Applications
|
# Applications
|
||||||
alias dict="(builtin cd $XDG_DATA_HOME/dictcc && rlwrap perl dictcc-helper.pl)"
|
alias dict="rdictcc -d $XDG_DATA_HOME/dictcc" #"(builtin cd $XDG_DATA_HOME/dictcc && rlwrap perl dictcc-helper.pl)"
|
||||||
alias startMinecraftServer='curl https://ipinfo.io/ip | xclip -sel clip && cd ~/daten/games/sharedgames/minecraft/server && java -jar forge-1.12.2-14.23.5.2768-universal.jar -mx 8G'
|
alias startMinecraftServer='curl https://ipinfo.io/ip | xclip -sel clip && cd ~/daten/games/sharedgames/minecraft/server && java -jar forge-1.12.2-14.23.5.2768-universal.jar -mx 8G'
|
||||||
|
|
||||||
test -d $HOME/.dropbox && dropbox_path="$(cat $HOME/.dropbox/info.json | grep -Po '"'"path"'"\s*:\s*"\K([^"]*)')"
|
test -d $HOME/.dropbox && dropbox_path="$(cat $HOME/.dropbox/info.json | grep -Po '"'"path"'"\s*:\s*"\K([^"]*)')"
|
||||||
|
@ -377,7 +364,7 @@ resetdocker() {
|
||||||
typeset -A _clean_map
|
typeset -A _clean_map
|
||||||
if test "$BASH_VERSION"
|
if test "$BASH_VERSION"
|
||||||
then _clean_map=([h]=$XDG_CACHE_HOME [t]=/var/tmp)
|
then _clean_map=([h]=$XDG_CACHE_HOME [t]=/var/tmp)
|
||||||
else _clean_map=(h $XDG_CACHE_HOME t /var/tmp)
|
else _clean_map=(h $XDG_CACHE_HOME t /var/tmp v /var/cache)
|
||||||
fi
|
fi
|
||||||
_clean_folders=()
|
_clean_folders=()
|
||||||
clean() {
|
clean() {
|
||||||
|
@ -391,21 +378,9 @@ clean() {
|
||||||
find $projects_dir -name .gradle -print -exec rm -r {} +
|
find $projects_dir -name .gradle -print -exec rm -r {} +
|
||||||
fi
|
fi
|
||||||
|
|
||||||
highlight "m to clean mac-files"
|
|
||||||
if [[ $1 =~ "m" ]]; then
|
|
||||||
find -iname '.spotlight*' -exec rm -rI {} +
|
|
||||||
find -name '*.DS_Store' -delete
|
|
||||||
fi
|
|
||||||
|
|
||||||
highlight "e to clean electron caches"
|
highlight "e to clean electron caches"
|
||||||
[[ $1 =~ "e" ]] && find "$XDG_CONFIG_HOME" -type d -name "*Cache" -exec rm -r {} + -prune
|
[[ $1 =~ "e" ]] && find "$XDG_CONFIG_HOME" -type d -name "*Cache" -exec rm -r {} + -prune
|
||||||
|
|
||||||
highlight "c to clean local caches"
|
|
||||||
if [[ $1 =~ "c" ]]; then
|
|
||||||
find -name ".gradle" -o -name "generated" -o -name "dist_newstyle" -o -name "cache" -o -name "node_modules" -print -exec rm -r {} + -prune
|
|
||||||
find -name "*build" -print -exec rm -rI {} + -prune
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$BASH_VERSION"; then
|
if test "$BASH_VERSION"; then
|
||||||
for k in "${!_clean_map[@]}"; do
|
for k in "${!_clean_map[@]}"; do
|
||||||
highlight "$k to delete $_clean_map[$k]"
|
highlight "$k to delete $_clean_map[$k]"
|
||||||
|
@ -414,8 +389,9 @@ clean() {
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
for k in "${(@k)_clean_map}"; do
|
for k in "${(@k)_clean_map}"; do
|
||||||
highlight "$k to delete $_clean_map[$k]"
|
folder=$_clean_map[$k]
|
||||||
[[ $1 =~ "$k" ]] && rm -rfv "$_clean_map[$k]"
|
highlight "$k to delete $folder"
|
||||||
|
[[ $1 =~ "$k" ]] && sudo rm -rf "$folder" && echo "Deleted $folder"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -425,7 +401,19 @@ clean() {
|
||||||
export aptclean_last=$aptclean_cur
|
export aptclean_last=$aptclean_cur
|
||||||
fi
|
fi
|
||||||
|
|
||||||
highlight "f to delete empty folders"
|
highlight "c to recursively remove development caches"
|
||||||
|
if [[ $1 =~ "c" ]]; then
|
||||||
|
find -name ".gradle" -o -name "generated" -o -name "dist_newstyle" -o -name "cache" -o -name "node_modules" -print -exec rm -r {} + -prune
|
||||||
|
find -name "*build" -print -exec rm -rI {} + -prune
|
||||||
|
fi
|
||||||
|
|
||||||
|
highlight "m to recursively remove mac-files"
|
||||||
|
if [[ $1 =~ "m" ]]; then
|
||||||
|
find -iname '.spotlight*' -exec rm -rI {} +
|
||||||
|
find -name '*.DS_Store' -delete
|
||||||
|
fi
|
||||||
|
|
||||||
|
highlight "f to recursively remove empty folders"
|
||||||
[[ $1 =~ "f" ]] && find -empty -type d -delete -print
|
[[ $1 =~ "f" ]] && find -empty -type d -delete -print
|
||||||
|
|
||||||
highlight "o to optimize extensively"
|
highlight "o to optimize extensively"
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
test "$DISPLAY" || return 0
|
test "$DISPLAY" || return 0
|
||||||
|
|
||||||
which dragon >/dev/null && alias drag='dragon -x -a' || alias drag='dragon-drag-and-drop -x -a'
|
|
||||||
|
|
||||||
mozedit() (
|
mozedit() (
|
||||||
set -eo pipefail
|
set -eo pipefail
|
||||||
file="$1"
|
file="$1"
|
||||||
|
|
|
@ -7,9 +7,11 @@ set -eo pipefail
|
||||||
for last; do true; done
|
for last; do true; done
|
||||||
last=${last:-.}
|
last=${last:-.}
|
||||||
|
|
||||||
tput setaf 4 && $(test -r "$last" || echo "sudo") file -E "$last" | ( grep -v --color=never 'directory$' || true )
|
# Elevate permissions if the file exists but is not readable
|
||||||
|
# TODO: find the first visible directory up the tree and check if that is accessible
|
||||||
|
test -e "$last" || test -e "$(dirname $last)" && { test -r "$last" || elevate=sudo; }
|
||||||
|
tput setaf 4 && $elevate file -E "$last" | ( grep -v --color=never 'directory$' || true )
|
||||||
|
|
||||||
elevate="$(test -r "$last" || echo "sudo")"
|
|
||||||
case "$($elevate file --dereference --mime "$last")" in
|
case "$($elevate file --dereference --mime "$last")" in
|
||||||
*inode/directory*) tput sgr0 && $(test -x "$last" || echo "sudo") ls -l --color=always --human-readable --group-directories-first --file-type --dereference-command-line --all "$@" | less -XF;;
|
*inode/directory*) tput sgr0 && $(test -x "$last" || echo "sudo") ls -l --color=always --human-readable --group-directories-first --file-type --dereference-command-line --all "$@" | less -XF;;
|
||||||
*binary) ;;
|
*binary) ;;
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Start single all-in-one dragon-drag-and-drop with args or pwd
|
||||||
|
$(command which dragon 2>/dev/null || echo dragon-drag-and-drop) -x -a ${@:-.}
|
|
@ -1,9 +1,13 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# open info-page, man-page or buffered help flag
|
# open info-page, man-page or buffered help flag
|
||||||
|
set -o pipefail
|
||||||
|
paginate="${PAGER:-less} +Gg"
|
||||||
case $1 in
|
case $1 in
|
||||||
(vlc) unbuffer vlc --full-help "${@:2}" | ${PAGER:-less} --quit-if-one-screen;;
|
|
||||||
(zsh|zmv) # https://unix.stackexchange.com/questions/19290/zmv-for-zsh-dry-runs-and-man-pages
|
(zsh|zmv) # https://unix.stackexchange.com/questions/19290/zmv-for-zsh-dry-runs-and-man-pages
|
||||||
# need to install zsh-doc for info
|
search="${@:$#}"
|
||||||
info --vi-keys --index-search="${@:$#}" zsh || LESS="$LESS +/^ *zmv *\\[" man zshcontrib;;
|
# need to install zsh-doc package for info pages
|
||||||
(*) info "$1" -w | grep -v "manpages" && pinfo "$@" || man "$@" || "$@" --help | ${PAGER:-less} --quit-if-one-screen;;
|
info --vi-keys $(test $search != zsh && echo --index-search=$search) zsh || LESS="$LESS +/^ *${@:$#} *\\[" man zshall;;
|
||||||
|
(vlc) unbuffer vlc --full-help "${@:2}" | $paginate;;
|
||||||
|
(gh|chordpro) $@ --help | $paginate;;
|
||||||
|
(*) info "$1" -w | grep -v "manpages" && pinfo "$@" || man "$@" || ( "$@" --help || "$@" -help ) 2>&1 | $paginate;;
|
||||||
esac
|
esac
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Underline arg
|
||||||
|
echo "[4m$1[0m"
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Remove recursively safely
|
||||||
|
for f in "$@"
|
||||||
|
do
|
||||||
|
if test -d "$f"; then
|
||||||
|
if test -e "$f/.git" || test -e "$f/packed-refs"
|
||||||
|
then echo -n "Force delete git project $f?"
|
||||||
|
read answer
|
||||||
|
test "$answer" = "y" && rm -rf "$f"
|
||||||
|
else find "$f" -maxdepth 1 -type d -empty -printf "Removing empty %p\n" -delete
|
||||||
|
test -e "$f" && echo -n "$f " >&2 && rm -rI "$f"
|
||||||
|
fi
|
||||||
|
else rm -i "$f"
|
||||||
|
fi
|
||||||
|
shift
|
||||||
|
done
|
|
@ -2,5 +2,5 @@
|
||||||
# shows size statistics for subfolders
|
# shows size statistics for subfolders
|
||||||
# max depth is equal to the first argument if it is a number or 1
|
# max depth is equal to the first argument if it is a number or 1
|
||||||
case "$1" in [0-9]) depth=$1; shift;; esac
|
case "$1" in [0-9]) depth=$1; shift;; esac
|
||||||
(sudo du --max-depth "${depth:-1}" -xhat 50M "$@" | sort -h | grep -v "^0") ||
|
(du --max-depth "${depth:-1}" -xhat 50M "$@" | sort -h | grep -v "^0") ||
|
||||||
(sudo du --max-depth "${depth:-1}" -xha "$@" | sort -h | tail)
|
(du --max-depth "${depth:-1}" -xha "$@" | sort -h | tail)
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Timewarrior summary of the last n weeks
|
||||||
|
timew summary $(date --date="Monday $1 week ago" -I) to tomorrow :ids ${@:2} |
|
||||||
|
less --quit-if-one-screen +G
|
Loading…
Reference in New Issue