mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2025-04-28 05:02:26 +00:00
OOP: Dotfile Creation
This commit is contained in:
parent
bab2696bac
commit
c38e4b043f
3 changed files with 60 additions and 8 deletions
|
@ -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()
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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__)))
|
||||||
|
|
Loading…
Add table
Reference in a new issue