My dotfiles. Period.

main.bashrc 8.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. #!/bin/bash
  2. ## hack to workaround Fedora/Red Hat bug 878428
  3. test -f /usr/share/git-core/contrib/completion/git-prompt.sh \
  4. && . /usr/share/git-core/contrib/completion/git-prompt.sh
  5. #######################################################
  6. ### things to do BEFORE host/user-specific settings ###
  7. #######################################################
  8. ### .... ###
  9. ### SUBZ ###
  10. ### '''' ###
  11. dt() {
  12. #
  13. # Open $1 new terminals
  14. #
  15. __bashum_run_n "${1:-1}" urxvt
  16. }
  17. dT() {
  18. #
  19. # Open $1 new alterminals
  20. #
  21. __bashum_run_n "${1:-1}" xfce4-terminal
  22. }
  23. __bashum_run_n() {
  24. #
  25. # Run $2 in background $1 times
  26. #
  27. local n=${1:-1}
  28. while test "$n" -gt 0;
  29. do
  30. "$2" &
  31. ((n--))
  32. done
  33. }
  34. git() {
  35. #
  36. # /usr/bin/git wrapper just to disable dangerous commands
  37. #
  38. # In particular, `git-am` is a a close typo of my favorite
  39. # aliases `ap` (`git-add --patch`) and `cm` (`git-commit`)
  40. # but it's dangerous to call by accident as it destroys
  41. # workdir changes.
  42. #
  43. if grep -Fwqse "$1" "$GIT_DISABLED_COMMANDS"; then
  44. echo "You don't want this." >&2
  45. return 1
  46. else
  47. command git "$@"
  48. fi
  49. }
  50. grepr() {
  51. #
  52. # Grep recursively, keeping numbers and ignoring common dirs
  53. #
  54. # Number one tool for refactoring!
  55. #
  56. local p=$1; shift
  57. grep --color -n --exclude-dir=".git" -e "$p" -r "$@"
  58. }
  59. greph() {
  60. #
  61. # Grep through bash history
  62. #
  63. history | sed 's/^ *//; s/ / /' | cut -d' ' -f2- | grep "$@"
  64. }
  65. gitcd() {
  66. #
  67. # Deep in git repo, cd to the git root
  68. #
  69. cd "$(git rev-parse --show-toplevel)"
  70. }
  71. haste() {
  72. #
  73. # Send stdin to hastebin.com and print resulting URL
  74. #
  75. local a=$(cat)
  76. curl -X POST -s -d "$a" http://hastebin.com/documents \
  77. | awk -F '"' '{print "http://hastebin.com/"$4}'
  78. }
  79. clsz() {
  80. #
  81. # Clear screen and move the prompt to bottom
  82. #
  83. tput clear; tput cup "$(tput lines)" 0
  84. }
  85. bcdiff() {
  86. #
  87. # Call bcompare only if objects actually differ
  88. #
  89. test $# -eq 2 && diff "$@" >/dev/null && return
  90. bcompare "$@" &
  91. }
  92. strip_colors() {
  93. #
  94. # Strip color codes from stdin
  95. #
  96. # Stolen from http://unix.stackexchange.com/a/4533/9365
  97. #
  98. sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
  99. }
  100. vims() {
  101. #
  102. # List Vim .swp files in a nice table
  103. #
  104. # **Note:** For this ro work, you need to set up Vim to
  105. # use same swap directory as assigned below. this can
  106. # be achieved by addoing section such as this to your
  107. # .vimrc:
  108. #
  109. # if isdirectory($HOME . '/.local/share/vim') == 0
  110. # :silent !mkdir -p ~/.vim/swap >/dev/null 2>&1
  111. # endif
  112. # set directory=./.vim-swap//
  113. # set directory+=~/.local/share/vim/swap//
  114. # set directory+=~/tmp//
  115. # set directory+=.
  116. #
  117. # Call this after crash or poweroff to remind yourself what
  118. # files you were editing before fact. Example:
  119. #
  120. # 2015-07-10 06:10:48.603953758 +0200 ~/TODO.todo
  121. #
  122. # This should make it easier to recover after a little
  123. # disaster.
  124. #
  125. local swap="$HOME/.local/share/vim/swap"
  126. find "$swap" -type f -print0 \
  127. | xargs -0 -r stat -c "%y %n" \
  128. | sed "
  129. s| $swap/| |
  130. s|%|/|g
  131. s|.swp$||
  132. s| $HOME| ~|
  133. s| \(..:..\):[^ ]* +.... | \\1 |
  134. " \
  135. | sort \
  136. | tac
  137. }
  138. fixnl() {
  139. #
  140. # Fix newlines in stdin and pass to stdout
  141. #
  142. # Note: We need to read whole stdin; this cannot work
  143. # for infinite stream.
  144. #
  145. # Fix annoying cases:
  146. #
  147. # * If multi-line text is missing newline at the
  148. # end---add the missing newline.
  149. #
  150. # * If -c is passed, and single-line text does have
  151. # a newline at the end, remove it.
  152. #
  153. # This will not touch properly terminated multi-line texts,
  154. # or zero-line texts (ie. oly chars with no newline at all).
  155. #
  156. local arg=$1 # argument passed
  157. local cache # cache to keep stream in
  158. local nlcount # count of newlines in the stream
  159. local lastchr # hex dump (2-digit, lowercase) of last char
  160. local single=keep # single-line streams:
  161. # keep: do nothing
  162. # chop: drop last char if it's a LF
  163. case $arg in
  164. -c|--chop-single) single=chop ;;
  165. esac
  166. cache="$(mktemp -t fixnl.XXXXXXXX)"
  167. cat >"$cache"
  168. nlcount=$(<"$cache" wc -l)
  169. lastchr=$(<"$cache" tail -c1 | hexdump -e '"%02x"')
  170. case $nlcount:$lastchr:$single in
  171. 0:??:*) cat "$cache" ;; # 'abc' => keep as is
  172. 1:0a:chop) head -c -1 "$cache" ;; # 'abc\n' => -c passed: chop!
  173. 1:0a:keep) cat "$cache" ;; # 'abc\n' => keep as is
  174. *:0a:*) cat "$cache" ;; # 'a\nb\nc\n' => keep as is
  175. *:??:*) cat "$cache"; echo ;; # 'a\nb\nc' => add the missing NL
  176. esac
  177. rm "$cache"
  178. }
  179. nlfor() {
  180. #
  181. # Replace $1 with newlines and fix final newline
  182. #
  183. # Shorthand for commonly used tr syntax. Example:
  184. #
  185. # $ echo "$PATH" | nlat :
  186. # /foo
  187. # /bar
  188. # $
  189. #
  190. # is almost like `tr -n :` except that it is a bit easier
  191. # to type and fixes the annoying problem with missing
  192. # newline at the end of the replaced string.
  193. #
  194. local char=$1
  195. tr "$char" '\n' \
  196. | fixnl
  197. }
  198. xop() {
  199. #
  200. # Common clipboard operations with fixnl() on top
  201. #
  202. local op=$1
  203. local file=${2:-/dev/stdin}
  204. case $op in
  205. oo) xclip -selection clipboard -o | fixnl ;;
  206. o) xclip -o | fixnl ;;
  207. ii) fixnl -c | xclip -selection clipboard -i ;;
  208. i) fixnl -c | xclip -i ;;
  209. esac <"$file"
  210. }
  211. xod() {
  212. #
  213. # Like mktemp but get the content from clipboard
  214. #
  215. # Dump xo in a file named $1 somewhere in /tmp; echo the path
  216. # usage: scp $(xod useful_name.txt) eg:some/shared/place
  217. # instead of xo>useful_name.txt; scp useful_name.txt eg:some/shared/place; rm useful_name.txt
  218. #
  219. local name="${1:-clipboard_dump.txt}"
  220. local tmp=$(mktemp -d -t "xod.XXXXXXXX")
  221. xclip -o > "$tmp/$name"
  222. echo "$tmp/$name"
  223. }
  224. xood() {
  225. #
  226. # Just like xod() but using xoo (i.e. 'clipboard' clipboard)
  227. #
  228. local name="${1:-clipboard_dump.txt}"
  229. local tmp=$(mktemp -d -t "xood.XXXXXXXX")
  230. xclip -selection clipboard -o > "$tmp/$name"
  231. echo "$tmp/$name"
  232. }
  233. yum_hasbin() {
  234. #
  235. # Ask yum who has bin $1 (and make the output actually readable)
  236. #
  237. local bname
  238. for bname in "$@";
  239. do
  240. case $bname in
  241. */*) dnf provides "$bname" ;;
  242. *) dnf provides "*/bin/$bname" ;;
  243. esac \
  244. | grep '^.' \
  245. | grep -E '^[[:alnum:]_:.-]+ :'
  246. done
  247. }
  248. ### .... ###
  249. ### BASH ###
  250. ### '''' ###
  251. HISTCONTROL=ignoredups:erasedups
  252. shopt -s histappend
  253. PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
  254. HISTIGNORE="$HISTIGNORE:ls:ll:la:cd"
  255. HISTIGNORE="$HISTIGNORE:git dc:git st"
  256. HISTIGNORE="$HISTIGNORE:reset"
  257. #export HISTIGNORE="$HISTIGNORE:se *:sc *"
  258. HISTSIZE=-1
  259. HISTFILESIZE=100000
  260. GLOBIGNORE=.:..
  261. shopt -s histverify
  262. # some more aliases
  263. alias cal='cal -m'
  264. alias cls='clear'
  265. alias ll='ls -lh'
  266. alias lla='ls -lha'
  267. alias open='gnome-open'
  268. alias diff='colordiff -u'
  269. alias dmesg='dmesg --time-format iso'
  270. alias pad4='sed -e "/./s/^/ /"'
  271. alias grep='grep --color --binary-files=without-match'
  272. alias sc='se --direction=encz.cz'
  273. alias taskm='task modify'
  274. alias tasks='task rc.context:none'
  275. alias ts='ts "%F %T"'
  276. alias lsblk='lsblk -o +UUID,LABEL'
  277. alias virsh='virsh --connect qemu:///system'
  278. alias xaa='xclip -o | audit2allow'
  279. alias xi='xop i'
  280. alias xii='xop ii'
  281. alias xo='xop o'
  282. alias xoo='xop oo'
  283. alias reboot="echo -n . ; sync ; echo -n . ; sync ; echo -n . ; systemctl reboot"
  284. alias poweroff="echo -n . ; sync ; echo -n . ; sync ; echo -n . ; systemctl poweroff"
  285. RV_TMP="/tmp/bash-rv"
  286. mkdir -p "$RV_TMP"
  287. ### ...... ###
  288. ### OTHERS ###
  289. ### '''''' ###
  290. export LC_COLLATE=C # make sort upper first
  291. export EDITOR=vim
  292. export PRETTY=color
  293. export PRETTY_DEBUG_EXCLUDE=inigrep
  294. # make green git bash trinket even cooler
  295. GIT_PS1_SHOWDIRTYSTATE=true
  296. GIT_PS1_SHOWUNTRACKEDFILES=true
  297. GIT_DISABLED_COMMANDS="$HOME/.gittum/disabled-commands"
  298. export GIT_PAGER='less -S'
  299. # disable mounting things like SFTP to ~/.gvfs when accessed
  300. # via GIO (used by nautilus etc.)
  301. export GVFS_DISABLE_FUSE=1
  302. # disable the terrible beep sound (only for X; for tty?, blacklist pcspkr)
  303. xhost >& /dev/null && xset b off
  304. # get rid of those .pyc files once and for all
  305. export PYTHONDONTWRITEBYTECODE=1
  306. ssh-add -l >& /dev/null || ssh-add