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
|
class Dotfiles:
|
||||||
import os
|
def __init__(self):
|
||||||
from datetime import datetime
|
self.initial_checks()
|
||||||
|
|
||||||
|
def initial_checks(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def make_backup(files_dir):
|
def make_backup(self):
|
||||||
if Input.yes_no(
|
pass
|
||||||
'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)
|
|
||||||
|
|
||||||
Print.action('Backup complete')
|
def personalized_changes(self, file):
|
||||||
return True
|
pass
|
||||||
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()
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue