-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall
executable file
·82 lines (59 loc) · 2.01 KB
/
install
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
71
72
73
74
75
76
77
78
79
80
81
82
#!/usr/bin/env python3
'''
PROGRAM: Configuration Installer
DESCRIPTION: Installs dot files when creating a fresh Linux install.
AUTHOR: John Higgins
'''
import sys
import os
from os import path
import subprocess as sp
DOT_DIR='dot/'
def main():
logger = Logger()
logger.log(Logger.INFO_LEVEL, 'STARTING INSTALLATION...')
force = False
if len(sys.argv) > 1:
force = sys.argv[1] == '--force' or sys.argv[1] == '-f'
home_dir = os.getenv('HOME')
cwd = os.getcwd()
dots = path.join(cwd, DOT_DIR)
dot_paths = [path.join(dots, f) for f in os.listdir(dots)]
dot_dest = [path.join(home_dir, path.basename(d)) for d in os.listdir(dots)]
for i in range(0, len(dot_dest)):
link(dot_paths[i], dot_dest[i], force)
logger.log(Logger.INFO_LEVEL, 'COMPLETED INSTALLATION!')
# create a symlink.
def link(source, destination, force=False):
logger = Logger()
proc = None
if force:
proc = sp.run(args=['ln', '-sf', source, destination], stdout=sp.PIPE, stderr=sp.PIPE)
else:
proc = sp.run(args=['ln', '-s', source, destination], stdout=sp.PIPE, stderr=sp.PIPE)
if proc.returncode == 0:
logger.log(Logger.INFO_LEVEL, 'LINKED \'%s\' → \'%s\'' %(source, destination))
else:
logger.log(Logger.ERROR_LEVEL, 'FAILED TO LINK \'%s\' → \'%s\'' %(source, destination))
class Logger:
INFO_LEVEL = 0
WARN_LEVEL = 1
ERROR_LEVEL = 2
def __init__(self):
pass
def log(self, level, msg):
print('%s ' %(self.level_ansi(level)), end='')
print(msg)
self.reset_color()
def reset_color(self):
return '\033[0m'
# Configure color based on logging level.
def level_ansi(self, level):
if level == Logger.INFO_LEVEL:
return f'[\033[32mINFO{self.reset_color()}]'
elif level == Logger.WARN_LEVEL:
return f'[\033[33mWARN{self.reset_color()}]'
else:
return f'[\033[31mERROR{self.reset_color()}]'
if __name__ == '__main__':
main()