diff --git a/dotman.py b/dotman.py index 3043812..77d5179 100755 --- a/dotman.py +++ b/dotman.py @@ -42,21 +42,6 @@ DL_FILES = [] DL_DIRS = [] -def get_nth_key(n: int, d: dict[str, str]): - c = 0 - for k in d.keys(): - if n == c: - return k - c += 1 - - -def read_file(path: str): - with open(path, 'r') as f: - content = f.readlines() - f.close() - return content - - def read_deploy_list(): """ Reads file from SETTINGS.F_DEPLOY to get list of directories and files to deploy @@ -86,45 +71,6 @@ def create_deploy_list(): f.close() -def rrem(text: str, char: str): - """ - Remove characters from right until character supplied with char - :param text: Where to remove characters from - :param char: Which character to stop removing at - :return: Returns text with all characters until specified character removed - """ - iterator = len(text) - 1 - buffer = '' - while text[iterator] != char: - buffer += text[iterator] - iterator -= 1 - return text.removesuffix(buffer[::-1]) - - -def proc(command, cwd=''): - if 'cp -av' in command: - r = run(command, shell=True) - else: - if cwd == '': - r = run(command, shell=True, capture_output=True, text=True) - else: - r = run(command, shell=True, capture_output=True, text=True, cwd=cwd) - return r.returncode, str(r.stdout) + str(r.stderr) - - -def print_settings(): - count = 1 - for key, value in SETTINGS.items(): - print(f'{count}. {key}:{value}') - count += 1 - - -def grab_dotfiles(): - os.mkdir(rrem(SETTINGS['DOTFILES_REPOSITORY'], '/')) - code, output = proc(f"git clone {SETTINGS['REMOTE_REPOSITORY']}", SETTINGS['DOTFILES_REPOSITORY']) - return code == 0, code - - def copy(source, dest, interactive=False): if interactive: run(shlex.split(f"cp -av {source} {dest}")) @@ -132,52 +78,6 @@ def copy(source, dest, interactive=False): run(shlex.split(f"cp -a {source} {dest}")) -def special_copy(source, dest): - whitelist = [ - 'fish', - 'gtk-2.0', - 'gtk-3.0', - 'htop', - 'i3', - 'kitty', - 'neofetch', - 'nitrogen', - 'picom', - 'polybar', - 'rofi', - 'xfce4', - 'navi', - 'gtk-4.0', - 'flameshot' - ] - dirs = os.listdir(source) - selected_dirs = [] - for each_name in dirs: - if each_name in whitelist: - selected_dirs.append(f'{source}{each_name}' if source.endswith('/') else f'{source}/{each_name}') - for directory in selected_dirs: - copy(directory, dest) - - -def commit_then_push(): - # I forget checking out to main after testing on a seperate branch - # Line below checks out for me every time it's run - proc('/usr/bin/git checkout main', SETTINGS['DOTFILES_REPOSITORY']) - proc('/usr/bin/git fetch', SETTINGS['DOTFILES_REPOSITORY']) - proc('/usr/bin/git pull', SETTINGS['DOTFILES_REPOSITORY']) - proc('/usr/bin/git add .', SETTINGS['DOTFILES_REPOSITORY']) - date = dt.now().strftime('%d.%m.%Y %H.%M') - _, output = proc(f'/usr/bin/git commit -m "dotman {date}"', SETTINGS['DOTFILES_REPOSITORY']) - if 'nothing to commit' not in output: - code, output = proc('/usr/bin/git push', SETTINGS['DOTFILES_REPOSITORY']) - if code == 0: - _, output = proc('/usr/bin/git log', SETTINGS['DOTFILES_REPOSITORY']) - commit = output.split('\n')[0].replace('commit ', '') - return 3, commit - return 0, None if code == 0 else 2, None - return 1, None - - def backup(): """ Aggresively executes the steps to do checksum comparisons between local @@ -234,7 +134,6 @@ def main(): flag_interactive = False flag_backup = False flag_deploy = False - flag_setup = False flag_version = False flag_help = False sys.argv.remove(sys.argv[0]) @@ -245,7 +144,6 @@ def main(): flag_interactive = flag_interactive or key == '-i' or key == '--interactive' flag_backup = flag_backup or key == '-b' or key == '--backup' flag_deploy = flag_deploy or key == '-d' or key == '--deploy' - flag_setup = flag_setup or key == '-s' or key == '--setup-dotman' flag_version = flag_version or key == '-v' or key == '--version' flag_help = flag_help or key == '-h' or key == '--help' else: @@ -287,92 +185,6 @@ def main(): exit(0) # run deploy - # ^^^ new logic ^^^ - # - # vvv old logic vvv - return - - if flag_interactive: - print(f"dotman {VER} by ferityigitbalaban") - if not local_repo_exists: - print(colored('Important warning:', 'red'), 'dotfiles repository cannot be located at: ', - colored(SETTINGS['DOTFILES_REPOSITORY'], 'yellow')) - print('Edit DOTFILES_REPOSITORY variable in this script to specify its location') - print(f'To grab dotfiles from', colored(f'"{remote_shortname}"', 'yellow'), end='') - ans = input('type Y. (y/N): ') - if ans.lower() == 'y' or 'yes': - grab_successed, exit_code = grab_dotfiles() - if grab_successed: - print(f'Successfully grabbed dotfiles from', colored(f'"{remote_shortname}"', 'yellow')) - else: - print(f'git exited with result code:', colored(str(exit_code), 'red'), - '. An error may have occured.') - exit(128) - else: - cprint('There isn\'t anything left for dotman to do. Have a nice day!', 'green') - exit(0) - print('dotman is', colored('ready', 'green'), 'for your command. ') - print('You can either backup to remote, or copy local repo to local config (deploy)') - ans = input('(B)ackup or (D)eploy: ') - if ans.lower() == 'b' or ans.lower() == 'backup': - print(colored('Step 1: ', 'magenta'), 'Copy from local config', colored(f"\"{SETTINGS['LOCAL_CONFIG']}\"", 'yellow'), - 'to local repo', colored(f"\"{SETTINGS['DOTFILES_REPOSITORY']}\"", 'yellow')) - special_copy(SETTINGS['LOCAL_CONFIG'], SETTINGS['DOTFILES_REPOSITORY']) - print(colored('Step 2: ', 'magenta'), f'Create a commit and push to remote repo', - colored(f"\"{SETTINGS['REMOTE_REPOSITORY']}\"", 'yellow')) - stat, _ = commit_then_push() - if stat == 0: - cprint('Backup completed. Have a nice day!', 'green') - elif stat == 1: - cprint('There was nothing to commit, aborting.', 'red') - elif stat == 2: - cprint('Couldn\'t push local to remote, aborting.', 'red') - elif stat == 3: - url = f"{SETTINGS['REMOTE_REPOSITORY']}/commit/{_}" - cprint(f'Backup completed: {url}. Have a nice day!', 'green') - exit(stat) - elif ans.lower() == 'd' or ans.lower() == 'deploy': - print(colored('Step 1:', 'magenta'), ' Copy from local repo to local config') - special_copy(SETTINGS['DOTFILES_REPOSITORY'], SETTINGS['LOCAL_CONFIG']) - cprint('Deploy completed. Have a nice day!', 'green') - exit(0) - elif flag_backup and not flag_deploy: - if local_repo_exists: - special_copy(SETTINGS['LOCAL_CONFIG'], SETTINGS['DOTFILES_REPOSITORY']) - exit(commit_then_push()) - else: - print(colored('[CRITICAL]', 'red'), 'Local repository couldn\'t be located. Aborting...') - exit(128) - elif flag_deploy and not flag_backup: - if local_repo_exists: - special_copy(SETTINGS['DOTFILES_REPOSITORY'], SETTINGS['LOCAL_CONFIG']) - exit(0) - else: - print(colored('[CRITICAL]', 'red'), 'Local repository couldn\'t be located. Aborting...') - exit(128) - elif flag_setup: - print(f'dotman interactive setup wizard {WER}') - print_settings() - ans = input('Edit settings (y/N): ') - if ans.lower() == 'y' or ans.lower() == 'yes': - print('Type in number of setting you wish to modify, and "e" or "exit" when done') - while True: - num = input('Input: ') - if num.lower() == 'exit' or num.lower() == 'e': - break - elif num.isnumeric() and 1 <= int(num) <= len(SETTINGS): - key = get_nth_key(int(num) - 1, SETTINGS) - SETTINGS[key] = input(f'Enter new value for {key}: ').strip() - print('Saving changes to file') - write_setup() - - elif flag_version: - print(f'dotman version: {VER.removeprefix("v")}') - exit(0) - elif not flag_deploy and not flag_backup and not flag_interactive or flag_help: - print(help_message) - exit(0) - if __name__ == '__main__': main()