freedombone-app-vim 9.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  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-2018 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. # shellcheck disable=SC2181
  98. if [ ! "$?" = "0" ]; then
  99. rm -rf $temp_restore_dir
  100. function_check set_user_permissions
  101. set_user_permissions
  102. function_check backup_unmount_drive
  103. backup_unmount_drive
  104. exit 664
  105. fi
  106. cp "/home/$USERNAME/$VIM_TEMP_DIR/"* "/home/$USERNAME"
  107. if [ -f "/home/$USERNAME/.viminfo" ]; then
  108. chown "$USERNAME":"$USERNAME" "/home/$USERNAME/.viminfo"
  109. fi
  110. if [ -f "/home/$USERNAME/.vimrc" ]; then
  111. chown "$USERNAME":"$USERNAME" "/home/$USERNAME/.vimrc"
  112. fi
  113. rm -rf "/home/${USERNAME:?}/$VIM_TEMP_DIR"
  114. rm -rf $temp_restore_dir
  115. fi
  116. done
  117. fi
  118. }
  119. function backup_remote_vim {
  120. for d in /home/*/ ; do
  121. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  122. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  123. echo $"Backing up Vim config for $USERNAME"
  124. # create a temporary directory
  125. if [ ! -d "/home/$USERNAME/$VIM_TEMP_DIR" ]; then
  126. mkdir "/home/$USERNAME/$VIM_TEMP_DIR"
  127. fi
  128. # copy config files into the directory
  129. if [ -f "/home/$USERNAME/.vimrc" ]; then
  130. cp "/home/$USERNAME/.vimrc" "/home/$USERNAME/$VIM_TEMP_DIR"
  131. chown -R "$USERNAME":"$USERNAME" "/home/$USERNAME/$VIM_TEMP_DIR"
  132. fi
  133. if [ -f "/home/$USERNAME/.viminfo" ]; then
  134. cp "/home/$USERNAME/.viminfo" "/home/$USERNAME/$VIM_TEMP_DIR"
  135. chown -R "$USERNAME":"$USERNAME" "/home/$USERNAME/$VIM_TEMP_DIR"
  136. fi
  137. # backup the directory
  138. function_check backup_directory_to_friend
  139. backup_directory_to_friend "/home/$USERNAME/$VIM_TEMP_DIR" "vim/$USERNAME"
  140. # remove temporary directory
  141. if [ -d "/home/$USERNAME/$VIM_TEMP_DIR" ]; then
  142. rm -rf "/home/${USERNAME:?}/$VIM_TEMP_DIR"
  143. fi
  144. fi
  145. done
  146. }
  147. function restore_remote_vim {
  148. temp_restore_dir=/root/tempvim
  149. if [ -d "$USB_MOUNT/backup/vim" ]; then
  150. for d in $USB_MOUNT/backup/vim/*/ ; do
  151. USERNAME=$(echo "$d" | awk -F '/' '{print $6}')
  152. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  153. if [ ! -d "/home/$USERNAME" ]; then
  154. "${PROJECT_NAME}-adduser" "$USERNAME"
  155. fi
  156. echo $"Restoring Vim config for $USERNAME"
  157. function_check restore_directory_from_friend
  158. restore_directory_from_friend "$temp_restore_dir vim/$USERNAME"
  159. if [ -d "$temp_restore_dir/home/$USERNAME/$VIM_TEMP_DIR" ]; then
  160. cp -r "$temp_restore_dir/home/$USERNAME/$VIM_TEMP_DIR" "/home/$USERNAME/"
  161. else
  162. if [ ! -d "/home/$USERNAME/$VIM_TEMP_DIR" ]; then
  163. mkdir "/home/$USERNAME/$VIM_TEMP_DIR"
  164. fi
  165. cp -r "$temp_restore_dir/"* "/home/$USERNAME/$VIM_TEMP_DIR/"
  166. fi
  167. # shellcheck disable=SC2181
  168. if [ ! "$?" = "0" ]; then
  169. rm -rf $temp_restore_dir
  170. function_check set_user_permissions
  171. set_user_permissions
  172. function_check backup_unmount_drive
  173. backup_unmount_drive
  174. exit 664
  175. fi
  176. cp "/home/$USERNAME/$VIM_TEMP_DIR/"* "/home/$USERNAME"
  177. if [ -f "/home/$USERNAME/.viminfo" ]; then
  178. chown "$USERNAME":"$USERNAME" "/home/$USERNAME/.viminfo"
  179. fi
  180. if [ -f "/home/$USERNAME/.vimrc" ]; then
  181. chown "$USERNAME":"$USERNAME" "/home/$USERNAME/.vimrc"
  182. fi
  183. rm -rf "/home/${USERNAME:?}/$VIM_TEMP_DIR"
  184. rm -rf $temp_restore_dir
  185. fi
  186. done
  187. fi
  188. }
  189. function remove_vim {
  190. # Don't remove vim because vim-common is needed for showing ssh host keys
  191. # This may change with Debian Stretch
  192. # apt-get -yq remove --purge vim
  193. update-alternatives --set editor /usr/bin/nano
  194. sed -i '/install_vim/d' "$COMPLETION_FILE"
  195. # remove Vim as the mutt email editor
  196. if [ -f /etc/Muttrc ]; then
  197. if grep -q "set editor=" /etc/Muttrc; then
  198. sed -i '/set editor=/d' /etc/Muttrc
  199. fi
  200. for d in /home/*/ ; do
  201. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  202. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  203. if [ -f "/home/$USERNAME/.muttrc" ]; then
  204. if grep -q "set editor=" "/home/$USERNAME/.muttrc"; then
  205. sed -i '/set editor=/d' "/home/$USERNAME/.muttrc"
  206. fi
  207. fi
  208. fi
  209. done
  210. fi
  211. }
  212. function install_vim {
  213. apt-get -yq install vim
  214. update-alternatives --set editor /usr/bin/vim.tiny
  215. # add a mutt entry to use Vim to compose emails
  216. if [ -f /etc/Muttrc ]; then
  217. if ! grep -q "set editor=" /etc/Muttrc; then
  218. echo "set editor=\"$VIM_MUTT_EDITOR\"" >> /etc/Muttrc
  219. else
  220. sed -i "s|set editor=.*|set editor=\"$VIM_MUTT_EDITOR\"|g" /etc/Muttrc
  221. fi
  222. for d in /home/*/ ; do
  223. USERNAME=$(echo "$d" | awk -F '/' '{print $3}')
  224. if [[ $(is_valid_user "$USERNAME") == "1" ]]; then
  225. if [ -f "/home/$USERNAME/.muttrc" ]; then
  226. if ! grep -q "set editor=" "/home/$USERNAME/.muttrc"; then
  227. echo "set editor=\"$VIM_MUTT_EDITOR\"" >> "/home/$USERNAME/.muttrc"
  228. else
  229. sed -i "s|set editor=.*|set editor=\"$VIM_MUTT_EDITOR\"|g" "/home/$USERNAME/.muttrc"
  230. fi
  231. fi
  232. fi
  233. done
  234. fi
  235. APP_INSTALLED=1
  236. }
  237. function install_interactive_vim {
  238. install_vim
  239. }
  240. # NOTE: deliberately no exit 0