setup.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/usr/bin/env python3
  2. import errno
  3. import os
  4. import sys
  5. dirname = os.path.dirname(__file__)
  6. if dirname[len(os.path.commonprefix([os.path.abspath(__file__), dirname])):] != '.':
  7. print('This script must be run from the dotfiles directory.')
  8. sys.exit(1)
  9. script = os.path.basename(__file__)
  10. def link_file(target, name):
  11. try:
  12. os.symlink(target, name)
  13. print('\033[36;1m' + name + '\033[0m ->', target)
  14. except OSError as e:
  15. if e.errno != errno.EEXIST:
  16. raise
  17. try:
  18. if os.readlink(name) == target:
  19. print(name, 'is already linked')
  20. else:
  21. print(name, '\033[31;1mexists\033[0m (symlink)')
  22. except OSError as e:
  23. if e.errno == errno.EINVAL:
  24. print(name, '\033[31;1mexists\033[0m')
  25. else:
  26. raise
  27. for f in os.listdir('.'):
  28. if f in [script, '.git', '.gitignore']:
  29. continue
  30. name = '../.' + f
  31. target = 'dotfiles/' + f
  32. # ~/.vim is a special case since we symlink the whole directory
  33. # everywhere else, we create the directory and symlink the contents
  34. if f == 'vim' or not os.path.isdir(f):
  35. link_file(target, name)
  36. else:
  37. for dirpath, _, filenames in os.walk(f):
  38. try:
  39. dirname = '../.' + dirpath
  40. os.mkdir(dirname)
  41. print('Created \033[34;1m' + dirname + '\033[0m')
  42. except OSError as e:
  43. if e.errno == errno.EEXIST:
  44. print('No need to create', dirname)
  45. else:
  46. raise
  47. prefix = '../' * (dirpath.count('/') + 1)
  48. for f in filenames:
  49. link_file(prefix + 'dotfiles/' + dirpath + '/' + f, '../.' + dirpath + '/' + f)
  50. # config/nvim is skipped because we ignore dirs from os.walk
  51. link_file('../dotfiles/vim', '../.config/nvim')
  52. vim_swap = '../.vim_swap'
  53. if os.path.exists(vim_swap):
  54. print('No need to create', vim_swap)
  55. else:
  56. os.mkdir(vim_swap, 0o700)
  57. print('Created \033[34;1m' + vim_swap + '\033[0m')