diff --git a/resources/wx_gui/gui_settings.py b/resources/wx_gui/gui_settings.py index 071275456..3322b0e6b 100644 --- a/resources/wx_gui/gui_settings.py +++ b/resources/wx_gui/gui_settings.py @@ -4,6 +4,7 @@ import pprint import logging import py_sip_xnu import subprocess +import os from pathlib import Path @@ -814,6 +815,9 @@ class SettingsFrame(wx.Frame): }, }, "Developer": { + "Validation": { + "type": "title", + }, "Install latest nightly build ๐Ÿงช": { "type": "button", "function": self.on_nightly, @@ -839,6 +843,28 @@ class SettingsFrame(wx.Frame): "Export constants.py values to a txt file.", ], }, + "Developer Root Volume Patching": { + "type": "title", + }, + "Mount Root Volume": { + "type": "button", + "function": self.on_mount_root_vol, + "description": [ + "Life's too short to type 'sudo mount -o", + "nobrowse -t apfs /dev/diskXsY", + "/System/Volumes/Update/mnt1' every time.", + ], + }, + "wrap_around 2": { + "type": "wrap_around", + }, + "Update Root Volume": { + "type": "button", + "function": self.on_bless_root_vol, + "description": [ + "Rebuild kernel cache and bless snapshot ๐Ÿ™", + ], + }, }, } @@ -1274,4 +1300,29 @@ Hardware Information: def on_test_exception(self, event: wx.Event) -> None: - raise Exception("Test Exception") \ No newline at end of file + raise Exception("Test Exception") + + def on_mount_root_vol(self, event: wx.Event) -> None: + if os.geteuid() != 0: + wx.MessageDialog(self.parent, "Please relaunch as Root to mount the Root Volume", "Error", wx.OK | wx.ICON_ERROR).ShowModal() + else: + from resources.sys_patch.sys_patch import PatchSysVolume + #Don't need to pass model as we're bypassing all logic + if PatchSysVolume("",self.constants)._mount_root_vol() == True: + wx.MessageDialog(self.parent, "Root Volume Mounted, remember to fix permissions before blessing ๐Ÿ™", "Success", wx.OK | wx.ICON_INFORMATION).ShowModal() + else: + wx.MessageDialog(self.parent, "Root Volume Mount Failed, check terminal output", "Error", wx.OK | wx.ICON_ERROR).ShowModal() + + def on_bless_root_vol(self, event: wx.Event) -> None: + if os.geteuid() != 0: + wx.MessageDialog(self.parent, "Please relaunch as Root to save changes", "Error", wx.OK | wx.ICON_ERROR).ShowModal() + else: + from resources.sys_patch.sys_patch import PatchSysVolume + #Don't need to pass model as we're bypassing all logic + if PatchSysVolume("",self.constants)._rebuild_kernel_collection() == True: + if PatchSysVolume("",self.constants)._create_new_apfs_snapshot() == True: + wx.MessageDialog(self.parent, "Root Volume Updated, please reboot to apply changes", "Success", wx.OK | wx.ICON_INFORMATION).ShowModal() + else: + wx.MessageDialog(self.parent, "Root Volume Bless Failed, check terminal output", "Error", wx.OK | wx.ICON_ERROR).ShowModal() + else: + wx.MessageDialog(self.parent, "KC Update Failed, check terminal output", "Error", wx.OK | wx.ICON_ERROR).ShowModal() \ No newline at end of file