1
0

setup.py 1.5 KB

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