My dotfiles. Period.

main.bashrc 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  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. git() {
  12. #
  13. # /usr/bin/git wrapper just to disable dangerous commands
  14. #
  15. # In particular, `git-am` is a a close typo of my favorite
  16. # aliases `ap` (`git-add --patch`) and `cm` (`git-commit`)
  17. # but it's dangerous to call by accident as it destroys
  18. # workdir changes.
  19. #
  20. if grep -Fwqse "$1" "$GIT_DISABLED_COMMANDS"; then
  21. echo "You don't want this." >&2
  22. return 1
  23. else
  24. command git "$@"
  25. fi
  26. }
  27. grepr() {
  28. #
  29. # Grep recursively, keeping numbers and ignoring common dirs
  30. #
  31. # Number one tool for refactoring!
  32. #
  33. local p=$1; shift
  34. grep --color -n --exclude-dir=".git" -e "$p" -r "$@"
  35. }
  36. greph() {
  37. #
  38. # Grep through bash history
  39. #
  40. history | sed 's/^ *//; s/ / /' | cut -d' ' -f2- | grep "$@"
  41. }
  42. gitcd() {
  43. #
  44. # Deep in git repo, cd to the git root
  45. #
  46. cd "$(git rev-parse --show-toplevel)"
  47. }
  48. clsz() {
  49. #
  50. # Clear screen and move the prompt to bottom
  51. #
  52. tput clear; tput cup "$(tput lines)" 0
  53. }
  54. bcdiff() {
  55. #
  56. # Call bcompare only if objects actually differ
  57. #
  58. test $# -eq 2 && diff "$@" >/dev/null && return
  59. bcompare "$@" &
  60. }
  61. strip_colors() {
  62. #
  63. # Strip color codes from stdin
  64. #
  65. # Stolen from http://unix.stackexchange.com/a/4533/9365
  66. #
  67. sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g"
  68. }
  69. vims() {
  70. #
  71. # Show "abandoned" Vim .swp files in a nice table
  72. #
  73. # Call this after crash or poweroff to get back and recover
  74. # files open before the fact. Example:
  75. #
  76. # 2015-07-10 06:10:48.603953758 +0200 ~/TODO.todo
  77. #
  78. # Depends on .swp settings defined in my mydots repo.
  79. #
  80. local swap="$HOME/.local/share/vim/swap"
  81. find "$swap" -type f -print0 \
  82. | xargs -0 -r stat -c "%y %n" \
  83. | sed "
  84. s| $swap/| |
  85. s|%|/|g
  86. s|.swp$||
  87. s| $HOME| ~|
  88. s| \(..:..\):[^ ]* +.... | \\1 |
  89. " \
  90. | sort \
  91. | tac
  92. }
  93. xod() {
  94. #
  95. # Like mktemp but get the content from clipboard
  96. #
  97. # Dump xo in a file named $1 somewhere in /tmp; echo the path
  98. # usage: scp $(xod useful_name.txt) eg:some/shared/place
  99. # instead of xo>useful_name.txt; scp useful_name.txt eg:some/shared/place; rm useful_name.txt
  100. #
  101. local name="${1:-clipboard_dump.txt}"
  102. local tmp=$(mktemp -d -t "xod.XXXXXXXX")
  103. xclip -o > "$tmp/$name"
  104. echo "$tmp/$name"
  105. }
  106. xood() {
  107. #
  108. # Just like xod() but using xoo (i.e. 'clipboard' clipboard)
  109. #
  110. local name="${1:-clipboard_dump.txt}"
  111. local tmp=$(mktemp -d -t "xood.XXXXXXXX")
  112. xclip -selection clipboard -o > "$tmp/$name"
  113. echo "$tmp/$name"
  114. }
  115. yum_hasbin() {
  116. #
  117. # Ask yum who has bin $1 (and make the output actually readable)
  118. #
  119. local bname
  120. for bname in "$@";
  121. do
  122. yum provides "*bin/$bname" \
  123. | grep '^.' \
  124. | grep -E '^[0-9a-zA-Z_:.-]+ :'
  125. done
  126. }
  127. ### .... ###
  128. ### BASH ###
  129. ### '''' ###
  130. HISTCONTROL=erasedups
  131. HISTIGNORE="$HISTIGNORE:ls:ll:la:cd"
  132. HISTIGNORE="$HISTIGNORE:git dc:git st"
  133. #export HISTIGNORE="$HISTIGNORE:se *:sc *"
  134. HISTSIZE=-1
  135. HISTFILESIZE=100000
  136. GLOBIGNORE=.:..
  137. shopt -s histverify
  138. # some more aliases
  139. alias cal='cal -m'
  140. alias cls='clear'
  141. alias ll='ls -lh'
  142. alias lla='ls -lha'
  143. alias open='gnome-open'
  144. alias diff='diff -u'
  145. alias dmesg='dmesg --time-format iso'
  146. alias pad4='sed -e "/./s/^/ /"'
  147. alias grep='grep --color --binary-files=without-match'
  148. alias sc='se --direction=encz.cz'
  149. alias ts='ts "%F %T"'
  150. alias lsblk='lsblk -o +UUID,LABEL'
  151. alias virsh='virsh --connect qemu:///system'
  152. alias xaa='xclip -o | audit2allow'
  153. alias xi='xclip -i'
  154. alias xii='xclip -selection clipboard -i'
  155. alias xo='xclip -o'
  156. alias xoo='xclip -selection clipboard -o'
  157. RV_TMP="/tmp/bash-rv"
  158. mkdir -p "$RV_TMP"
  159. ### ...... ###
  160. ### OTHERS ###
  161. ### '''''' ###
  162. export LC_COLLATE=C # make sort upper first
  163. export SHELLFU_PRETTY=color
  164. export SHELLFU_DEBUG_EXCLUDE=inigrep
  165. # make green git bash trinket even cooler
  166. GIT_PS1_SHOWDIRTYSTATE=true
  167. GIT_PS1_SHOWUNTRACKEDFILES=true
  168. GIT_DISABLED_COMMANDS="$HOME/.gittum/disabled-commands"
  169. export GIT_PAGER='less -S'
  170. # disable mounting things like SFTP to ~/.gvfs when accessed
  171. # via GIO (used by nautilus etc.)
  172. export GVFS_DISABLE_FUSE=1
  173. # disable the terrible beep sound (only for X; for tty?, blacklist pcspkr)
  174. [[ ${!DISPLAY[@]} ]] && xset b off
  175. # get rid of those .pyc files once and for all
  176. export PYTHONDONTWRITEBYTECODE=1
  177. ssh-add -l >& /dev/null || ssh-add