setup.py 1.7 KB

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