0010-functions.rc 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #!/usr/bin/rc
  2. if (~ `{uname -a} *Debian*) {
  3. os_flavor=debian
  4. } else {
  5. os_flavor=arch
  6. }
  7. ########################
  8. ## package management ##
  9. ########################
  10. fn whats { # search for software
  11. if (~ $os_flavor debian) {
  12. apt-cache search $* | grep --color'='always '^\S\+' | less -R
  13. } else {
  14. pacman --color always -Ss $* | less -R
  15. }
  16. }
  17. fn update { # update the system
  18. if (~ $os_flavor debian) {
  19. sudo apt-get update && sudo apt-get upgrade
  20. } else {
  21. sudo pacman -Syu
  22. }
  23. }
  24. fn gimme { # install software
  25. if (~ $os_flavor debian) {
  26. update && sudo apt-get install $*
  27. } else {
  28. update && sudo pacman -S $*
  29. }
  30. }
  31. fn drop { # remove software
  32. if (~ $os_flavor debian) {
  33. sudo apt-get remove $* && sudo apt-get autoremove
  34. } else {
  35. sudo pacman -Rs $*
  36. }
  37. }
  38. if (~ $os_flavor debian) {
  39. fn makedeb { # build a debian package from source ONLY ON DEBIAN
  40. dpkg-buildpackage -rfakeroot -uc -b
  41. }
  42. }
  43. fn howdoi { # print executable files given by a package
  44. if (~ $os_flavor debian) {
  45. f = () for (f in `{dpkg -L $1}) {
  46. if (test -x $f && ! test -d $f) {
  47. echo $f
  48. }
  49. }
  50. } else {
  51. f = () for (f in `{pacman -Ql $1 | cut -f2 -d' '}) {
  52. if (test -x $f && ! test -d $f) {
  53. echo $f
  54. }
  55. }
  56. }
  57. }
  58. fn about { # print man-pages given by a package
  59. if (~ $os_flavor debian) {
  60. basename -a `{dpkg -L $1 | grep '^/usr/share/man/.*gz'} | sort
  61. } else {
  62. basename -a `{pacman -Ql $1 | cut -f2 -d' ' | grep '^/usr/share/man/.*gz'} | sort
  63. }
  64. }
  65. #######################
  66. ## rc list functions ##
  67. #######################
  68. fn pop { # pop the head from a list
  69. name=$1
  70. *=$$name
  71. popped=$1
  72. shift
  73. $name=$*
  74. echo $popped
  75. }
  76. fn push { # (list x ...) push x onto list
  77. name=$1 {
  78. shift
  79. x = () for (x in $*) {
  80. $name=($x $$name)
  81. }
  82. }
  83. }
  84. fn join { # (list sep) join a list by sep
  85. sep=$2 {
  86. *=$$1
  87. while (true) {
  88. echo -n $1
  89. shift
  90. if (~ $#* 0) {
  91. break
  92. } else {
  93. echo -n $sep
  94. }
  95. }
  96. }
  97. }
  98. #########################
  99. ## Shorthand functions ##
  100. #########################
  101. fn l { # ls --color=always
  102. ls --color'='always $*
  103. }
  104. fn cls { # clear ; ls
  105. clear
  106. l
  107. }
  108. fn attach { # attach to an existing tmux session, or create a new one
  109. tmux attach || tmux
  110. }
  111. fn jmp { # jump into a directory, creating it if needed
  112. mkdir -p $1 && cd $1
  113. }
  114. fn pne { # perl -ne while (/.../g) { print ...\n }
  115. x = $2 {
  116. if (~ $x ()) { x = '$1' }
  117. perl -ne 'while (/'$1'/g) { print "'$x'\n" }'
  118. }
  119. }
  120. ###########
  121. ## papes ##
  122. ###########
  123. fn watchimg { # watch for new files in the current directory, and display them via $*
  124. while(true) {
  125. f=`{inotifywait -e create .} {
  126. clear
  127. $* $f(3)
  128. }
  129. }
  130. }
  131. fn getwalls { # (query, [page]) download wallpapers
  132. page=1 {
  133. if (~ $#* 2) {
  134. page=$2
  135. }
  136. i = () for (i in `{wh $1 $page}) {
  137. echo -n `{basename $i}
  138. curl $i -Os
  139. echo ' ... DONE'
  140. }
  141. }
  142. }
  143. ###################
  144. ## Introspection ##
  145. ###################
  146. fn my_functions { # list functions
  147. @ {
  148. awk_script = '
  149. /^##/ {
  150. if (banner == 0) { print "" };
  151. print "\x1b[34m" $0 "\x1b[0m";
  152. banner=1
  153. }
  154. /^fn (.*) \{ # (.*)$/ {
  155. banner=0;
  156. print("\x1b[31m" $2 ":\x1b[0m" substr($0, index($0, "#") + 1));
  157. }
  158. '
  159. awk $awk_script $home/.rc.d/0010-functions.rc
  160. }
  161. }