You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

334 lines
7.5 KiB

  1. #!/bin/sh
  2. set -e
  3. # setup.sh --- 10sr setup script
  4. __setups="gitconf tmux scripts darwin dirs selfupdate windirs"
  5. __homelocal="$HOME/.local"
  6. __homevar="$HOME/.var"
  7. ###########################
  8. # utils
  9. _download(){
  10. # download <url> <file>
  11. if type wget >/dev/null 2>&1
  12. then
  13. wget $__my_wget_options "$1" -O "$2"
  14. elif type curl >/dev/null 2>&1
  15. then
  16. curl --url "$1" --output "$2"
  17. fi
  18. }
  19. #############################
  20. # gen_common
  21. # Generate ~/.shrc.common, which contains system infos and is sourced from
  22. # setup.sh (this file) and dotfiles/shrc .
  23. # This functions is always called.
  24. # this variable must consistent with shrc
  25. __shrc_common="$HOME/.shrc.common"
  26. gen_common(){
  27. test -f "$__shrc_common" && rm -- "$__shrc_common"
  28. __ismsys=false
  29. __iscygwin=false
  30. __iswindows=false
  31. __isdarwin=false
  32. __isfreebsd=false
  33. __isbsd=false
  34. __islinux=false
  35. # $OSTYPE is another choice. which is better?
  36. # NOTE: sh on FreeBSD does not define OSTYPE
  37. case `uname` in
  38. (MINGW*) __ismsys=true ;;
  39. (CYGWIN*) __iscygwin=true ;;
  40. (Darwin*) __isdarwin=true ;;
  41. (FreeBSD*) __isfreebsd=true ;;
  42. (Linux*) __islinux=true ;;
  43. esac
  44. ($__ismsys || $__iscygwin) && __iswindows=true
  45. # is this true?
  46. ($__isdarwin || $__isfreebsd) && __isbsd=true
  47. cat <<__EOC__ >"$__shrc_common"
  48. #!/bin/sh
  49. # $__shrc_common
  50. # Automatically generated by $0
  51. ismsys=$__ismsys
  52. iscygwin=$__iscygwin
  53. iswindows=$__iswindows
  54. isdarwin=$__isdarwin
  55. isfreebsd=$__isfreebsd
  56. isbsd=$__isbsd
  57. islinux=$__islinux
  58. __homelocal="$__homelocal"
  59. __homevar="$__homevar"
  60. __EOC__
  61. }
  62. ###############################
  63. # selfupdate
  64. __setup_url="https://raw.github.com/10sr/dotfiles/master/setup.sh"
  65. setup_selfupdate(){
  66. if test -z "$SETUP_OUTPUT"
  67. then
  68. echo SETUP_OUTPUT is not set.
  69. echo Ignore selfupdate.
  70. return
  71. fi
  72. _download $__setup_url "$SETUP_OUTPUT"
  73. }
  74. ################################
  75. # git_configs
  76. setup_gitconf(){
  77. if ! command -v git >/dev/null
  78. then
  79. echo "git not found"
  80. return 0
  81. fi
  82. _gc="git config --global"
  83. $_gc user.name '10sr'
  84. $_gc user.email '8slashes+git@gmail.com'
  85. $_gc core.autocrlf false
  86. $_gc core.excludesfile '~/.gitignore'
  87. $_gc color.ui auto
  88. $_gc status.relativePaths false
  89. $_gc status.showUntrackedFiles normal
  90. $_gc log.date iso
  91. command -v xz >/dev/null && \
  92. $_gc tar.txz.command "xz -c"
  93. $_gc push.default current
  94. $_gc alias.graph "log --graph --date-order -C -M --pretty=tformat:\"%C(green)%h%C(reset) %C(white)%ad%C(reset) %C(red)%an%C(reset)%C(yellow)%d%C(reset) %C(white bold)%s%C(reset)\" --all --date=iso -n 499"
  95. $_gc alias.st "status -s -b"
  96. $_gc alias.b "branch"
  97. $_gc alias.sb "show-branch"
  98. $_gc alias.ci "commit --verbose"
  99. $_gc alias.co "checkout"
  100. $_gc alias.cim "commit --verbose -m"
  101. $_gc alias.di "diff --color"
  102. $_gc alias.me "merge --no-ff --stat --verbose"
  103. $_gc alias.gr "grep -n"
  104. $_gc alias.ls "ls-files"
  105. # $_gc alias.ls "ls-files -v --full-name"
  106. # $_gc alias.ls "status -u -s ."
  107. $_gc alias.sl "!sl"
  108. # $_gc alias.my-ls "ls-files | xargs ls"
  109. # $_gc alias.ll "!git ls-files | xargs ls -l -CFG --color=auto --time-style=long-iso"
  110. $_gc alias.addi "add -i"
  111. $_gc alias.clean-p "!test -z \"\$(git status -s -uno)\""
  112. # alias open-branch and close-branch, which will be useful for topic branch
  113. # workflow
  114. _git_open_branch="checkout -b"
  115. _git_close_branch="!sh -cx 'git stash && \
  116. git checkout master && git merge --no-ff --stat --verbose -'"
  117. $_gc alias.open-branch "$_git_open_branch"
  118. $_gc alias.close-branch "$_git_close_branch"
  119. $_gc alias.o "$_git_open_branch"
  120. $_gc alias.c "$_git_close_branch"
  121. $_gc alias.todo "grep -E -i 'todo:|note:|fixme:'"
  122. #$_gc alias.wc "!git ls-files -z | xargs -0 wc"
  123. # $_gc push.default "simple"
  124. if $iswindows; then
  125. $_gc core.fileMode false
  126. fi
  127. }
  128. #############################
  129. # gen_tmux_conf_local
  130. setup_tmux(){
  131. tmux_conf_local="$HOME/.tmux.conf.local"
  132. case "`hostname`" in
  133. arch-aspireone)
  134. tmux_bg_color=yellow
  135. tmux_fg_color=black
  136. ;;
  137. arch-mba)
  138. tmux_bg_color=cyan
  139. tmux_fg_color=black
  140. ;;
  141. newkiwi)
  142. tmux_bg_color=magenta
  143. tmux_fg_color=white
  144. ;;
  145. freebsd-vb-win7-opti)
  146. tmux_bg_color=red
  147. tmux_fg_color=white
  148. ;;
  149. *)
  150. tmux_bg_color=green
  151. tmux_fg_color=black
  152. ;;
  153. esac
  154. cat <<__EOC__ >"$tmux_conf_local"
  155. # $tmux_conf_local
  156. # Automatically generated by $0
  157. set -g status-right "${USER}@$(hostname) | #(tmux -V) "
  158. set -g status-bg $tmux_bg_color
  159. set -g status-fg $tmux_fg_color
  160. set -g mode-bg $tmux_bg_color
  161. set -g mode-fg $tmux_fg_color
  162. set -g pane-active-border-fg $tmux_bg_color
  163. __EOC__
  164. }
  165. ##############################
  166. # install_scripts
  167. _fetch_script(){
  168. # _fetch_script <url> <binname>
  169. url="$1"
  170. name="$2"
  171. dst="$HOME/.local/bin/$name"
  172. command -v "$name" >/dev/null && return 0
  173. if _download "$url" "$dst"
  174. then
  175. chmod u+x "$dst"
  176. else
  177. test -f "$dst" && rm -- "$dst"
  178. fi
  179. }
  180. setup_scripts(){
  181. _fetch_script \
  182. https://gist.github.com/10sr/6852317/raw/colortable16.sh colortable16.sh
  183. _fetch_script \
  184. https://gist.github.com/10sr/6852331/raw/256colors2.pl 256colors2.pl
  185. }
  186. ################################
  187. # darwin
  188. __darwin_set_defaults(){
  189. $isdarwin || return 0
  190. # http://appdrill.net/60641/mac-boot-mute.html
  191. #sudo nvram SystemAudioVolume=%80
  192. # add quit entry in menu
  193. defaults write com.apple.finder QuitMenuItem -bool YES
  194. # show full path on titlebar
  195. defaults write com.apple.finder _FXShowPosixPathInTitle -bool YES
  196. # do not show desktop icons
  197. defaults write com.apple.finder CreateDesktop -boolean false
  198. killall Finder
  199. # disable dashboard
  200. #defaults write com.apple.dashboard mcx-disabled -bool YES
  201. }
  202. __darwin_start_daemon(){
  203. $isdarwin || return 0
  204. test "`launchctl getenv LC_ALL`" = C || sudo launchctl setenv LC_ALL C
  205. if ! (launchctl list | grep com.apple.locate) >/dev/null
  206. then
  207. sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
  208. fi
  209. }
  210. setup_darwin(){
  211. __darwin_set_defaults
  212. __darwin_start_daemon
  213. }
  214. ##########################
  215. # setup windows directories
  216. setup_windirs(){
  217. $iswindows || return 0
  218. if $iscygwin
  219. then
  220. #__winhome="/cygdrive/c/Users/`whoami`"
  221. __winhome=`cygpath -H`/`whoami`
  222. fi
  223. if test -n "$__winhome" -a -d "$__winhome" -a '!' -e "$HOME/.winhome"
  224. then
  225. ln -s "$__winhome" "$HOME/.winhome"
  226. fi
  227. }
  228. #########################
  229. # mkdirs
  230. setup_dirs(){
  231. mkdir -p "$__homelocal"
  232. mkdir -p "$__homelocal/bin"
  233. mkdir -p "$__homevar"
  234. }
  235. #########################
  236. # main
  237. main(){
  238. gen_common
  239. . "$__shrc_common"
  240. if test -z "$1"
  241. then
  242. echo "usage: ./setup.sh <setups> ..."
  243. echo "setups: all $__setups"
  244. exit 1
  245. fi
  246. while test -n "$1"
  247. do
  248. if test "$1" = all
  249. then
  250. for c in $__setups
  251. do
  252. set -x
  253. setup_$c
  254. set +x
  255. done
  256. fi
  257. for c in $__setups
  258. do
  259. if test "$1" = "$c"
  260. then
  261. set -x
  262. setup_$c
  263. set +x
  264. fi
  265. done
  266. shift
  267. done
  268. }
  269. main "$@"