mirror of
				https://github.com/ItsDrike/dotfiles.git
				synced 2025-10-31 16:06:36 +00:00 
			
		
		
		
	OOP Structure
This commit is contained in:
		
							parent
							
								
									8fe65a8ea0
								
							
						
					
					
						commit
						68a58ca9ca
					
				
					 1 changed files with 9 additions and 176 deletions
				
			
		|  | @ -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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue