mirror of
https://github.com/ItsDrike/dotfiles.git
synced 2025-04-28 05:02:26 +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
Reference in a new issue