-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathlinkfiles.py
executable file
·70 lines (66 loc) · 2.43 KB
/
linkfiles.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#!/usr/bin/env /usr/bin/python3
import os
import sys
import shutil
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-r", "--root", dest="root", action="store_true", default=False,
help="Do root")
(options, args) = parser.parse_args()
repopath = os.path.abspath(os.path.dirname(sys.argv[0]))
fullpaths = []
linkfolders = ['.config/awesome', '.urxvt', '.config/i3']
copydirs = ['etc/udev/rules.d', 'etc/systemd/system']
target = os.environ['HOME']
if options.root:
if os.getuid() != 0:
print("Use sudo not root")
sys.exit(1)
else:
fullpaths.append(os.path.join(repopath, 'osconfig'))
overlay = os.path.join(repopath, 'overlay', 'osconfig')
if os.path.exists(overlay):
fullpaths.append(os.path.join(repopath, 'overlay', 'osconfig'))
target = "/"
else:
fullpaths.append(os.path.join(repopath, 'homeconfig'))
overlay = os.path.join(repopath, 'overlay', 'homeconfig')
if os.path.exists(overlay):
fullpaths.append(overlay)
#do folders defined in linkfolders
#cleanuppath
def cleanuppath(targetfolder):
if os.path.islink(targetfolder):
os.remove(targetfolder)
elif os.path.exists(targetfolder):
os.remove(targetfolder)
#createParentFolder
def createRecusiveFolder(folder):
if not os.path.isdir(folder):
os.makedirs(folder)
def createParentFolder(targetfolder):
parenttarget = os.path.abspath(os.path.join(targetfolder, '..'))
createRecusiveFolder(parenttarget)
for mypath in fullpaths:
striplen = len(mypath) + 1
for curdir, dirs, files in os.walk(mypath):
#do normal files in root
relativedir = curdir[striplen:]
targetdir = os.path.join(target, relativedir)
if relativedir not in linkfolders:
print('Creating links files for folder', relativedir)
createRecusiveFolder(targetdir)
for file_ in files:
targetfile = os.path.join(targetdir, file_)
sourcefile = os.path.join(curdir, file_)
cleanuppath(targetfile)
if relativedir in copydirs:
shutil.copy(sourcefile, targetfile)
else:
os.symlink(sourcefile, targetfile)
else:
cleanuppath(targetdir)
createParentFolder(targetdir)
os.symlink(curdir, targetdir)
for dir_ in dirs[::-1]:
dirs.remove(dir_)