From 68a58ca9ca447cb3d3f2af06b7f963dd8aba2db9 Mon Sep 17 00:00:00 2001 From: koumakpet Date: Fri, 3 Apr 2020 22:36:09 +0200 Subject: [PATCH] OOP Structure --- dotfiles_install.py | 185 +++----------------------------------------- 1 file changed, 9 insertions(+), 176 deletions(-) diff --git a/dotfiles_install.py b/dotfiles_install.py index cb92ba5..4ae0340 100644 --- a/dotfiles_install.py +++ b/dotfiles_install.py @@ -1,179 +1,12 @@ -from util import Input, Print, Install, Path -import os -from datetime import datetime +class Dotfiles: + def __init__(self): + self.initial_checks() + def initial_checks(self): + pass -def make_backup(files_dir): - if Input.yes_no( - 'Do you wish to create a backup of current state of your dotfiles?' - ): - Print.action('Creating dotfiles backup') - backup_dir = str(datetime.now()).replace(' ', '--') - current_backup_dir = os.path.join(Path.get_parent(__file__), 'Backups', - backup_dir) - Path.ensure_dirs(current_backup_dir) - for file in Path.get_all_files(files_dir): - from_pos = os.path.join(Path.get_home(), - file.replace(f'{files_dir}/', '')) - to_pos = os.path.join(current_backup_dir, - file.replace(f'{files_dir}/', '')) - if Path.check_file_exists(from_pos): - Path.copy(from_pos, to_pos) + def make_backup(self): + pass - Print.action('Backup complete') - return True - else: - Print.warning('Proceeding without backup') - return False - - -def check_installation(): - if Install.check_not_installed('zsh'): - if not Install.package( - 'zsh', 'default + (This is required shell for dotfiles)'): - Print.err('Dotfiles installation cancelled - zsh not installed') - return False - - global oh_my_zsh_path, zsh_highlight_path - - zsh_highlight_path = None - if Path.check_file_exists( - '/usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' - ): - zsh_highlight_path = '/usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' - - oh_my_zsh_path = None - if Path.check_dir_exists('~/.oh-my-zsh'): - oh_my_zsh_path = '$HOME/.oh-my-zsh' - elif Path.check_dir_exists('~/oh-my-zsh'): - oh_my_zsh_path = '$HOME/oh-my-zsh' - elif Path.check_dir_exists('~/ohmyzsh'): - oh_my_zsh_path = '$HOME/ohmyzsh' - elif Path.check_dir_exists('~/.config/oh-my-zsh'): - oh_my_zsh_path = '$HOME/.config/oh-my-zsh' - elif Path.check_dir_exists('/usr/share/oh-my-zsh'): - oh_my_zsh_path = '/usr/share/oh-my-zsh' - - if oh_my_zsh_path: - return True - else: - Print.err('oh-my-zsh is not installed, cannot proceed...') - # TODO: Option to install - return False - - -def personalized_changes(file): - if '.zshrc' in file: - global oh_my_zsh_path, zsh_highlight_path - filedata = None - with open(file, 'r') as f: - filedata = f.read() - filedata_old = filedata - - # Change path to oh-my-zsh - filedata = filedata.replace('"$HOME/.config/oh-my-zsh"', - f'"{oh_my_zsh_path}"') - - # Change path to zsh-color-highlight - if zsh_highlight_path is not None: - original_path = '/usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh' - filedata = filedata.replace(f'source {original_path}', - f'source {zsh_highlight_path}') - else: - if Install.package('zsh-syntax-highlighting', 'default'): - zsh_highlight_path = Input.question( - 'Please specify path to your zsh-syntax-highlighting plugin (blank=do not include)' - ) - if zsh_highlight_path != '': - filedata = filedata.replace( - f'source {original_path}', - f'source {zsh_highlight_path}') - else: - filedata = filedata.replace(f'source {original_path}', f'') - else: - filedata = filedata.replace(f'source {original_path}', f'') - - if filedata_old != filedata: - Print.commend('Changing oh-my-zsh location in .zshrc') - with open(file, 'w') as f: - f.write(filedata) - - if 'vimrc' in file: - if not Input.yes_no( - 'Do you wish to use .vimrc (If you choose yes, please install Vundle or you will get errors)' - ): - # TODO: Install vundle - return False - return True - - -def init(symlink): - # Get path to files/ floder (contains all dotfiles) - files_dir = os.path.join(Path.get_parent(__file__), 'files') - # Create optional backup - make_backup(files_dir) - files_list, dirs_list = Path.get_all_dirs_and_files(files_dir) - - # Create all dirs - for directory in dirs_list: - if Path.check_dir_exists(directory): - position = os.path.join(Path.get_home(), - directory.replace(f'{files_dir}/', '')) - Path.ensure_dirs(position) - - # Go through all files - for file in files_list: - # Make personalized changes to files - personalized_changes(file) - # Set symlink position ($HOME/filepath) - position = os.path.join(Path.get_home(), - file.replace(f'{files_dir}/', '')) - - if symlink: - # Make symlink - Path.create_symlink(file, position) - else: - Path.copy(file, position) - - -def main(): - Print.action('Installing dotfiles') - - if not check_installation(): - return False - - choice = Input.multiple('Do you wish to create dotfiles', [ - 'symlinks (dotfiles/ dir will be required)', - 'files (dotfiles/ dir can be removed afterwards)' - ]) - # Create symlinks - if choice == 'symlinks (dotfiles/ dir will be required)': - init(symlink=True) - - # Final prints - Print.action('Symlink installation complete') - Print.warning( - 'Do not delete this floder, all dotfile symlinks are linked to it') - Print.warning( - 'Deletion would cause errors on all your dotfiles managed by this program' - ) - Print.comment( - 'If you wish to remove this floder, please select files instead of symlinks for dotfile creation' - ) - - # Create files - elif choice == 'files (dotfiles/ dir can be removed afterwards)': - init(symlink=False) - - # Final prints - Print.action('Dotfiles successfully created') - Print.comment('This directory can now be removed') - - # Don't create dotfiles - else: - Print.cancel('Dotfiles installation cancelled') - return False - - -if __name__ == "__main__": - main() + def personalized_changes(self, file): + pass