diff --git a/.bin/Scripts/build-ufd b/.bin/Scripts/build-ufd index 17e5972c..45c3ff35 100755 --- a/.bin/Scripts/build-ufd +++ b/.bin/Scripts/build-ufd @@ -54,8 +54,8 @@ if __name__ == '__main__': confirm_selections(args) # Prep UFD - print_info('Prep UFD') if not args['--update']: + print_info('Prep UFD') prep_device(ufd_dev, UFD_LABEL, use_mbr=args['--use-mbr']) # Mount UFD diff --git a/.bin/Scripts/build_kit.ps1 b/.bin/Scripts/build_kit.ps1 index 76e69966..6280b032 100644 --- a/.bin/Scripts/build_kit.ps1 +++ b/.bin/Scripts/build_kit.ps1 @@ -83,17 +83,17 @@ if ($MyInvocation.InvocationName -ne ".") { DownloadFile -Path $Path -Name "7z-extra.7z" -Url "https://www.7-zip.org/a/7z1900-extra.7z" # ConEmu - $Url = "https://github.com/Maximus5/ConEmu/releases/download/v19.03.10/ConEmuPack.190310.7z" + $Url = "https://github.com/Maximus5/ConEmu/releases/download/v19.06.23/ConEmuPack.190623.7z" DownloadFile -Path $Path -Name "ConEmuPack.7z" -Url $Url # Notepad++ - $Url = "https://notepad-plus-plus.org/repository/7.x/7.6.4/npp.7.6.4.bin.minimalist.7z" + $Url = "https://notepad-plus-plus.org/repository/7.x/7.7.1/npp.7.7.1.bin.minimalist.7z" DownloadFile -Path $Path -Name "npp.7z" -Url $Url # Python - $Url = "https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-win32.zip" + $Url = "https://www.python.org/ftp/python/3.7.4/python-3.7.4-embed-win32.zip" DownloadFile -Path $Path -Name "python32.zip" -Url $Url - $Url = "https://www.python.org/ftp/python/3.7.2/python-3.7.2.post1-embed-amd64.zip" + $Url = "https://www.python.org/ftp/python/3.7.4/python-3.7.4-embed-amd64.zip" DownloadFile -Path $Path -Name "python64.zip" -Url $Url # Python: psutil diff --git a/.bin/Scripts/ddrescue-tui b/.bin/Scripts/ddrescue-tui index e41c6bb1..6ee8ad57 100755 --- a/.bin/Scripts/ddrescue-tui +++ b/.bin/Scripts/ddrescue-tui @@ -2,42 +2,10 @@ # ## Wizard Kit: ddrescue TUI Launcher +source launch-in-tmux + SESSION_NAME="ddrescue-tui" WINDOW_NAME="ddrescue TUI" -MENU="ddrescue-tui-menu" - -function ask() { - while :; do - read -p "$1 " -r answer - if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then - return 0 - elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then - return 1 - fi - done -} - -die () { - echo "$0:" "$@" >&2 - exit 1 -} - -# Check for running session -if tmux list-session | grep -q "$SESSION_NAME"; then - echo "WARNING: tmux session $SESSION_NAME already exists." - echo "" - if ask "Kill current session?"; then - tmux kill-session -t "$SESSION_NAME" || \ - die "Failed to kill session: $SESSION_NAME" - else - echo "Aborted." - echo "" - echo -n "Press Enter to exit... " - read -r - exit 0 - fi -fi - -# Start session -tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $* +TMUX_CMD="ddrescue-tui-menu" +launch_in_tmux "$@" diff --git a/.bin/Scripts/ddrescue-tui-menu b/.bin/Scripts/ddrescue-tui-menu index f65e24e1..eab8cd3f 100755 --- a/.bin/Scripts/ddrescue-tui-menu +++ b/.bin/Scripts/ddrescue-tui-menu @@ -45,6 +45,7 @@ if __name__ == '__main__': # Done print_standard('\nDone.') pause("Press Enter to exit...") + tmux_switch_client() exit_script() except GenericAbort: abort() @@ -55,6 +56,7 @@ if __name__ == '__main__': print_error(msg) abort() except SystemExit as sys_exit: + tmux_switch_client() exit_script(sys_exit.code) except: major_exception() diff --git a/.bin/Scripts/functions/cleanup.py b/.bin/Scripts/functions/cleanup.py index 2723994b..595ff5f9 100644 --- a/.bin/Scripts/functions/cleanup.py +++ b/.bin/Scripts/functions/cleanup.py @@ -1,9 +1,10 @@ -# Wizard Kit: Functions - Cleanup +'''Wizard Kit: Functions - Cleanup''' +# pylint: disable=no-name-in-module,wildcard-import +# vim: sts=2 sw=2 ts=2 from functions.setup import * from settings.cleanup import * - def cleanup_adwcleaner(): """Move AdwCleaner folders into the ClientDir.""" source_path = r'{SYSTEMDRIVE}\AdwCleaner'.format(**global_vars['Env']) @@ -70,6 +71,7 @@ def cleanup_cbs(dest_folder): def cleanup_d7ii(): + # pylint: disable=too-many-branches """Sort d7II logs and remove temp items.""" d7_path = r'{}\d7II'.format(global_vars['ClientDir']) d7_reports = r'{} Reports'.format(d7_path) @@ -78,9 +80,9 @@ def cleanup_d7ii(): # Logs & Reports if os.path.exists(d7_reports): for entry in os.scandir(d7_reports): - r = re.match(r'(\d+)-(\d+)-(\d+)', entry.name) + _r = re.match(r'(\d+)-(\d+)-(\d+)', entry.name) d7_date = '{}-{:02d}-{:02d}'.format( - r.group(1), int(r.group(2)), int(r.group(3))) + _r.group(1), int(_r.group(2)), int(_r.group(3))) d7_mlogs = r'{}\Malware Logs'.format(entry.path) log_dest = r'{SYSTEMDRIVE}\{prefix}\Logs\{date}'.format( prefix=KIT_NAME_SHORT, @@ -138,13 +140,6 @@ def cleanup_d7ii(): os.rmdir(d7_path) except OSError: pass - - # Restore default UAC settings - if global_vars['OS']['Version'] == '10': - write_registry_settings(UAC_DEFAULTS_WIN10, all_users=True) - else: - # Haven't checked Win8 settings, only applying minimum set - write_registry_settings(UAC_DEFAULTS_WIN7, all_users=True) def cleanup_desktop(): """Move known backup files and reports into the ClientDir.""" @@ -229,7 +224,7 @@ def delete_registry_key(hive, key, recurse=False): # Delete all subkeys first with winreg.OpenKeyEx(hive, key, 0, access) as k: key_info = winreg.QueryInfoKey(k) - for x in range(key_info[0]): + for _i in range(key_info[0]): # pylint: disable=unused-variable subkey = r'{}\{}'.format(key, winreg.EnumKey(k, 0)) delete_registry_key(hive, subkey) @@ -247,7 +242,14 @@ def delete_registry_value(hive, key, value): winreg.DeleteValue(k, value) +def restore_default_uac(): + """Restores default UAC settings via the registry.""" + if global_vars['OS']['Version'] == '10': + write_registry_settings(UAC_DEFAULTS_WIN10, all_users=True) + else: + # Haven't checked Win8 settings, only applying minimum set + write_registry_settings(UAC_DEFAULTS_WIN7, all_users=True) + + if __name__ == '__main__': print("This file is not meant to be called directly.") - -# vim: sts=2 sw=2 ts=2 diff --git a/.bin/Scripts/functions/data.py b/.bin/Scripts/functions/data.py index c359ab6c..222991bb 100644 --- a/.bin/Scripts/functions/data.py +++ b/.bin/Scripts/functions/data.py @@ -218,7 +218,7 @@ def mount_volumes( report[vol_path] = vol_data elif 'children' in vol_data: # Skip LVM/RAID partitions (the real volume is mounted separately) - vol_data['show_data']['data'] = vol_data.get('fstype', 'UNKNOWN') + vol_data['show_data']['data'] = vol_data.get('fstype', 'Unknown') if vol_data.get('label', None): vol_data['show_data']['data'] += ' "{}"'.format(vol_data['label']) vol_data['show_data']['info'] = True diff --git a/.bin/Scripts/functions/ddrescue.py b/.bin/Scripts/functions/ddrescue.py index b276d52b..ff843d06 100644 --- a/.bin/Scripts/functions/ddrescue.py +++ b/.bin/Scripts/functions/ddrescue.py @@ -281,6 +281,7 @@ class RecoveryState(): raise GenericError('Unsupported mode') self.get_smart_source() self.set_working_dir() + os.makedirs(global_vars['LogDir'], exist_ok=True) def add_block_pair(self, source, dest): """Run safety checks and append new BlockPair to internal list.""" @@ -289,10 +290,10 @@ class RecoveryState(): if source.is_dir(): raise GenericError('Invalid source "{}"'.format( source.path)) - elif not dest.is_dev(): + if not dest.is_dev(): raise GenericError('Invalid destination "{}"'.format( dest.path)) - elif source.size > dest.size: + if source.size > dest.size: raise GenericError( 'Destination is too small, refusing to continue.') else: @@ -300,13 +301,13 @@ class RecoveryState(): if not source.is_dev(): raise GenericError('Invalid source "{}"'.format( source.path)) - elif not dest.is_dir(): + if not dest.is_dir(): raise GenericError('Invalid destination "{}"'.format( dest.path)) - elif (source.size * 1.2) > dest.size: + if (source.size * 1.2) > dest.size: raise GenericError( 'Not enough free space, refusing to continue.') - elif dest.fstype.lower() not in RECOMMENDED_FSTYPES: + if dest.fstype.lower() not in RECOMMENDED_FSTYPES: print_error( 'Destination filesystem "{}" is not recommended.'.format( dest.fstype.upper())) @@ -315,13 +316,25 @@ class RecoveryState(): print_standard(' ') if not ask('Proceed anyways? (Strongly discouraged)'): raise GenericAbort() - elif not is_writable_dir(dest): + if not is_writable_dir(dest): raise GenericError( 'Destination is not writable, refusing to continue.') - elif not is_writable_filesystem(dest): + if not is_writable_filesystem(dest): raise GenericError( 'Destination is mounted read-only, refusing to continue.') + # Destination NVMe/SMART safety check + if dest.is_dev(): + disk_obj = DiskObj(dest.path) + if disk_obj.nvme_attributes or disk_obj.smart_attributes: + if not disk_obj.check_attributes(): + raise GenericError( + 'NVMe/SMART issue detected on destination, refusing to continue.') + else: + print_warning('No NVMe or SMART data available for destination') + if not ask('Proceed anyways?'): + raise GenericAbort() + # Safety checks passed self.block_pairs.append(BlockPair(self.mode, source, dest)) @@ -930,7 +943,7 @@ def menu_ddrescue(source_path, dest_path, run_mode): pause('Press Enter to exit... ') # Done - run_program(['tmux', 'kill-window']) + tmux_kill_all_panes() exit_script() diff --git a/.bin/Scripts/functions/hw_diags.py b/.bin/Scripts/functions/hw_diags.py index 8746ed79..ef2bf23b 100644 --- a/.bin/Scripts/functions/hw_diags.py +++ b/.bin/Scripts/functions/hw_diags.py @@ -53,6 +53,12 @@ class CpuObj(): continue self.lscpu[_field] = _data + # Get RAM details as well + ram_details = get_ram_details() + self.ram_total = human_readable_size(ram_details.pop('Total', 0)).strip() + self.ram_dimms = [ + '{}x {}'.format(v, k) for k, v in sorted(ram_details.items())] + def generate_cpu_report(self): """Generate CPU report with data from all tests.""" report = [] @@ -60,11 +66,8 @@ class CpuObj(): report.append(' {}'.format(self.name)) # Include RAM details - ram_details = get_ram_details() - ram_total = human_readable_size(ram_details.pop('Total', 0)).strip() - ram_dimms = ['{}x {}'.format(v, k) for k, v in sorted(ram_details.items())] report.append('{BLUE}RAM{CLEAR}'.format(**COLORS)) - report.append(' {} ({})'.format(ram_total, ', '.join(ram_dimms))) + report.append(' {} ({})'.format(self.ram_total, ', '.join(self.ram_dimms))) # Tests for test in self.tests.values(): @@ -163,6 +166,18 @@ class DiskObj(): # self.dd_skip_extra == 0 is fine pass + def is_aging(self): + """Check if power-on hours is above the threshold, returns bool.""" + if self.nvme_attributes: + poh = self.nvme_attributes.get('power_on_hours', {}).get('raw', -1) + elif self.smart_attributes: + poh = self.smart_attributes.get(9, {}).get('raw', -1) + + error_thresh = ATTRIBUTES['SMART'][9]['Error'] + max_thresh = ATTRIBUTES['SMART'][9]['Maximum'] + + return error_thresh <= poh < max_thresh + def check_attributes(self): """Check NVMe / SMART attributes for errors, returns bool.""" attr_type = self.attr_type @@ -614,6 +629,83 @@ class State(): # Assuming layout definitions changes mid-run, ignoring pass + def build_outer_panes(self): + """Build top and side panes.""" + clear_screen() + + # Top + self.panes['Top'] = tmux_split_window( + behind=True, lines=2, vertical=True, + text=TOP_PANE_TEXT) + + # Started + self.panes['Started'] = tmux_split_window( + lines=SIDE_PANE_WIDTH, target_pane=self.panes['Top'], + text='{BLUE}Started{CLEAR}\n{s}'.format( + s=time.strftime("%Y-%m-%d %H:%M %Z"), + **COLORS)) + + # Progress + self.panes['Progress'] = tmux_split_window( + lines=SIDE_PANE_WIDTH, + watch=self.progress_out) + + def fix_tmux_panes(self): + """Fix pane sizes if the window has been resized.""" + needs_fixed = False + + # Bail? + if not self.panes: + return + + # Check layout + for k, v in self.tmux_layout.items(): + if not v.get('Check'): + # Not concerned with the size of this pane + continue + # Get target + target = None + if k != 'Current': + if k not in self.panes: + # Skip missing panes + continue + else: + target = self.panes[k] + + # Check pane size + x, y = tmux_get_pane_size(pane_id=target) + if v.get('x', False) and v['x'] != x: + needs_fixed = True + if v.get('y', False) and v['y'] != y: + needs_fixed = True + + # Bail? + if not needs_fixed: + return + + # Update layout + for k, v in self.tmux_layout.items(): + # Get target + target = None + if k != 'Current': + if k not in self.panes: + # Skip missing panes + continue + else: + target = self.panes[k] + + # Resize pane + tmux_resize_pane(pane_id=target, **v) + + def fix_tmux_panes_loop(self): + while True: + try: + self.fix_tmux_panes() + sleep(1) + except RuntimeError: + # Assuming layout definitions changes mid-run, ignoring + pass + def init(self): """Remove test objects, set log, and add devices.""" self.disks = [] @@ -1135,8 +1227,13 @@ def run_hw_tests(state): v['Objects'][-1].update_status('N/A') if k == TESTS_CPU[-1]: # Last CPU test run, post CPU results + cpu_failed = False + for test in state.cpu.tests.values(): + cpu_failed = cpu_failed or test.failed + cpu_failed = cpu_failed or not test.passed + color_code = 'Diags FAIL' if cpu_failed else 'Diags' state.ost.post_device_results( - state.cpu, state.ticket_id, state.ticket_name) + state.cpu, state.ticket_id, state.ticket_name, color_code) # Recheck attributes if state.tests['NVMe / SMART']['Enabled']: for test_obj in state.tests['NVMe / SMART']['Objects']: @@ -1171,8 +1268,15 @@ def run_hw_tests(state): if _disk_tests_enabled and state.disks and not state.ost.disabled: print_standard('Posting results to osTicket...') for disk in state.disks: + # Set color code + color_code = 'Diags' + for test in disk.tests.values(): + if test.disabled: + continue + if test.failed or not (test.passed or 'N/A' in test.status): + color_code = 'Diags FAIL' state.ost.post_device_results( - disk, state.ticket_id, state.ticket_name) + disk, state.ticket_id, state.ticket_name, color_code) # Check if disk checkbox needs updating all_disks_passed = True @@ -1200,7 +1304,9 @@ def run_hw_tests(state): print_standard(' ') # Upload for review - if ENABLED_UPLOAD_DATA and ask('Upload results for review?'): + if (ENABLED_UPLOAD_DATA + and DEBUG_MODE + and ask('Upload results for review?')): try_and_print( message='Saving debug reports...', function=save_debug_reports, @@ -1652,6 +1758,9 @@ def run_nvme_smart_tests(state, test, update_mode=False): if test.failed and not update_mode: for t in ['badblocks', 'I/O Benchmark']: dev.disable_test(t, 'Denied') + if dev.is_aging() and not update_mode: + test.failed = True + test.update_status('FAIL') # Done update_progress_pane(state) diff --git a/.bin/Scripts/functions/osticket.py b/.bin/Scripts/functions/osticket.py index 4b3c5adf..3c2981be 100644 --- a/.bin/Scripts/functions/osticket.py +++ b/.bin/Scripts/functions/osticket.py @@ -204,6 +204,9 @@ class osTicket(): # Device report.append(dev.description) + if hasattr(dev, 'ram_total'): + report.append('{} RAM ({})'.format( + dev.ram_total, ', '.join(dev.ram_dimms))) report.append(' ') # Test reports @@ -240,6 +243,8 @@ class osTicket(): report.append('Volumes:') report.extend(self.generate_volume_report(dev, results)) report.append(' ') + if not dev.is_4k_aligned(): + report.append('! NOTE: One or more partitions are not 4K aligned') # Asterisk if results['Asterisk']: @@ -497,15 +502,15 @@ class osTicket(): # Done return data - def post_device_results(self, dev, ticket_id, ticket_name): + def post_device_results(self, dev, ticket_id, ticket_name, color='Diags'): """Generate osTicket friendly report and post as response to ticket.""" if not dev.tests: # No test results available, aborting post return response = self.generate_report(dev, ticket_id, ticket_name) - self.post_response(response, ticket_id) + self.post_response(response, ticket_id, color) - def post_response(self, response, ticket_id): + def post_response(self, response, ticket_id, color='Normal'): """Post a reply to a ticket in osTicket.""" self.connect() @@ -520,12 +525,13 @@ class osTicket(): # Build SQL cmd sql_cmd = "INSERT INTO `{Name}`.`{Response}`".format( **OSTICKET['Database'], **OSTICKET['Tables']) - sql_cmd += " (ticket_id, staff_id, staff_name, response, created)" + sql_cmd += " (ticket_id, staff_id, staff_name, response, created, code)" sql_cmd += " VALUES (" sql_cmd += " '{}',".format(ticket_id) sql_cmd += " '{ID}', '{Name}',".format(**OSTICKET['Staff']) sql_cmd += " '{}',".format(response.replace("'", "\\'")) - sql_cmd += " '{}'".format(time.strftime("%Y-%m-%d %H:%M:%S")) + sql_cmd += " '{}',".format(time.strftime("%Y-%m-%d %H:%M:%S")) + sql_cmd += " '{}'".format(OSTICKET['Color Codes'][color]) sql_cmd += " );" # Run SQL cmd diff --git a/.bin/Scripts/functions/tmux.py b/.bin/Scripts/functions/tmux.py index 81522268..8c6ad327 100644 --- a/.bin/Scripts/functions/tmux.py +++ b/.bin/Scripts/functions/tmux.py @@ -141,6 +141,18 @@ def tmux_split_window( return result.stdout.decode().strip() +def tmux_switch_client(target_session=None): + """Switch to target tmux session, or previous if none specified.""" + cmd = ['tmux', 'switch-client'] + if target_session: + cmd.extend(['-t', target_session]) + else: + # Switch to previous instead + cmd.append('-p') + + run_program(cmd, check=False) + + def tmux_update_pane( pane_id, command=None, working_dir=None, text=None, watch=None, watch_cmd='cat'): diff --git a/.bin/Scripts/functions/update.py b/.bin/Scripts/functions/update.py index e2ac3f21..05653484 100755 --- a/.bin/Scripts/functions/update.py +++ b/.bin/Scripts/functions/update.py @@ -1177,6 +1177,19 @@ def update_winaiorepair(): # Uninstallers +def update_eset_av_remover(): +# ESET AVRemover32 + ## NOTE: Lives in .bin uncompressed + # Stop running processes + for exe in ['AVRemover32.exe', 'AVRemover64.exe']: + kill_process(exe) + + # Download + dest = r'{}\AVRemover'.format(global_vars['BinDir']) + download_generic(dest, 'AVRemover.exe', SOURCE_URLS['AVRemover32']) + download_generic(dest, 'AVRemover64.exe', SOURCE_URLS['AVRemover64']) + + def update_iobit_uninstaller(): # Stop running processes kill_process('IObitUninstallerPortable.exe') diff --git a/.bin/Scripts/hw-diags b/.bin/Scripts/hw-diags index d3a1cb21..70f84db4 100755 --- a/.bin/Scripts/hw-diags +++ b/.bin/Scripts/hw-diags @@ -1,46 +1,11 @@ #!/bin/bash # -## Wizard Kit: HW Diagnostics - Menu Launcher +## Wizard Kit: HW Diagnostics Launcher + +source launch-in-tmux SESSION_NAME="hw-diags" WINDOW_NAME="Hardware Diagnostics" -MENU="hw-diags-menu" - -function ask() { - while :; do - read -p "$1 [Y/N] " -r answer - if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then - return 0 - elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then - return 1 - fi - done -} - -die () { - echo "$0:" "$@" >&2 - exit 1 -} - -# Check for running session -if tmux list-session | grep -q "$SESSION_NAME"; then - echo "WARNING: tmux session $SESSION_NAME already exists." - echo "" - if ask "Connect to current session?"; then - # Do nothing, the command below will attach/connect - echo "" - elif ask "Kill current session and start new session?"; then - tmux kill-session -t "$SESSION_NAME" || \ - die "Failed to kill session: $SESSION_NAME" - else - echo "Aborted." - echo "" - echo -n "Press Enter to exit... " - read -r - exit 0 - fi -fi - -# Start session -tmux new-session -A -s "$SESSION_NAME" -n "$WINDOW_NAME" "$MENU" $* +TMUX_CMD="hw-diags-menu" +launch_in_tmux "$@" diff --git a/.bin/Scripts/hw-diags-menu b/.bin/Scripts/hw-diags-menu index fc95e04a..7a122ae7 100755 --- a/.bin/Scripts/hw-diags-menu +++ b/.bin/Scripts/hw-diags-menu @@ -23,6 +23,7 @@ if __name__ == '__main__': sleep(1) pause('Press Enter to exit...') except SystemExit as sys_exit: + tmux_switch_client() exit_script(sys_exit.code) except: # Cleanup @@ -59,6 +60,7 @@ if __name__ == '__main__': # Done tmux_kill_all_panes() + tmux_switch_client() exit_script() # vim: sts=2 sw=2 ts=2 diff --git a/.bin/Scripts/launch-in-tmux b/.bin/Scripts/launch-in-tmux new file mode 100755 index 00000000..e737b574 --- /dev/null +++ b/.bin/Scripts/launch-in-tmux @@ -0,0 +1,64 @@ +#!/bin/bash +# +## Wizard Kit: TMUX Launcher + +function ask() { + while :; do + read -p "$1 [Y/N] " -r answer + if echo "$answer" | grep -Eiq '^(y|yes|sure)$'; then + return 0 + elif echo "$answer" | grep -Eiq '^(n|no|nope)$'; then + return 1 + fi + done +} + +die () { + echo "$0:" "$@" >&2 + exit 1 +} + +function launch_in_tmux() { + # Check for required vars + [[ -n "${SESSION_NAME:-}" ]] || die "Required variable missing (SESSION_NAME)" + [[ -n "${WINDOW_NAME:-}" ]] || die "Required variable missing (WINDOW_NAME)" + [[ -n "${TMUX_CMD:-}" ]] || die "Required variable missing (TMUX_CMD)" + + # Check for running session + if tmux list-session | grep -q "$SESSION_NAME"; then + echo "WARNING: tmux session $SESSION_NAME already exists." + echo "" + if ask "Connect to current session?"; then + if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, switch to session + tmux switch-client -t "$SESSION_NAME" + else + # Running outside TMUX, attach to session + tmux attach-session -t "$SESSION_NAME" + fi + exit 0 + elif ask "Kill current session and start new session?"; then + tmux kill-session -t "$SESSION_NAME" || \ + die "Failed to kill session: $SESSION_NAME" + else + echo "Aborted." + echo "" + echo -n "Press Enter to exit... " + read -r + exit 0 + fi + fi + + # Start/Rename session + if [[ -n "${TMUX:-}" ]]; then + # Running inside TMUX, rename session/window and open the menu + tmux rename-session "$SESSION_NAME" + tmux rename-window "$WINDOW_NAME" + "$TMUX_CMD" "$@" + tmux rename-session "${SESSION_NAME}_DONE" + tmux rename-window "${WINDOW_NAME}_DONE" + else + # Running outside TMUX, start/attach to session + tmux new-session -s "$SESSION_NAME" -n "$WINDOW_NAME" "$TMUX_CMD" "$@" + fi +} diff --git a/.bin/Scripts/settings/cleanup.py b/.bin/Scripts/settings/cleanup.py index fd4a595b..15162947 100644 --- a/.bin/Scripts/settings/cleanup.py +++ b/.bin/Scripts/settings/cleanup.py @@ -1,11 +1,18 @@ -# Wizard Kit: Settings - Cleanup +'''Wizard Kit: Settings - Cleanup''' +# vim: sts=2 sw=2 ts=2 +import os import re -import psutil + try: + # pylint: disable=import-error import winreg + HKU = winreg.HKEY_USERS + HKCR = winreg.HKEY_CLASSES_ROOT + HKCU = winreg.HKEY_CURRENT_USER + HKLM = winreg.HKEY_LOCAL_MACHINE except ModuleNotFoundError: - if psutil.WINDOWS: + if os.name == 'nt': raise # d7II @@ -33,10 +40,6 @@ DESKTOP_ITEMS = re.compile( ) # Registry -HKU = winreg.HKEY_USERS -HKCR = winreg.HKEY_CLASSES_ROOT -HKCU = winreg.HKEY_CURRENT_USER -HKLM = winreg.HKEY_LOCAL_MACHINE UAC_DEFAULTS_WIN7 = { r'Software\Microsoft\Windows\CurrentVersion\Policies\System': { 'DWORD Items': { @@ -62,5 +65,3 @@ UAC_DEFAULTS_WIN10 = { if __name__ == '__main__': print("This file is not meant to be called directly.") - -# vim: sts=2 sw=2 ts=2 diff --git a/.bin/Scripts/settings/hw_diags.py b/.bin/Scripts/settings/hw_diags.py index 9f0e1391..2d6104f3 100644 --- a/.bin/Scripts/settings/hw_diags.py +++ b/.bin/Scripts/settings/hw_diags.py @@ -76,16 +76,16 @@ ATTRIBUTES = { 'NVMe': { 'critical_warning': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, 'media_errors': {'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, - 'power_on_hours': {'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, }, + 'power_on_hours': {'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': 122724,}, 'unsafe_shutdowns': {'Critical': False, 'Ignore': True, 'Warning': 1, 'Error': None, 'Maximum': None, }, }, 'SMART': { 5: {'Hex': '05', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, - 9: {'Hex': '09', 'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': None, }, + 9: {'Hex': '09', 'Critical': False, 'Ignore': True, 'Warning': 17532, 'Error': 26298, 'Maximum': 122724,}, 10: {'Hex': '10', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, 184: {'Hex': 'B8', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, 187: {'Hex': 'BB', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, - 188: {'Hex': 'BC', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, + 188: {'Hex': 'BC', 'Critical': False, 'Ignore': True, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, 196: {'Hex': 'C4', 'Critical': False, 'Ignore': False, 'Warning': 1, 'Error': 10, 'Maximum': 10000, }, 197: {'Hex': 'C5', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, 198: {'Hex': 'C6', 'Critical': True, 'Ignore': False, 'Warning': None, 'Error': 1, 'Maximum': None, }, @@ -94,9 +94,10 @@ ATTRIBUTES = { }, } ATTRIBUTE_COLORS = ( + # NOTE: The order here is important; least important to most important. + ('Warning', 'YELLOW'), ('Error', 'RED'), ('Maximum', 'PURPLE'), - ('Warning', 'YELLOW'), ) KEY_NVME = 'nvme_smart_health_information_log' KEY_SMART = 'ata_smart_attributes' diff --git a/.bin/Scripts/settings/launchers.py b/.bin/Scripts/settings/launchers.py old mode 100644 new mode 100755 index ca7ea636..98640cd2 --- a/.bin/Scripts/settings/launchers.py +++ b/.bin/Scripts/settings/launchers.py @@ -1,4 +1,6 @@ -# Wizard Kit: Settings - Launchers +'''Wizard Kit: Settings - Launchers''' +# pylint: disable=line-too-long +# vim: sts=2 sw=2 ts=2 LAUNCHERS = { r'(Root)': { @@ -6,6 +8,53 @@ LAUNCHERS = { 'L_TYPE': 'Executable', 'L_PATH': 'd7II', 'L_ITEM': 'd7II.exe', + 'Extra Code': [ + r'rem Pre-d7II safety checks', + r'rem NOTE: This is an ugly hack but it works', + r'', + r':Init2', + r'echo Running safety checks...', + r'set ARCH=32', + r'if /i "%PROCESSOR_ARCHITECTURE%" == "AMD64" set "ARCH=64"', + r'set "AV_REMOVER=%bin%\AVRemover\AVRemover.exe"', + r'set "PYTHON=%bin%\Python\x32\python.exe"', + r'if %ARCH% equ 64 (', + r' set "AV_REMOVER=%bin%\AVRemover\AVRemover64.exe"', + r' set "PYTHON=%bin%\Python\x64\python.exe"', + r')', + r'', + r':PythonChecks', + r'if not exist "%PYTHON%" goto ErrorPythonNotFound', + r'"%PYTHON%" --version >nul || goto ErrorPythonUnsupported', + r'echo Python: OK', + r'', + r':AVCheck', + r'rem Run ESETs AV Removal tool for tech to review', + r'echo Please check for running AV', + r'start "" /wait "%AV_REMOVER%"', + r'echo.', + r'echo Press Enter to Launch d7II...', + r'pause>nul', + r'goto DefineLaunch', + r'', + r':: Pre-d7II Errors', + r':ErrorPythonNotFound', + r'rem Broken Kit', + r'echo.', + r'echo ERROR: The Python executable is missing.', + r'echo This kit is damaged and needs to be rebuilt', + r'goto Abort', + r'', + r':ErrorPythonUnsupported', + r'rem The Windows installation lacks Windows update KB2999226 needed to run Python', + r'echo.', + r'echo ERROR: Failed to run Python, try installing Windows update KB2999226.', + r'echo NOTE: That update is from October 2015 so this system is SEVERELY outdated', + r'if exist "%bin%\..\Installers\Extras\Windows Updates" (', + r' start "" "explorer.exe" "%bin%\..\Installers\Extras\Windows Updates"', + r')', + r'goto Abort', + ], }, 'System Setup': { 'L_TYPE': 'PyScript', @@ -66,6 +115,7 @@ LAUNCHERS = { }, }, r'Data Transfers': { + # pylint: disable=bad-continuation "Fab's Autobackup Pro": { 'L_TYPE': 'Executable', 'L_PATH': 'AutoBackupPro', @@ -278,7 +328,7 @@ LAUNCHERS = { 'L_TYPE': 'Executable', 'L_PATH': 'erunt', 'L_ITEM': 'ERUNT.EXE', - 'L_ARGS': '%client_dir%\Backups\Registry\%iso_date% sysreg curuser otherusers', + 'L_ARGS': r'%client_dir%\Backups\Registry\%iso_date% sysreg curuser otherusers', 'L_ELEV': 'True', 'Extra Code': [ r'call "%bin%\Scripts\init_client_dir.cmd" /Logs', @@ -330,13 +380,13 @@ LAUNCHERS = { r'Drivers': { 'Intel RST (Current Release)': { 'L_TYPE': 'Executable', - 'L_PATH': '_Drivers\Intel RST', + 'L_PATH': r'_Drivers\Intel RST', 'L_ITEM': 'SetupRST_17.2.exe', 'L_7ZIP': 'SetupRST_17.2.exe', }, 'Intel RST (Previous Releases)': { 'L_TYPE': 'Folder', - 'L_PATH': '_Drivers\Intel RST', + 'L_PATH': r'_Drivers\Intel RST', 'L_ITEM': '.', 'L_NCMD': 'True', }, @@ -352,7 +402,7 @@ LAUNCHERS = { }, 'Snappy Driver Installer Origin': { 'L_TYPE': 'Executable', - 'L_PATH': '_Drivers\SDIO', + 'L_PATH': r'_Drivers\SDIO', 'L_ITEM': 'SDIO.exe', }, }, @@ -507,6 +557,20 @@ LAUNCHERS = { 'L_PATH': 'ConEmu', 'L_ITEM': 'ConEmu.exe', }, + 'Disable Windows Updates': { + 'L_TYPE': 'PyScript', + 'L_PATH': 'Scripts', + 'L_ITEM': 'windows_updates.py', + 'L_ARGS': '--disable', + 'L_ELEV': 'True', + }, + 'Enable Windows Updates': { + 'L_TYPE': 'PyScript', + 'L_PATH': 'Scripts', + 'L_ITEM': 'windows_updates.py', + 'L_ARGS': '--enable', + 'L_ELEV': 'True', + }, 'Enter SafeMode': { 'L_TYPE': 'PyScript', 'L_PATH': 'Scripts', @@ -562,7 +626,7 @@ LAUNCHERS = { 'L_TYPE': 'Executable', 'L_PATH': 'XMPlay', 'L_ITEM': 'xmplay.exe', - 'L_ARGS': '"%bin%\XMPlay\music.7z"', + 'L_ARGS': r'"%bin%\XMPlay\music.7z"', }, }, r'Repairs': { @@ -627,7 +691,7 @@ LAUNCHERS = { 'L_TYPE': 'Executable', 'L_PATH': 'RKill', 'L_ITEM': 'RKill.exe', - 'L_ARGS': '-s -l %log_dir%\Tools\RKill.log', + 'L_ARGS': r'-s -l %log_dir%\Tools\RKill.log', 'L_ELEV': 'True', 'Extra Code': [ r'call "%bin%\Scripts\init_client_dir.cmd" /Logs', @@ -697,5 +761,3 @@ LAUNCHERS = { if __name__ == '__main__': print("This file is not meant to be called directly.") - -# vim: sts=2 sw=2 ts=2 diff --git a/.bin/Scripts/settings/main.py b/.bin/Scripts/settings/main.py index 896d9c62..04e8858b 100644 --- a/.bin/Scripts/settings/main.py +++ b/.bin/Scripts/settings/main.py @@ -20,8 +20,8 @@ TECH_PASSWORD='Sorted1201' # Root Certificate Authority ROOT_CA_NAME='1201_Root_CA.crt' # Server IP addresses -OFFICE_SERVER_IP='10.11.1.20' -QUICKBOOKS_SERVER_IP='10.11.1.20' +OFFICE_SERVER_IP='10.120.1.15' +QUICKBOOKS_SERVER_IP='10.120.1.15' # Time Zones LINUX_TIME_ZONE='America/Los_Angeles' # See 'timedatectl list-timezones' for valid values WINDOWS_TIME_ZONE='Pacific Standard Time' # See 'tzutil /l' for valid values diff --git a/.bin/Scripts/settings/osticket.py b/.bin/Scripts/settings/osticket.py index dc30ced3..66a360f0 100644 --- a/.bin/Scripts/settings/osticket.py +++ b/.bin/Scripts/settings/osticket.py @@ -1,6 +1,12 @@ # Wizard Kit: Settings - osTicket OSTICKET = { + 'Color Codes': { + 'Normal': '0', + 'Contact': '1', + 'Diags': '2', + 'Diags FAIL': '3', + }, 'Database': { 'Name': 'osticket', 'User': 'wizardkit', diff --git a/.bin/Scripts/settings/setup.py b/.bin/Scripts/settings/setup.py index 4b402bd7..a3b61d61 100644 --- a/.bin/Scripts/settings/setup.py +++ b/.bin/Scripts/settings/setup.py @@ -27,6 +27,10 @@ MOZILLA_FIREFOX_UBO_PATH = r'{}\{}\ublock_origin.xpi'.format( os.environ.get('PROGRAMFILES'), r'Mozilla Firefox\distribution\extensions') SETTINGS_GOOGLE_CHROME = { + r'Software\Policies\Google\Chrome': { + 'DWORD Items': {'DefaultNotificationsSetting': 2}, + # 1: Allow, 2: Don't allow, 3: Ask + }, r'Software\Google\Chrome\Extensions\cjpalhdlnbpafiamejdnhcphjbkeiagm': { 'SZ Items': { 'update_url': 'https://clients2.google.com/service/update2/crx'}, @@ -170,6 +174,7 @@ SETTINGS_EXPLORER_USER = { }, }, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced': { + # Dup path so it Will be applied to all modes 'DWORD Items': { # Launch Folder Windows in a Separate Process 'SeparateProcess': 1, diff --git a/.bin/Scripts/settings/sources.py b/.bin/Scripts/settings/sources.py index 817441b5..04e50758 100644 --- a/.bin/Scripts/settings/sources.py +++ b/.bin/Scripts/settings/sources.py @@ -3,38 +3,40 @@ # vim: sts=2 sw=2 ts=2 tw=0 SOURCE_URLS = { - 'Adobe Reader DC': 'http://ardownload.adobe.com/pub/adobe/reader/win/AcrobatDC/1901020098/AcroRdrDC1901020098_en_US.exe', + 'Adobe Reader DC': 'https://ardownload2.adobe.com/pub/adobe/reader/win/AcrobatDC/1901220034/AcroRdrDC1901220034_en_US.exe', 'AdwCleaner': 'https://downloads.malwarebytes.com/file/adwcleaner', - 'AIDA64': 'http://download.aida64.com/aida64engineer599.zip', + 'AIDA64': 'http://download.aida64.com/aida64engineer600.zip', 'aria2': 'https://github.com/aria2/aria2/releases/download/release-1.34.0/aria2-1.34.0-win-32bit-build1.zip', 'Autoruns': 'https://download.sysinternals.com/files/Autoruns.zip', - 'BleachBit': 'https://download.bleachbit.org/BleachBit-2.0-portable.zip', + 'BleachBit': 'https://download.bleachbit.org/BleachBit-2.2-portable.zip', 'BlueScreenView32': 'http://www.nirsoft.net/utils/bluescreenview.zip', 'BlueScreenView64': 'http://www.nirsoft.net/utils/bluescreenview-x64.zip', 'Caffeine': 'http://www.zhornsoftware.co.uk/caffeine/caffeine.zip', 'ClassicStartSkin': 'http://www.classicshell.net/forum/download/file.php?id=3001&sid=9a195960d98fd754867dcb63d9315335', 'Du': 'https://download.sysinternals.com/files/DU.zip', 'ERUNT': 'http://www.aumha.org/downloads/erunt.zip', - 'ESET Online Scanner': 'https://download.eset.com/com/eset/tools/online_scanner/latest/esetonlinescanner_enu.exe', + 'ESET AVRemover32': 'https://download.eset.com/com/eset/tools/installers/av_remover/latest/avremover_nt32_enu.exe', + 'ESET AVRemover64': 'https://download.eset.com/com/eset/tools/installers/av_remover/latest/avremover_nt64_enu.exe', 'ESET NOD32 AV': 'https://download.eset.com/com/eset/apps/home/eav/windows/latest/eav_nt64.exe', + 'ESET Online Scanner': 'https://download.eset.com/com/eset/tools/online_scanner/latest/esetonlinescanner_enu.exe', 'Everything32': 'https://www.voidtools.com/Everything-1.4.1.935.x86.en-US.zip', 'Everything64': 'https://www.voidtools.com/Everything-1.4.1.935.x64.en-US.zip', - 'FastCopy': 'https://fastcopy.jp/archive/FastCopy380_installer.exe', + 'FastCopy': 'http://ftp.vector.co.jp/71/78/2323/FastCopy382_installer.exe', 'FurMark': 'https://geeks3d.com/dl/get/569', - 'Firefox uBO': 'https://addons.mozilla.org/firefox/downloads/file/1709472/ublock_origin-1.18.6-an+fx.xpi', + 'Firefox uBO': 'https://addons.mozilla.org/firefox/downloads/file/3027669/ublock_origin-1.20.0-an+fx.xpi', 'HitmanPro32': 'https://dl.surfright.nl/HitmanPro.exe', 'HitmanPro64': 'https://dl.surfright.nl/HitmanPro_x64.exe', - 'HWiNFO': 'http://files2.majorgeeks.com/377527622c5325acc1cb937fb149d0de922320c0/systeminfo/hwi_602.zip', + 'HWiNFO': 'http://files2.majorgeeks.com/8742c668ee52f7cbe5181d609ff800f3a37492c5/systeminfo/hwi_608.zip', 'Intel SSD Toolbox': r'https://downloadmirror.intel.com/28593/eng/Intel%20SSD%20Toolbox%20-%20v3.5.9.exe', 'IOBit_Uninstaller': r'https://portableapps.com/redirect/?a=IObitUninstallerPortable&s=s&d=pa&f=IObitUninstallerPortable_7.5.0.7.paf.exe', 'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe', - 'LibreOffice': 'https://download.documentfoundation.org/libreoffice/stable/6.2.4/win/x86_64/LibreOffice_6.2.4_Win_x64.msi', + 'LibreOffice': 'https://download.documentfoundation.org/libreoffice/stable/6.2.5/win/x86_64/LibreOffice_6.2.5_Win_x64.msi', 'Linux Reader': 'https://www.diskinternals.com/download/Linux_Reader.exe', 'Macs Fan Control': 'https://www.crystalidea.com/downloads/macsfancontrol_setup.exe', 'NirCmd32': 'https://www.nirsoft.net/utils/nircmd.zip', 'NirCmd64': 'https://www.nirsoft.net/utils/nircmd-x64.zip', - 'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.6.4/npp.7.6.4.bin.minimalist.7z', - 'Office Deployment Tool': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_11509-33604.exe', + 'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.7.1/npp.7.7.1.bin.minimalist.7z', + 'Office Deployment Tool': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_11617-33601.exe', 'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip', 'ProduKey64': 'http://www.nirsoft.net/utils/produkey-x64.zip', 'PuTTY': 'https://the.earth.li/~sgtatham/putty/latest/w32/putty.zip', @@ -43,14 +45,14 @@ SOURCE_URLS = { 'SDIO Themes': 'http://snappy-driver-installer.org/downloads/SDIO_Themes.zip', 'SDIO Torrent': 'http://snappy-driver-installer.org/downloads/SDIO_Update.torrent', 'ShutUp10': 'https://dl5.oo-software.com/files/ooshutup10/OOSU10.exe', - 'smartmontools': 'https://700-105252244-gh.circle-artifacts.com/0/builds/smartmontools-win32-setup-7.1-r4914.exe', + 'smartmontools': 'https://738-105252244-gh.circle-artifacts.com/0/builds/smartmontools-win32-setup-7.1-r4934.exe', 'TDSSKiller': 'https://media.kaspersky.com/utilities/VirusUtilities/EN/tdsskiller.exe', 'TestDisk': 'https://www.cgsecurity.org/testdisk-7.1-WIP.win.zip', 'wimlib32': 'https://wimlib.net/downloads/wimlib-1.13.1-windows-i686-bin.zip', 'wimlib64': 'https://wimlib.net/downloads/wimlib-1.13.1-windows-x86_64-bin.zip', 'WinAIO Repair': 'http://www.tweaking.com/files/setups/tweaking.com_windows_repair_aio.zip', 'Winapp2': 'https://github.com/MoscaDotTo/Winapp2/archive/master.zip', - 'WizTree': 'https://antibody-software.com/files/wiztree_3_28_portable.zip', + 'WizTree': 'https://antibody-software.com/files/wiztree_3_29_portable.zip', 'XMPlay 7z': 'https://support.xmplay.com/files/16/xmp-7z.zip?v=800962', 'XMPlay Game': 'https://support.xmplay.com/files/12/xmp-gme.zip?v=515637', 'XMPlay RAR': 'https://support.xmplay.com/files/16/xmp-rar.zip?v=409646', diff --git a/.bin/Scripts/settings/ufd.py b/.bin/Scripts/settings/ufd.py index 77b7f6df..22e9a777 100644 --- a/.bin/Scripts/settings/ufd.py +++ b/.bin/Scripts/settings/ufd.py @@ -59,7 +59,7 @@ BOOT_ENTRIES = { BOOT_FILES = { # Directory: extension '/arch/boot/syslinux': 'cfg', - '/boot/grub/': 'cfg', + '/boot/grub': 'cfg', '/EFI/boot': 'conf', } diff --git a/.bin/Scripts/system_setup.py b/.bin/Scripts/system_setup.py index 9e871f73..a8443935 100644 --- a/.bin/Scripts/system_setup.py +++ b/.bin/Scripts/system_setup.py @@ -47,85 +47,86 @@ OTHER_RESULTS = { SETUP_ACTIONS = OrderedDict({ # Install software 'Installing Programs': {'Info': True}, - 'VCR': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_vcredists, 'Just run': True,}, - 'ESET NOD32 AV': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_eset_nod32_av, 'If answer': 'ESET', 'KWArgs': {'msp': False},}, - 'LibreOffice': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_libreoffice, + 'VCR': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_vcredists, 'Just run': True,}, + 'ESET NOD32 AV': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_eset_nod32_av, 'If answer': 'ESET', 'KWArgs': {'msp': False},}, + 'LibreOffice': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_libreoffice, 'If answer': 'LibreOffice', 'KWArgs': {'quickstart': False, 'register_mso_types': True, 'use_mso_formats': True, 'vcredist': False}, }, - 'Ninite bundle': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_ninite_bundle, 'KWArgs': {'cs': 'STARTED'},}, + 'Ninite bundle': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_ninite_bundle, 'KWArgs': {'cs': 'STARTED'},}, # Browsers 'Scanning for browsers': {'Info': True}, - 'Scan': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': scan_for_browsers, 'Just run': True, 'KWArgs': {'skip_ie': True},}, + 'Scan': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': scan_for_browsers, 'Just run': True, 'KWArgs': {'skip_ie': True},}, 'Backing up browsers': {'Info': True}, - 'Backup browsers': {'New': False, 'Fab': True, 'Cur': True, 'HW': False, 'Function': backup_browsers, 'Just run': True,}, + 'Backup browsers': {'New': False, 'Dat': True, 'Cur': True, 'HW': False, 'Function': backup_browsers, 'Just run': True,}, # Install extensions 'Installing Extensions': {'Info': True}, - 'Classic Shell skin': {'New': True, 'Fab': True, 'Cur': False, 'HW': False, 'Function': install_classicstart_skin, 'Win10 only': True,}, - 'Chrome extensions': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_chrome_extensions,}, - 'Firefox extensions': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_firefox_extensions,}, + 'Classic Shell skin': {'New': True, 'Dat': True, 'Cur': False, 'HW': False, 'Function': install_classicstart_skin, 'Win10 only': True,}, + 'Chrome extensions': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_chrome_extensions,}, + 'Firefox extensions': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_firefox_extensions,}, # Configure software' 'Configuring Programs': {'Info': True}, - 'Browser add-ons': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': install_adblock, 'Just run': True, + 'Browser add-ons': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': install_adblock, 'Just run': True, 'Pause': 'Please enable uBlock Origin for all browsers', }, - 'Classic Start': {'New': True, 'Fab': True, 'Cur': False, 'HW': False, 'Function': config_classicstart, 'Win10 only': True,}, - 'Config Windows Updates': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': config_windows_updates, 'Win10 only': True,}, - 'Enable System Restore': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': enable_system_restore,}, - 'Create System Restore': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': create_system_restore_point,}, - 'Disable Fast Startup': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': disable_fast_startup, 'If answer': 'Fast-Hiber', 'Win10 only': True,}, - 'Disable telemetry': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': disable_windows_telemetry, 'Win10 only': True,}, - 'Enable BSoD mini dumps': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': enable_mini_dumps,}, - 'Enable Hibernation': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': enable_hibernation, 'If answer': 'Fast-Hiber', 'Win10 only': True,}, - 'Enable RegBack': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': enable_regback, 'Win10 only': True,}, - 'Enable Windows Updates': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': enable_windows_updates, 'KWArgs': {'silent': True},}, - 'Explorer (system)': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': config_explorer_system, 'Win10 only': True,}, - 'Explorer (user)': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': config_explorer_user, 'Win10 only': True,}, - 'Restart Explorer': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': restart_explorer,}, - 'Update Clock': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': update_clock,}, + 'Classic Start': {'New': True, 'Dat': True, 'Cur': False, 'HW': False, 'Function': config_classicstart, 'Win10 only': True,}, + 'Config Windows Updates': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': config_windows_updates, 'Win10 only': True,}, + 'Enable System Restore': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': enable_system_restore,}, + 'Create System Restore': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': create_system_restore_point,}, + 'Disable Fast Startup': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': disable_fast_startup, 'If answer': 'Fast-Hiber', 'Win10 only': True,}, + 'Disable telemetry': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': disable_windows_telemetry, 'Win10 only': True,}, + 'Enable BSoD mini dumps': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': enable_mini_dumps,}, + 'Enable Hibernation': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': enable_hibernation, 'If answer': 'Fast-Hiber', 'Win10 only': True,}, + 'Enable RegBack': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': enable_regback, 'Win10 only': True,}, + 'Enable Windows Updates': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': enable_windows_updates, 'KWArgs': {'silent': True},}, + 'Explorer (system)': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': config_explorer_system, 'Win10 only': True,}, + 'Explorer (user)': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': config_explorer_user, 'Win10 only': True,}, + 'Restart Explorer': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': restart_explorer,}, + 'Update Clock': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': update_clock,}, # Cleanup 'Cleaning up': {'Info': True}, - 'AdwCleaner': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': cleanup_adwcleaner,}, - 'd7II': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': cleanup_d7ii,}, - 'Desktop': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': cleanup_desktop,}, - 'Emsisoft s2cmd': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': cleanup_emsisoft,}, - 'Registry Backup(s)': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': cleanup_regbackups,}, - 'KIT_NAME_FULL': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': delete_empty_folders,}, + 'AdwCleaner': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': cleanup_adwcleaner,}, + 'd7II': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': cleanup_d7ii,}, + 'Desktop': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': cleanup_desktop,}, + 'Emsisoft s2cmd': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': cleanup_emsisoft,}, + 'Registry Backup(s)': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': cleanup_regbackups,}, + 'Restore default UAC': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': restore_default_uac,}, + 'KIT_NAME_FULL': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': delete_empty_folders,}, # System Info 'Exporting system info': {'Info': True}, - 'AIDA64 Report': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': run_aida64,}, - 'File listing': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': backup_file_list,}, - 'Power plans': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': backup_power_plans,}, - 'Product Keys': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': run_produkey,}, - 'Registry': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': backup_registry,}, + 'AIDA64 Report': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': run_aida64,}, + 'File listing': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': backup_file_list,}, + 'Power plans': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': backup_power_plans,}, + 'Product Keys': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': run_produkey,}, + 'Registry': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': backup_registry,}, # Show Summary 'Summary': {'Info': True}, - 'Operating System': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_os_name, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'Activation': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_os_activation, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'BIOS Activation': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': activate_with_bios, 'If not activated': True,}, - 'Secure Boot': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': check_secure_boot_status, 'KWArgs': {'show_alert': False},}, - 'Installed RAM': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_installed_ram, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'Temp size': {'New': False, 'Fab': False, 'Cur': True, 'HW': False, 'Function': show_temp_files_size, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, - 'Show free space': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': show_free_space, 'Just run': True,}, - 'Installed AV': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': get_installed_antivirus, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, - 'Installed Office': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': get_installed_office, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, - 'Partitions 4K aligned': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': check_4k_alignment, 'KWArgs': {'cs': 'TRUE', 'ns': 'FALSE'},}, + 'Operating System': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_os_name, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'Activation': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_os_activation, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'BIOS Activation': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': activate_with_bios, 'If not activated': True,}, + 'Secure Boot': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': check_secure_boot_status, 'KWArgs': {'show_alert': False},}, + 'Installed RAM': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_installed_ram, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'Temp size': {'New': False, 'Dat': False, 'Cur': True, 'HW': False, 'Function': show_temp_files_size, 'KWArgs': {'ns': 'UNKNOWN', 'silent_function': False},}, + 'Show free space': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': show_free_space, 'Just run': True,}, + 'Installed AV': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': get_installed_antivirus, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, + 'Installed Office': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': get_installed_office, 'KWArgs': {'ns': 'UNKNOWN', 'print_return': True},}, + 'Partitions 4K aligned': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': check_4k_alignment, 'KWArgs': {'cs': 'TRUE', 'ns': 'FALSE'},}, # Open things 'Opening Programs': {'Info': True}, - 'Device Manager': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': open_device_manager, 'KWArgs': {'cs': 'STARTED'},}, - 'HWiNFO sensors': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': run_hwinfo_sensors, 'KWArgs': {'cs': 'STARTED'},}, - 'Snappy': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': open_snappy_driver_origin, 'KWArgs': {'cs': 'STARTED'},}, - 'Speed test': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': open_speedtest, 'KWArgs': {'cs': 'STARTED'},}, - 'Windows Updates': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': open_windows_updates, 'KWArgs': {'cs': 'STARTED'},}, - 'Windows Activation': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Function': open_windows_activation, 'If not activated': True, 'KWArgs': {'cs': 'STARTED'},}, - 'Sleep': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': sleep, 'Just run': True, 'KWArgs': {'seconds': 3},}, - 'XMPlay': {'New': True, 'Fab': True, 'Cur': True, 'HW': True, 'Function': run_xmplay, 'KWArgs': {'cs': 'STARTED'},}, + 'Device Manager': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': open_device_manager, 'KWArgs': {'cs': 'STARTED'},}, + 'HWiNFO sensors': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': run_hwinfo_sensors, 'KWArgs': {'cs': 'STARTED'},}, + 'Snappy': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': open_snappy_driver_origin, 'KWArgs': {'cs': 'STARTED'},}, + 'Speed test': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': open_speedtest, 'KWArgs': {'cs': 'STARTED'},}, + 'Windows Updates': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': open_windows_updates, 'KWArgs': {'cs': 'STARTED'},}, + 'Windows Activation': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Function': open_windows_activation, 'If not activated': True, 'KWArgs': {'cs': 'STARTED'},}, + 'Sleep': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': sleep, 'Just run': True, 'KWArgs': {'seconds': 3},}, + 'XMPlay': {'New': True, 'Dat': True, 'Cur': True, 'HW': True, 'Function': run_xmplay, 'KWArgs': {'cs': 'STARTED'},}, }) SETUP_ACTION_KEYS = ( 'Function', @@ -137,19 +138,19 @@ SETUP_ACTION_KEYS = ( ) SETUP_QUESTIONS = { # AV - 'ESET': {'New': None, 'Fab': None, 'Cur': None, 'HW': False}, - 'MSE': {'New': None, 'Fab': None, 'Cur': None, 'HW': False, 'Ninite': True}, + 'ESET': {'New': None, 'Dat': None, 'Cur': None, 'HW': False}, + 'MSE': {'New': None, 'Dat': None, 'Cur': None, 'HW': False, 'Ninite': True}, # Fast Startup / Hibernation - 'Fast-Hiber': {'New': None, 'Fab': None, 'Cur': None, 'HW': False}, + 'Fast-Hiber': {'New': None, 'Dat': None, 'Cur': None, 'HW': False}, # LibreOffice - 'LibreOffice': {'New': None, 'Fab': None, 'Cur': None, 'HW': False, 'Ninite': True}, + 'LibreOffice': {'New': None, 'Dat': None, 'Cur': None, 'HW': False, 'Ninite': True}, # Ninite - 'Base': {'New': True, 'Fab': True, 'Cur': True, 'HW': False, 'Ninite': True}, - 'Missing': {'New': False, 'Fab': True, 'Cur': False, 'HW': False, 'Ninite': True}, - 'Standard': {'New': True, 'Fab': True, 'Cur': False, 'HW': False, 'Ninite': True}, + 'Base': {'New': True, 'Dat': True, 'Cur': True, 'HW': False, 'Ninite': True}, + 'Missing': {'New': False, 'Dat': True, 'Cur': False, 'HW': False, 'Ninite': True}, + 'Standard': {'New': True, 'Dat': True, 'Cur': False, 'HW': False, 'Ninite': True}, } # pylint: enable=bad-whitespace,line-too-long @@ -287,7 +288,7 @@ def get_mode(): setup_mode = None mode_options = [ {'Name': 'New', 'Display Name': 'New / Clean install (no data)'}, - {'Name': 'Fab', 'Display Name': 'Clean install with data migration'}, + {'Name': 'Dat', 'Display Name': 'Clean install with data migration'}, {'Name': 'Cur', 'Display Name': 'Original OS (post-d7II or overinstall)'}, {'Name': 'HW', 'Display Name': 'Hardware service (i.e. no software work)'}, ] diff --git a/.bin/Scripts/update_kit.py b/.bin/Scripts/update_kit.py index 086535a4..4ac91ffb 100644 --- a/.bin/Scripts/update_kit.py +++ b/.bin/Scripts/update_kit.py @@ -93,6 +93,7 @@ if __name__ == '__main__': # Uninstallers print_info(' Uninstallers') + try_and_print(message='ESET AV Remover...', function=update_eset_av_remover, other_results=other_results, width=40) try_and_print(message='IObit Uninstaller...', function=update_iobit_uninstaller, other_results=other_results, width=40) ## Review ## diff --git a/.bin/d7ii/3rd Party Tools/CreateRestorePoint.cmd b/.bin/d7ii/3rd Party Tools/CreateRestorePoint.cmd new file mode 100644 index 00000000..e89f24b3 --- /dev/null +++ b/.bin/d7ii/3rd Party Tools/CreateRestorePoint.cmd @@ -0,0 +1,11 @@ +@echo off + +setlocal + +rem Enable System Restore +PowerShell -Command Enable-ComputerRestore -Drive %SYSTEMDRIVE%\ + +rem Create Restore Point +PowerShell -Command Checkpoint-Computer -Description 1201-d7II + +endlocal \ No newline at end of file diff --git a/.bin/d7ii/Config/AltText.ini b/.bin/d7ii/Config/AltText.ini index 0ce2c640..c46df099 100644 --- a/.bin/d7ii/Config/AltText.ini +++ b/.bin/d7ii/Config/AltText.ini @@ -5,7 +5,7 @@ Autoruns (Verify and Log)=Manages Startup Items Google Chrome Software Removal Tool=Remove add-ons, extensions, toolbars, and other software that may interfere with the operation of Google Chrome. VipreRescueScanner (Deep Scan)=Virus scanner (Designed for both the Malware Removal and the Offline Operations tab) VipreRescueScanner (Quick Scan)=Virus scanner (Designed for both the Malware Removal and the Offline Operations tab) -=Python Check +=Create Restore Point [ReportDesc] Autoruns=Examined Windows startup items and removed unnecessary entries. Autoruns_Copy=Examined Windows startup items and removed unnecessary entries. @@ -36,4 +36,4 @@ VipreRescueScanner (Quick Scan)=Ran virus scans (Vipre) 22=Repaired the Windows Update services responsible for Windows Update functionality. 38=Performed repair routines to ensure the Winsock is operating properly. 83=Examined internet speed/bandwidth. -=Python compatibility check +=Create Restore Point diff --git a/.bin/d7ii/Config/AppOverrides.ini b/.bin/d7ii/Config/AppOverrides.ini index 2d55f1f7..0e07e944 100644 --- a/.bin/d7ii/Config/AppOverrides.ini +++ b/.bin/d7ii/Config/AppOverrides.ini @@ -36,7 +36,7 @@ EmailBeforeExecution=0 PriorAlert=0 [] PostRunApp= -AlwaysAttemptDownload=1 -DLafterXdays=.5 +AlwaysAttemptDownload=0 +DLafterXdays=5 EmailBeforeExecution=0 PriorAlert=0 diff --git a/.bin/d7ii/Config/Profiles/Default.cfg b/.bin/d7ii/Config/Profiles/Default.cfg index ba51d4e8..e4dc26d6 100644 --- a/.bin/d7ii/Config/Profiles/Default.cfg +++ b/.bin/d7ii/Config/Profiles/Default.cfg @@ -782,7 +782,7 @@ WizardKit System Diagnostics=1 1=1 RKill (Auto)=1 Disable Windows Updates=1 -Python Check=1 +Create Restore Point=1 [Malware3] ComboFix=0 ComboFix (Uninstall)=0 diff --git a/.bin/d7ii/Config/SortOrder/MalwareBox2.cfg b/.bin/d7ii/Config/SortOrder/MalwareBox2.cfg index f26c90a5..ef117ee8 100644 --- a/.bin/d7ii/Config/SortOrder/MalwareBox2.cfg +++ b/.bin/d7ii/Config/SortOrder/MalwareBox2.cfg @@ -1 +1 @@ -Python Check|Disable Windows Updates|98|RKill (Auto)|Kaspersky TDSSKiller (Silent)|WizardKit System Diagnostics|34|Emsisoft a2cmd Deep Scan|HitmanPro|1|98| +Create Restore Point|Disable Windows Updates|98|RKill (Auto)|Kaspersky TDSSKiller (Silent)|WizardKit System Diagnostics|34|Emsisoft a2cmd Deep Scan|HitmanPro|1|98| diff --git a/.linux_items/include/airootfs/etc/motd b/.linux_items/include/airootfs/etc/motd index c84d47a0..2a0a183b 100644 --- a/.linux_items/include/airootfs/etc/motd +++ b/.linux_items/include/airootfs/etc/motd @@ -1,9 +1,2 @@ -Welcome to the [32m______[0m - -Some common commands: -[34m%[0m hw-diags -[34m%[0m hw-info -[34m%[0m mount-all-volumes -[34m%[0m mount-backup-shares -[34m%[0m connect-to-network +[2J[HWelcome to the [32m______[0m diff --git a/.linux_items/include/airootfs/etc/skel/.update_network b/.linux_items/include/airootfs/etc/skel/.update_network index fb3ec990..6939afac 100755 --- a/.linux_items/include/airootfs/etc/skel/.update_network +++ b/.linux_items/include/airootfs/etc/skel/.update_network @@ -3,9 +3,12 @@ ## Setup network and update hostname # Wait for WiFi -sleep 1s +echo -n "Waiting for network... " +sleep 3s +echo "Done" # Set hostname +echo -n "Updating hostname... " IP="$(ip a show scope global \ | grep inet \ | head -1 \ @@ -19,4 +22,5 @@ fi if [[ "${NEW_HOSTNAME:+x}" ]]; then sudo hostnamectl set-hostname "${NEW_HOSTNAME}" fi +echo "Done" diff --git a/.linux_items/include_x/airootfs/etc/skel/.Xauthority b/.linux_items/include_x/airootfs/etc/skel/.Xauthority new file mode 100644 index 00000000..e69de29b diff --git a/.linux_items/include_x/airootfs/etc/skel/.config/i3/config b/.linux_items/include_x/airootfs/etc/skel/.config/i3/config index 102b50f5..d98d2f78 100644 --- a/.linux_items/include_x/airootfs/etc/skel/.config/i3/config +++ b/.linux_items/include_x/airootfs/etc/skel/.config/i3/config @@ -68,12 +68,13 @@ bindsym Mod1+F4 kill bindsym $mod+r exec "rofi -combi-modi window,drun,run -show combi -modi combi" # misc app shortcuts +bindsym $mod+c exec "urxvt -title 'WKClone (ddrescue-tui)' -e ddrescue-tui clone" bindsym $mod+d exec "urxvt -title 'Hardware Diagnostics' -e hw-diags" bindsym $mod+f exec "thunar ~" bindsym $mod+i exec "hardinfo" bindsym $mod+m exec "urxvt -title 'Mount All Volumes' -e mount-all-volumes gui" bindsym $mod+s exec "urxvt -title 'Hardware Diagnostics' -e hw-diags --quick" -bindsym $mod+t exec "urxvt -e zsh -c 'tmux new-session -A -t general; zsh'" +bindsym $mod+t exec "urxvt" bindsym $mod+v exec "urxvt -title 'Hardware Sensors' -e watch -c -n1 -t hw-sensors" bindsym $mod+w exec "firefox" @@ -320,4 +321,4 @@ bar { height 26 } -exec --no-startup-id /home/tech/.update_x +exec urxvt -title "Initializing..." -e /home/tech/.update_x diff --git a/.linux_items/include_x/airootfs/etc/skel/.config/openbox/autostart b/.linux_items/include_x/airootfs/etc/skel/.config/openbox/autostart index 13b9088c..1f96ce36 100755 --- a/.linux_items/include_x/airootfs/etc/skel/.config/openbox/autostart +++ b/.linux_items/include_x/airootfs/etc/skel/.config/openbox/autostart @@ -1,3 +1,5 @@ #openbox-autostart -$HOME/.update_x & +/usr/bin/urxvt -title "Initializing..." -e "$HOME/.update_x" +"$HOME/.start_desktop_apps" & + diff --git a/.linux_items/include_x/airootfs/etc/skel/.config/openbox/rc.xml b/.linux_items/include_x/airootfs/etc/skel/.config/openbox/rc.xml index e563ec04..28e92da4 100644 --- a/.linux_items/include_x/airootfs/etc/skel/.config/openbox/rc.xml +++ b/.linux_items/include_x/airootfs/etc/skel/.config/openbox/rc.xml @@ -297,6 +297,11 @@
+