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
@ -11,7 +11,8 @@ class InstallationChecks:
@staticmethod
def get_installation_path(standard_paths):
dir_exists, path = Path.check_dir_exists(standard_paths)
path = path.replace('~', '$HOME')
if dir_exists:
path = path.replace('~', '$HOME')
return dir_exists, path
@ -84,8 +85,36 @@ class Dotfiles:
self.dotfiles_location = Path.join(Path.WORKING_FLODER, 'files')
def start(self):
Print.action('Installing dotfiles')
# Check for necessary packages
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):
if not InstallationChecks.check_zsh():
InstallationChecks.installation_error('zsh')
@ -124,6 +153,20 @@ class Dotfiles:
def personalized_changes(self, file):
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__":
dotfiles = Dotfiles()

View file

@ -1,5 +1,6 @@
#!/bin/python3
from util import Print
import re
def yes_no(question):
@ -30,7 +31,7 @@ def multiple(question, options):
options {list} -- list of possible options (strings)
Returns:
str -- one of options
str -- one of options (without content in brackets in the end)
'''
def get_input_range(max):
while True:
@ -55,7 +56,14 @@ def multiple(question, options):
answer = get_input_range(len(options))
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:
return False

View file

@ -4,8 +4,6 @@ import pathlib
from util import Command, Print
WORKING_FLODER = os.path.dirname(os.path.realpath(__file__))
def check_dir_exists(paths):
'''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:
path = get_parent(path)
if not check_dir_exists(path):
if not check_dir_exists(path)[0]:
Command.execute(f'mkdir -p {path}')
Print.comment(f'Creating directory {path}')
@ -156,4 +154,7 @@ def join(*paths):
Returns:
str -- Joined paths
'''
return os.path.join(paths)
return os.path.join(*paths)
WORKING_FLODER = get_parent(os.path.dirname(os.path.realpath(__file__)))