OOP: Dotfile Creation

This commit is contained in:
koumakpet 2020-04-04 01:40:27 +02:00
parent bab2696bac
commit c38e4b043f
3 changed files with 60 additions and 8 deletions

View file

@ -1,4 +1,4 @@
from util import Path, Print, Install from util import Path, Print, Install, Input
from datetime import datetime from datetime import datetime
@ -11,6 +11,7 @@ class InstallationChecks:
@staticmethod @staticmethod
def get_installation_path(standard_paths): def get_installation_path(standard_paths):
dir_exists, path = Path.check_dir_exists(standard_paths) dir_exists, path = Path.check_dir_exists(standard_paths)
if dir_exists:
path = path.replace('~', '$HOME') path = path.replace('~', '$HOME')
return dir_exists, path return dir_exists, path
@ -84,8 +85,36 @@ class Dotfiles:
self.dotfiles_location = Path.join(Path.WORKING_FLODER, 'files') self.dotfiles_location = Path.join(Path.WORKING_FLODER, 'files')
def start(self): def start(self):
Print.action('Installing dotfiles')
# Check for necessary packages
self.initial_checks() self.initial_checks()
# Check backup
if Input.yes_no(
'Do you wish to create backup of your current dotfiles?'):
self.make_backup()
else:
Print.warning(
'Proceeding without backup, you will loose your current dotfiles settings'
)
# Symlinks or Files
create_dotfiles = Input.multiple('Do you wish to create dotfiles?', [
'symlinks (dotfiles/ dir will be required)',
'files (dotfiles/ dir can be removed afterwards)'
])
if create_dotfiles == 'symlinks':
self.use_symlinks = True
elif create_dotfiles == 'files':
self.use_symlinks = False
else:
Print.err('Symlink creation aborted (canceled by user.)')
return False
self.create_dotfiles()
def initial_checks(self): def initial_checks(self):
if not InstallationChecks.check_zsh(): if not InstallationChecks.check_zsh():
InstallationChecks.installation_error('zsh') InstallationChecks.installation_error('zsh')
@ -124,6 +153,20 @@ class Dotfiles:
def personalized_changes(self, file): def personalized_changes(self, file):
pass pass
def create_dotfiles(self):
file_list = Path.get_all_files(self.dotfiles_location)
for target_file in file_list: # Loop through every file in dotfiles
self.personalized_changes(target_file)
# Remove dotfiles_location from file path
file_blank = target_file.replace(f'{self.dotfiles_location}/', '')
destination = Path.join(Path.get_home(), file_blank)
if self.use_symlinks:
Path.create_symlink(target_file, destination)
else:
Path.copy(target_file, destination)
if __name__ == "__main__": if __name__ == "__main__":
dotfiles = Dotfiles() dotfiles = Dotfiles()

View file

@ -1,5 +1,6 @@
#!/bin/python3 #!/bin/python3
from util import Print from util import Print
import re
def yes_no(question): def yes_no(question):
@ -30,7 +31,7 @@ def multiple(question, options):
options {list} -- list of possible options (strings) options {list} -- list of possible options (strings)
Returns: Returns:
str -- one of options str -- one of options (without content in brackets in the end)
''' '''
def get_input_range(max): def get_input_range(max):
while True: while True:
@ -55,7 +56,14 @@ def multiple(question, options):
answer = get_input_range(len(options)) answer = get_input_range(len(options))
if answer != 0: if answer != 0:
return options[answer - 1] result = options[answer - 1]
result = re.sub(r'\(.*\)$', '',
result) # remove bracket content in the end
if result[
-1] == ' ': # remove remaining space (might happen after removing brackets)
result = result[:-1]
return result
else: else:
return False return False

View file

@ -4,8 +4,6 @@ import pathlib
from util import Command, Print from util import Command, Print
WORKING_FLODER = os.path.dirname(os.path.realpath(__file__))
def check_dir_exists(paths): def check_dir_exists(paths):
'''Check for directory/ies existence '''Check for directory/ies existence
@ -111,7 +109,7 @@ def ensure_dirs(path, file_end=False, absolute_path=True):
if check_file_exists(path) or file_end: if check_file_exists(path) or file_end:
path = get_parent(path) path = get_parent(path)
if not check_dir_exists(path): if not check_dir_exists(path)[0]:
Command.execute(f'mkdir -p {path}') Command.execute(f'mkdir -p {path}')
Print.comment(f'Creating directory {path}') Print.comment(f'Creating directory {path}')
@ -156,4 +154,7 @@ def join(*paths):
Returns: Returns:
str -- Joined paths str -- Joined paths
''' '''
return os.path.join(paths) return os.path.join(*paths)
WORKING_FLODER = get_parent(os.path.dirname(os.path.realpath(__file__)))