freedombone-app-vim 9.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. #!/bin/bash
  2. #
  3. # .---. . .
  4. # | | |
  5. # |--- .--. .-. .-. .-.| .-. .--.--. |.-. .-. .--. .-.
  6. # | | (.-' (.-' ( | ( )| | | | )( )| | (.-'
  7. # ' ' --' --' -' - -' ' ' -' -' -' ' - --'
  8. #
  9. # Freedom in the Cloud
  10. #
  11. # Vim editor
  12. #
  13. # License
  14. # =======
  15. #
  16. # Copyright (C) 2016 Bob Mottram <bob@freedombone.net>
  17. #
  18. # This program is free software: you can redistribute it and/or modify
  19. # it under the terms of the GNU Affero General Public License as published by
  20. # the Free Software Foundation, either version 3 of the License, or
  21. # (at your option) any later version.
  22. #
  23. # This program is distributed in the hope that it will be useful,
  24. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  25. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  26. # GNU Affero General Public License for more details.
  27. #
  28. # You should have received a copy of the GNU Affero General Public License
  29. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  30. VARIANTS='full-vim'
  31. IN_DEFAULT_INSTALL=0
  32. SHOW_ON_ABOUT=0
  33. VIM_TEMP_DIR='.vimtemp'
  34. VIM_MUTT_EDITOR='vim \"+set nonumber\" \"+set insertmode\" \"+set spell\" +/^$/ +9'
  35. vim_variables=(MY_USERNAME
  36. VIM_MUTT_EDITOR)
  37. function logging_on_vim {
  38. echo -n ''
  39. }
  40. function logging_off_vim {
  41. echo -n ''
  42. }
  43. function reconfigure_vim {
  44. echo -n ''
  45. }
  46. function upgrade_vim {
  47. echo -n ''
  48. }
  49. function backup_local_vim {
  50. for d in /home/*/ ; do
  51. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  52. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  53. echo $"Backing up Vim config for $USERNAME"
  54. # create a temporary directory
  55. if [ ! -d /home/$USERNAME/$VIM_TEMP_DIR ]; then
  56. mkdir /home/$USERNAME/$VIM_TEMP_DIR
  57. fi
  58. # copy config files into the directory
  59. if [ -f /home/$USERNAME/.vimrc ]; then
  60. cp /home/$USERNAME/.vimrc /home/$USERNAME/$VIM_TEMP_DIR
  61. chown -R $USERNAME:$USERNAME /home/$USERNAME/$VIM_TEMP_DIR
  62. fi
  63. if [ -f /home/$USERNAME/.viminfo ]; then
  64. cp /home/$USERNAME/.viminfo /home/$USERNAME/$VIM_TEMP_DIR
  65. chown -R $USERNAME:$USERNAME /home/$USERNAME/$VIM_TEMP_DIR
  66. fi
  67. # backup the directory
  68. function_check backup_directory_to_usb
  69. backup_directory_to_usb /home/$USERNAME/$VIM_TEMP_DIR vim/$USERNAME
  70. # remove temporary directory
  71. if [ -d /home/$USERNAME/$VIM_TEMP_DIR ]; then
  72. rm -rf /home/$USERNAME/$VIM_TEMP_DIR
  73. fi
  74. fi
  75. done
  76. }
  77. function restore_local_vim {
  78. temp_restore_dir=/root/tempvim
  79. if [ -d $USB_MOUNT/backup/vim ]; then
  80. for d in $USB_MOUNT/backup/vim/*/ ; do
  81. USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
  82. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  83. if [ ! -d /home/$USERNAME ]; then
  84. ${PROJECT_NAME}-adduser $USERNAME
  85. fi
  86. echo $"Restoring Vim config for $USERNAME"
  87. function_check restore_directory_from_usb
  88. restore_directory_from_usb $temp_restore_dir vim/$USERNAME
  89. if [ -d $temp_restore_dir/home/$USERNAME/$VIM_TEMP_DIR ]; then
  90. cp -r $temp_restore_dir/home/$USERNAME/$VIM_TEMP_DIR /home/$USERNAME/
  91. else
  92. if [ ! -d /home/$USERNAME/$VIM_TEMP_DIR ]; then
  93. mkdir /home/$USERNAME/$VIM_TEMP_DIR
  94. fi
  95. cp -r $temp_restore_dir/* /home/$USERNAME/$VIM_TEMP_DIR/
  96. fi
  97. if [ ! "$?" = "0" ]; then
  98. rm -rf $temp_restore_dir
  99. function_check set_user_permissions
  100. set_user_permissions
  101. function_check backup_unmount_drive
  102. backup_unmount_drive
  103. exit 664
  104. fi
  105. cp /home/$USERNAME/$VIM_TEMP_DIR/* /home/$USERNAME
  106. if [ -f /home/$USERNAME/.viminfo ]; then
  107. chown $USERNAME:$USERNAME /home/$USERNAME/.viminfo
  108. fi
  109. if [ -f /home/$USERNAME/.vimrc ]; then
  110. chown $USERNAME:$USERNAME /home/$USERNAME/.vimrc
  111. fi
  112. rm -rf /home/$USERNAME/$VIM_TEMP_DIR
  113. rm -rf $temp_restore_dir
  114. fi
  115. done
  116. fi
  117. }
  118. function backup_remote_vim {
  119. for d in /home/*/ ; do
  120. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  121. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  122. echo $"Backing up Vim config for $USERNAME"
  123. # create a temporary directory
  124. if [ ! -d /home/$USERNAME/$VIM_TEMP_DIR ]; then
  125. mkdir /home/$USERNAME/$VIM_TEMP_DIR
  126. fi
  127. # copy config files into the directory
  128. if [ -f /home/$USERNAME/.vimrc ]; then
  129. cp /home/$USERNAME/.vimrc /home/$USERNAME/$VIM_TEMP_DIR
  130. chown -R $USERNAME:$USERNAME /home/$USERNAME/$VIM_TEMP_DIR
  131. fi
  132. if [ -f /home/$USERNAME/.viminfo ]; then
  133. cp /home/$USERNAME/.viminfo /home/$USERNAME/$VIM_TEMP_DIR
  134. chown -R $USERNAME:$USERNAME /home/$USERNAME/$VIM_TEMP_DIR
  135. fi
  136. # backup the directory
  137. function_check backup_directory_to_friend
  138. backup_directory_to_friend /home/$USERNAME/$VIM_TEMP_DIR vim/$USERNAME
  139. # remove temporary directory
  140. if [ -d /home/$USERNAME/$VIM_TEMP_DIR ]; then
  141. rm -rf /home/$USERNAME/$VIM_TEMP_DIR
  142. fi
  143. fi
  144. done
  145. }
  146. function restore_remote_vim {
  147. temp_restore_dir=/root/tempvim
  148. if [ -d $USB_MOUNT/backup/vim ]; then
  149. for d in $USB_MOUNT/backup/vim/*/ ; do
  150. USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
  151. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  152. if [ ! -d /home/$USERNAME ]; then
  153. ${PROJECT_NAME}-adduser $USERNAME
  154. fi
  155. echo $"Restoring Vim config for $USERNAME"
  156. function_check restore_directory_from_friend
  157. restore_directory_from_friend $temp_restore_dir vim/$USERNAME
  158. if [ -d $temp_restore_dir/home/$USERNAME/$VIM_TEMP_DIR ]; then
  159. cp -r $temp_restore_dir/home/$USERNAME/$VIM_TEMP_DIR /home/$USERNAME/
  160. else
  161. if [ ! -d /home/$USERNAME/$VIM_TEMP_DIR ]; then
  162. mkdir /home/$USERNAME/$VIM_TEMP_DIR
  163. fi
  164. cp -r $temp_restore_dir/* /home/$USERNAME/$VIM_TEMP_DIR/
  165. fi
  166. if [ ! "$?" = "0" ]; then
  167. rm -rf $temp_restore_dir
  168. function_check set_user_permissions
  169. set_user_permissions
  170. function_check backup_unmount_drive
  171. backup_unmount_drive
  172. exit 664
  173. fi
  174. cp /home/$USERNAME/$VIM_TEMP_DIR/* /home/$USERNAME
  175. if [ -f /home/$USERNAME/.viminfo ]; then
  176. chown $USERNAME:$USERNAME /home/$USERNAME/.viminfo
  177. fi
  178. if [ -f /home/$USERNAME/.vimrc ]; then
  179. chown $USERNAME:$USERNAME /home/$USERNAME/.vimrc
  180. fi
  181. rm -rf /home/$USERNAME/$VIM_TEMP_DIR
  182. rm -rf $temp_restore_dir
  183. fi
  184. done
  185. fi
  186. }
  187. function remove_vim {
  188. # Don't remove vim because vim-common is needed for showing ssh host keys
  189. # This may change with Debian Stretch
  190. # apt-get -yq remove --purge vim
  191. update-alternatives --set editor /usr/bin/nano
  192. sed -i '/install_vim/d' $COMPLETION_FILE
  193. # remove Vim as the mutt email editor
  194. if [ -f /etc/Muttrc ]; then
  195. if grep -q "set editor=" /etc/Muttrc; then
  196. sed -i '/set editor=/d' /etc/Muttrc
  197. fi
  198. for d in /home/*/ ; do
  199. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  200. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  201. if [ -f /home/$USERNAME/.muttrc ]; then
  202. if grep -q "set editor=" /home/$USERNAME/.muttrc; then
  203. sed -i '/set editor=/d' /home/$USERNAME/.muttrc
  204. fi
  205. fi
  206. fi
  207. done
  208. fi
  209. }
  210. function install_vim {
  211. apt-get -yq install vim
  212. update-alternatives --set editor /usr/bin/vim
  213. # add a mutt entry to use Vim to compose emails
  214. if [ -f /etc/Muttrc ]; then
  215. if ! grep -q "set editor=" /etc/Muttrc; then
  216. echo "set editor=\"$VIM_MUTT_EDITOR\"" >> /etc/Muttrc
  217. else
  218. sed -i "s|set editor=.*|set editor=\"$VIM_MUTT_EDITOR\"|g" /etc/Muttrc
  219. fi
  220. for d in /home/*/ ; do
  221. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  222. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  223. if [ -f /home/$USERNAME/.muttrc ]; then
  224. if ! grep -q "set editor=" /home/$USERNAME/.muttrc; then
  225. echo "set editor=\"$VIM_MUTT_EDITOR\"" >> /home/$USERNAME/.muttrc
  226. else
  227. sed -i "s|set editor=.*|set editor=\"$VIM_MUTT_EDITOR\"|g" /home/$USERNAME/.muttrc
  228. fi
  229. fi
  230. fi
  231. done
  232. fi
  233. APP_INSTALLED=1
  234. }
  235. function install_interactive_vim {
  236. install_vim
  237. }
  238. # NOTE: deliberately no exit 0