mirror of
https://github.com/dortania/OpenCore-Legacy-Patcher.git
synced 2026-06-20 14:10:51 +10:00
GUI: Add SIP configuration
This commit is contained in:
+190
-183
@@ -1,10 +1,12 @@
|
|||||||
import wx
|
import wx
|
||||||
|
import wx.adv
|
||||||
import logging
|
import logging
|
||||||
|
import py_sip_xnu
|
||||||
|
|
||||||
from resources.wx_gui import gui_support
|
from resources.wx_gui import gui_support
|
||||||
|
|
||||||
from resources import constants, global_settings, defaults
|
from resources import constants, global_settings, defaults
|
||||||
from data import model_array
|
from data import model_array, sip_data
|
||||||
|
|
||||||
class SettingsFrame(wx.Frame):
|
class SettingsFrame(wx.Frame):
|
||||||
"""
|
"""
|
||||||
@@ -14,6 +16,8 @@ class SettingsFrame(wx.Frame):
|
|||||||
self.title: str = title
|
self.title: str = title
|
||||||
self.parent: wx.Frame = parent
|
self.parent: wx.Frame = parent
|
||||||
|
|
||||||
|
self.hyperlink_colour = (25, 179, 231)
|
||||||
|
|
||||||
self.settings = self._settings()
|
self.settings = self._settings()
|
||||||
|
|
||||||
self.frame_modal = wx.Dialog(parent, title=title, size=(600, 750))
|
self.frame_modal = wx.Dialog(parent, title=title, size=(600, 750))
|
||||||
@@ -44,7 +48,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
sizer.Add(model_choice, 0, wx.ALIGN_CENTER | wx.ALL, 5)
|
sizer.Add(model_choice, 0, wx.ALIGN_CENTER | wx.ALL, 5)
|
||||||
|
|
||||||
# Add label below Override Model
|
# Add label below Override Model
|
||||||
model_description = wx.StaticText(frame, label="Overrides system OCLP will build for.", pos=(-1, -1))
|
model_description = wx.StaticText(frame, label="Overrides Mac Model Patcher will build for.", pos=(-1, -1))
|
||||||
model_description.SetFont(wx.Font(11, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
model_description.SetFont(wx.Font(11, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
||||||
sizer.Add(model_description, 0, wx.ALIGN_CENTER | wx.ALL, 5)
|
sizer.Add(model_description, 0, wx.ALIGN_CENTER | wx.ALL, 5)
|
||||||
|
|
||||||
@@ -122,7 +126,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
|
|
||||||
if setting_info["type"] == "checkbox":
|
if setting_info["type"] == "checkbox":
|
||||||
# Add checkbox, and description underneath
|
# Add checkbox, and description underneath
|
||||||
checkbox = wx.CheckBox(panel, label=setting, pos=(10 + width, 10 + height), size = (200,-1))
|
checkbox = wx.CheckBox(panel, label=setting, pos=(10 + width, 10 + height), size = (300,-1))
|
||||||
checkbox.SetValue(setting_info["value"] if setting_info["value"] else False)
|
checkbox.SetValue(setting_info["value"] if setting_info["value"] else False)
|
||||||
checkbox.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
checkbox.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
||||||
event = lambda event, warning=setting_info["warning"] if "warning" in setting_info else "", override=bool(setting_info["override_function"]) if "override_function" in setting_info else False: self.on_checkbox(event, warning, override)
|
event = lambda event, warning=setting_info["warning"] if "warning" in setting_info else "", override=bool(setting_info["override_function"]) if "override_function" in setting_info else False: self.on_checkbox(event, warning, override)
|
||||||
@@ -157,7 +161,6 @@ class SettingsFrame(wx.Frame):
|
|||||||
def _settings(self):
|
def _settings(self):
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
|
|
||||||
"Build": {
|
"Build": {
|
||||||
"General": {
|
"General": {
|
||||||
"type": "title",
|
"type": "title",
|
||||||
@@ -168,7 +171,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
"variable": "firewire_boot",
|
"variable": "firewire_boot",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable booting macOS from",
|
"Enable booting macOS from",
|
||||||
"FireWire drives",
|
"FireWire drives.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"XHCI Booting": {
|
"XHCI Booting": {
|
||||||
@@ -177,7 +180,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
"variable": "xhci_boot",
|
"variable": "xhci_boot",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable booting macOS from add-in",
|
"Enable booting macOS from add-in",
|
||||||
"USB 3.0 expansion cards",
|
"USB 3.0 expansion cards.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"NVMe Booting": {
|
"NVMe Booting": {
|
||||||
@@ -186,9 +189,9 @@ class SettingsFrame(wx.Frame):
|
|||||||
"variable": "nvme_boot",
|
"variable": "nvme_boot",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable booting macOS from NVMe",
|
"Enable booting macOS from NVMe",
|
||||||
"drives",
|
"drives.",
|
||||||
"Note: Requires Firmware support",
|
"Note: Requires Firmware support",
|
||||||
"for OpenCore to load from NVMe",
|
"for OpenCore to load from NVMe.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"Wake on WLAN": {
|
"Wake on WLAN": {
|
||||||
@@ -196,10 +199,9 @@ class SettingsFrame(wx.Frame):
|
|||||||
"value": self.constants.enable_wake_on_wlan,
|
"value": self.constants.enable_wake_on_wlan,
|
||||||
"variable": "enable_wake_on_wlan",
|
"variable": "enable_wake_on_wlan",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable Wake on WLAN",
|
"Disabled by default due to",
|
||||||
"When enabled, macOS will be able to",
|
"performance degradation",
|
||||||
"wake from sleep using a Wireless",
|
"on some systems from wake.",
|
||||||
"Network connection.",
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"wrap_around 2": {
|
"wrap_around 2": {
|
||||||
@@ -210,7 +212,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
"value": self.constants.set_content_caching,
|
"value": self.constants.set_content_caching,
|
||||||
"variable": "set_content_caching",
|
"variable": "set_content_caching",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable Content Caching",
|
"Enable Content Caching.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"APFS Trim": {
|
"APFS Trim": {
|
||||||
@@ -219,7 +221,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
"variable": "apfs_trim_timeout",
|
"variable": "apfs_trim_timeout",
|
||||||
"description": [
|
"description": [
|
||||||
"Recommended for all users, however faulty",
|
"Recommended for all users, however faulty",
|
||||||
"SSDs benefit from disabling this.",
|
"SSDs may benefit from disabling this.",
|
||||||
],
|
],
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -232,7 +234,6 @@ class SettingsFrame(wx.Frame):
|
|||||||
"When disabled, users can hold ESC to",
|
"When disabled, users can hold ESC to",
|
||||||
"show picker in the firmware.",
|
"show picker in the firmware.",
|
||||||
],
|
],
|
||||||
|
|
||||||
},
|
},
|
||||||
"Boot Picker Timeout": {
|
"Boot Picker Timeout": {
|
||||||
"type": "spinctrl",
|
"type": "spinctrl",
|
||||||
@@ -241,7 +242,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
"description": [
|
"description": [
|
||||||
"Timeout for OpenCore boot picker",
|
"Timeout for OpenCore boot picker",
|
||||||
"in seconds.",
|
"in seconds.",
|
||||||
"Set to 0 for no timeout",
|
"Set to 0 for no timeout.",
|
||||||
],
|
],
|
||||||
|
|
||||||
"min": 0,
|
"min": 0,
|
||||||
@@ -256,7 +257,7 @@ class SettingsFrame(wx.Frame):
|
|||||||
"value": self.constants.verbose_debug,
|
"value": self.constants.verbose_debug,
|
||||||
"variable": "verbose_debug",
|
"variable": "verbose_debug",
|
||||||
"description": [
|
"description": [
|
||||||
"Verbose output during boot",
|
"Verbose output during boot.",
|
||||||
],
|
],
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -282,36 +283,6 @@ class SettingsFrame(wx.Frame):
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"Security": {
|
|
||||||
"Disable Library Validation": {
|
|
||||||
"type": "checkbox",
|
|
||||||
"value": self.constants.disable_cs_lv,
|
|
||||||
"variable": "disable_cs_lv",
|
|
||||||
"description": [
|
|
||||||
"Required for root volume patching,",
|
|
||||||
"allowing our custom frameworks to",
|
|
||||||
"load.",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
"Disable AMFI": {
|
|
||||||
"type": "checkbox",
|
|
||||||
"value": self.constants.disable_amfi,
|
|
||||||
"variable": "disable_amfi",
|
|
||||||
"description": [
|
|
||||||
"Extended version of 'Disable",
|
|
||||||
"Library Validation', required for",
|
|
||||||
"patching macOS.",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
"Secure Boot Model": {
|
|
||||||
"type": "checkbox",
|
|
||||||
"value": self.constants.secure_status,
|
|
||||||
"variable": "secure_status",
|
|
||||||
"description": [
|
|
||||||
"Enable SecureBootModel",
|
|
||||||
],
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Advanced": {
|
"Advanced": {
|
||||||
"AMD GOP Injection": {
|
"AMD GOP Injection": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
@@ -336,33 +307,33 @@ class SettingsFrame(wx.Frame):
|
|||||||
"value": self.constants.disable_fw_throttle,
|
"value": self.constants.disable_fw_throttle,
|
||||||
"variable": "disable_fw_throttle",
|
"variable": "disable_fw_throttle",
|
||||||
"description": [
|
"description": [
|
||||||
"Disables firmware based throttling",
|
"Disables firmware-based throttling",
|
||||||
"caused by missing hardware.",
|
"caused by missing hardware.",
|
||||||
"ex. Missing Display, Battery, etc.",
|
"Ex. Missing Display, Battery, etc.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
"wrap_around 1": {
|
||||||
|
"type": "wrap_around",
|
||||||
|
},
|
||||||
"Software DeMUX": {
|
"Software DeMUX": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"value": self.constants.software_demux,
|
"value": self.constants.software_demux,
|
||||||
"variable": "software_demux",
|
"variable": "software_demux",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable software based DeMUX",
|
"Enable software based DeMUX",
|
||||||
"for MacBookPro8,2 and MacBookPro8,3",
|
"for MacBookPro8,2 and MacBookPro8,3.",
|
||||||
"Prevents faulty dGPU from turning on",
|
"Prevents faulty dGPU from turning on.",
|
||||||
|
"Note: Requires associated NVRAM arg:",
|
||||||
|
"'gpu-power-prefs'.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"wrap_around 1": {
|
|
||||||
"type": "wrap_around",
|
|
||||||
},
|
|
||||||
"3rd Party NVMe PM": {
|
"3rd Party NVMe PM": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"value": self.constants.allow_nvme_fixing,
|
"value": self.constants.allow_nvme_fixing,
|
||||||
"variable": "allow_nvme_fixing",
|
"variable": "allow_nvme_fixing",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable 3rd party NVMe power",
|
"Enable 3rd party NVMe power",
|
||||||
"management. When enabled, macOS",
|
"management in macOS.",
|
||||||
"will be able to control the power",
|
|
||||||
"management of NVMe drives.",
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
"3rd Party SATA PM": {
|
"3rd Party SATA PM": {
|
||||||
@@ -371,13 +342,83 @@ class SettingsFrame(wx.Frame):
|
|||||||
"variable": "allow_3rd_party_drives",
|
"variable": "allow_3rd_party_drives",
|
||||||
"description": [
|
"description": [
|
||||||
"Enable 3rd party SATA power",
|
"Enable 3rd party SATA power",
|
||||||
"management. When enabled, macOS",
|
"management in macOS.",
|
||||||
"will be able to control the power",
|
],
|
||||||
"management of SATA drives.",
|
},
|
||||||
|
},
|
||||||
|
"Security": {
|
||||||
|
"Kernel Security": {
|
||||||
|
"type": "title",
|
||||||
|
},
|
||||||
|
"Disable Library Validation": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"value": self.constants.disable_cs_lv,
|
||||||
|
"variable": "disable_cs_lv",
|
||||||
|
"description": [
|
||||||
|
"Required for loading modified",
|
||||||
|
"system files from root patching.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"Disable AMFI": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"value": self.constants.disable_amfi,
|
||||||
|
"variable": "disable_amfi",
|
||||||
|
"description": [
|
||||||
|
"Extended version of 'Disable",
|
||||||
|
"Library Validation', required",
|
||||||
|
"for systems with deeper",
|
||||||
|
"root patches.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"wrap_around 1": {
|
||||||
|
"type": "wrap_around",
|
||||||
|
},
|
||||||
|
"Secure Boot Model": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"value": self.constants.secure_status,
|
||||||
|
"variable": "secure_status",
|
||||||
|
"description": [
|
||||||
|
"Enable SecureBootModel",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"System Integrity Protection": {
|
||||||
|
"type": "title",
|
||||||
|
},
|
||||||
|
"Populate SIP": {
|
||||||
|
"type": "populate",
|
||||||
|
"function": self._populate_sip_settings,
|
||||||
|
"args": wx.Frame,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"Root Patching": {
|
||||||
|
"TeraScale 2 Acceleration": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"value": global_settings.GlobalEnviromentSettings().read_property("MacBookPro_TeraScale_2_Accel"),
|
||||||
|
"variable": "MacBookPro_TeraScale_2_Accel",
|
||||||
|
"constants_variable": "allow_ts2_accel",
|
||||||
|
"description": [
|
||||||
|
"Enable AMD TeraScale 2 GPU",
|
||||||
|
"Acceleration on MacBookPro8,2 and",
|
||||||
|
"MacBookPro8,3.",
|
||||||
|
"By default this is disabled due to",
|
||||||
|
"common GPU failures on these models.",
|
||||||
|
],
|
||||||
|
},
|
||||||
|
"wrap_around 1": {
|
||||||
|
"type": "wrap_around",
|
||||||
|
},
|
||||||
|
"Disable ColorSync Downgrade": {
|
||||||
|
"type": "checkbox",
|
||||||
|
"value": global_settings.GlobalEnviromentSettings().read_property("Disable_ColorSync_Downgrade"),
|
||||||
|
"variable": "Disable_ColorSync_Downgrade",
|
||||||
|
"constants_variable": "disable_cat_colorsync",
|
||||||
|
"description": [
|
||||||
|
"Disable ColorSync downgrade",
|
||||||
|
"on HD3000 GPUs in Ventura and newer.",
|
||||||
|
"Note: Disabling can cause UI corruption.",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
"Root Patching": {},
|
|
||||||
"Non-Metal": {},
|
"Non-Metal": {},
|
||||||
"App": {
|
"App": {
|
||||||
"Allow native models": {
|
"Allow native models": {
|
||||||
@@ -395,13 +436,13 @@ class SettingsFrame(wx.Frame):
|
|||||||
},
|
},
|
||||||
"Ignore App Updates": {
|
"Ignore App Updates": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"value": self.constants.ignore_updates,
|
"value": global_settings.GlobalEnviromentSettings().read_property("IgnoreAppUpdates"),
|
||||||
"variable": "ignore_updates",
|
"variable": "IgnoreAppUpdates",
|
||||||
|
"constants_variable": "ignore_updates",
|
||||||
"description": [
|
"description": [
|
||||||
"Ignore app updates",
|
"Ignore app updates",
|
||||||
"When enabled, the app will not",
|
|
||||||
"check for updates.",
|
|
||||||
],
|
],
|
||||||
|
"override_function": self._update_global_settings,
|
||||||
},
|
},
|
||||||
"wrap_around 1": {
|
"wrap_around 1": {
|
||||||
"type": "wrap_around",
|
"type": "wrap_around",
|
||||||
@@ -411,21 +452,22 @@ class SettingsFrame(wx.Frame):
|
|||||||
"value": global_settings.GlobalEnviromentSettings().read_property("DisableCrashAndAnalyticsReporting"),
|
"value": global_settings.GlobalEnviromentSettings().read_property("DisableCrashAndAnalyticsReporting"),
|
||||||
"variable": "DisableCrashAndAnalyticsReporting",
|
"variable": "DisableCrashAndAnalyticsReporting",
|
||||||
"description": [
|
"description": [
|
||||||
"Disable crash and system reporting",
|
"When enabled, patcher will not",
|
||||||
"When enabled, the app will not",
|
|
||||||
"report any info to Dortania.",
|
"report any info to Dortania.",
|
||||||
],
|
],
|
||||||
"override_function": global_settings.GlobalEnviromentSettings().write_property,
|
"override_function": self._update_global_settings,
|
||||||
},
|
},
|
||||||
"Disable Unused KDKs": {
|
"Disable Unused KDKs": {
|
||||||
"type": "checkbox",
|
"type": "checkbox",
|
||||||
"value": self.constants.should_nuke_kdks,
|
"value": global_settings.GlobalEnviromentSettings().read_property("ShouldNukeKDKs"),
|
||||||
"variable": "should_nuke_kdks",
|
"variable": "ShouldNukeKDKs",
|
||||||
|
"constants_variable": "should_nuke_kdks",
|
||||||
"description": [
|
"description": [
|
||||||
"Disable unused KDKs",
|
|
||||||
"When enabled, the app will remove",
|
"When enabled, the app will remove",
|
||||||
"unused KDKs from the system.",
|
"unused KDKs from the system during",
|
||||||
|
"root patching.",
|
||||||
],
|
],
|
||||||
|
"override_function": self._update_global_settings,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -461,129 +503,64 @@ class SettingsFrame(wx.Frame):
|
|||||||
|
|
||||||
def _populate_sip_settings(self, panel: wx.Frame) -> None:
|
def _populate_sip_settings(self, panel: wx.Frame) -> None:
|
||||||
|
|
||||||
spacer = 280
|
horizontal_spacer = 250
|
||||||
|
|
||||||
|
# Look for title on frame
|
||||||
|
sip_title: wx.StaticText = None
|
||||||
|
for child in panel.GetChildren():
|
||||||
|
if child.GetLabel() == "System Integrity Protection":
|
||||||
|
sip_title = child
|
||||||
|
break
|
||||||
|
|
||||||
# Title: System Integrity Protection
|
|
||||||
sip_title = wx.StaticText(panel, label="System Integrity Protection", pos=(-1, 10 + spacer))
|
|
||||||
sip_title.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
|
||||||
|
|
||||||
# Label: Flip individual bits corresponding to XNU's csr.h
|
# Label: Flip individual bits corresponding to XNU's csr.h
|
||||||
# If you're unfamiliar with how SIP works, do not touch this menu
|
# If you're unfamiliar with how SIP works, do not touch this menu
|
||||||
sip_label = wx.StaticText(panel, label="Flip individual bits corresponding to", pos=(-1, sip_title.GetSize()[1] + 20 + spacer))
|
sip_label = wx.StaticText(panel, label="Flip individual bits corresponding to", pos=(sip_title.GetPosition()[0] - 20
|
||||||
|
, sip_title.GetPosition()[1] + 30))
|
||||||
sip_label.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
sip_label.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
||||||
|
|
||||||
# Hyperlink: csr.h
|
# Hyperlink: csr.h
|
||||||
sip_csr_h = wx.adv.HyperlinkCtrl(panel, id=wx.ID_ANY, label="XNU's csr.h", url="https://opensource.apple.com/source/xnu/xnu-6153.141.1/bsd/sys/csr.h.auto.html", pos=(-1, sip_title.GetSize()[1] + 40 + spacer))
|
sip_csr_h = wx.adv.HyperlinkCtrl(panel, id=wx.ID_ANY, label="XNU's csr.h", url="https://github.com/apple-oss-distributions/xnu/blob/xnu-8020.101.4/bsd/sys/csr.h", pos=(sip_label.GetPosition()[0] + sip_label.GetSize()[0] + 5, sip_label.GetPosition()[1] + 1))
|
||||||
sip_csr_h.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
sip_csr_h.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
||||||
|
sip_csr_h.SetHoverColour(self.hyperlink_colour)
|
||||||
# Label: If you're unfamiliar with how SIP works, do not touch this menu
|
sip_csr_h.SetNormalColour(self.hyperlink_colour)
|
||||||
sip_description = wx.StaticText(panel, label="If you're unfamiliar with how SIP works, do not touch this menu", pos=(-1, sip_title.GetSize()[1] + 60 + spacer))
|
sip_csr_h.SetVisitedColour(self.hyperlink_colour)
|
||||||
sip_description.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
|
||||||
|
|
||||||
# Label: SIP Status
|
# Label: SIP Status
|
||||||
sip_status = wx.StaticText(panel, label="SIP Status", pos=(-1, sip_title.GetSize()[1] + 100 + spacer))
|
if self.constants.custom_sip_value is not None:
|
||||||
sip_status.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
self.sip_value = int(self.constants.custom_sip_value, 16)
|
||||||
|
elif self.constants.sip_status is True:
|
||||||
|
self.sip_value = 0x00
|
||||||
|
else:
|
||||||
|
self.sip_value = 0x803
|
||||||
|
sip_configured_label = wx.StaticText(panel, label=f"Currently configured SIP: {hex(self.sip_value)}", pos=(sip_label.GetPosition()[0] + 35, sip_label.GetPosition()[1] + 20))
|
||||||
|
sip_configured_label.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
||||||
|
self.sip_configured_label = sip_configured_label
|
||||||
|
|
||||||
# Label: SIP Status Description
|
# Label: SIP Status
|
||||||
sip_status_description = wx.StaticText(panel, label="Displays the current status of SIP", pos=(-1, sip_title.GetSize()[1] + 120 + spacer))
|
sip_booted_label = wx.StaticText(panel, label=f"Currently booted SIP: {hex(py_sip_xnu.SipXnu().get_sip_status().value)}", pos=(sip_configured_label.GetPosition()[0] + 34
|
||||||
|
, sip_configured_label.GetPosition()[1] + 20))
|
||||||
|
sip_booted_label.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
||||||
|
|
||||||
# self.configure_sip_title = wx.StaticText(self.frame_modal, label="Configure SIP", pos=wx.Point(10, 10))
|
|
||||||
# self.configure_sip_title.SetFont(wx.Font(19, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
|
||||||
# self.configure_sip_title.Center(wx.HORIZONTAL)
|
|
||||||
|
|
||||||
# # Label: Flip individual bits corresponding to XNU's csr.h
|
# SIP toggles
|
||||||
# # If you're unfamiliar with how SIP works, do not touch this menu
|
entries_per_row = len(sip_data.system_integrity_protection.csr_values) // 2
|
||||||
# self.sip_label = wx.StaticText(self.frame_modal, label="Flip individual bits corresponding to")
|
horizontal_spacer = 15
|
||||||
# self.sip_label.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
vertical_spacer = 25
|
||||||
# self.sip_label.SetPosition(
|
index = 0
|
||||||
# wx.Point(-1, self.configure_sip_title.GetPosition().y + self.configure_sip_title.GetSize().height + 10)
|
for sip_bit in sip_data.system_integrity_protection.csr_values_extended:
|
||||||
# )
|
self.sip_checkbox = wx.CheckBox(panel, label=sip_data.system_integrity_protection.csr_values_extended[sip_bit]["name"].split("CSR_")[1], pos = (vertical_spacer, sip_booted_label.GetPosition()[1] + 20 + horizontal_spacer))
|
||||||
# self.sip_label.Center(wx.HORIZONTAL)
|
self.sip_checkbox.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
||||||
# self.sip_label.SetPosition(
|
self.sip_checkbox.SetToolTip(f'Description: {sip_data.system_integrity_protection.csr_values_extended[sip_bit]["description"]}\nValue: {hex(sip_data.system_integrity_protection.csr_values_extended[sip_bit]["value"])}\nIntroduced in: macOS {sip_data.system_integrity_protection.csr_values_extended[sip_bit]["introduced_friendly"]}')
|
||||||
# wx.Point(self.sip_label.GetPosition().x - 25, -1)
|
if self.sip_value & sip_data.system_integrity_protection.csr_values_extended[sip_bit]["value"] == sip_data.system_integrity_protection.csr_values_extended[sip_bit]["value"]:
|
||||||
# )
|
self.sip_checkbox.SetValue(True)
|
||||||
|
horizontal_spacer += 20
|
||||||
|
index += 1
|
||||||
|
if index == entries_per_row:
|
||||||
|
horizontal_spacer = 20
|
||||||
|
vertical_spacer += 250
|
||||||
|
|
||||||
# hyperlink_label = hyperlink.HyperLinkCtrl(
|
self.sip_checkbox.Bind(wx.EVT_CHECKBOX, self.on_sip_value)
|
||||||
# self.frame_modal,
|
|
||||||
# -1,
|
|
||||||
# "XNU's csr.h",
|
|
||||||
# pos=(self.sip_label.GetPosition().x + self.sip_label.GetSize().width, self.sip_label.GetPosition().y),
|
|
||||||
# URL="https://github.com/apple/darwin-xnu/blob/main/bsd/sys/csr.h",
|
|
||||||
# )
|
|
||||||
# hyperlink_label.SetForegroundColour(self.hyperlink_colour)
|
|
||||||
# hyperlink_label.SetColours(
|
|
||||||
# link=self.hyperlink_colour,
|
|
||||||
# visited=self.hyperlink_colour,
|
|
||||||
# rollover=self.hyperlink_colour,
|
|
||||||
# )
|
|
||||||
|
|
||||||
# if self.constants.custom_sip_value is not None:
|
|
||||||
# self.sip_value = int(self.constants.custom_sip_value, 16)
|
|
||||||
# elif self.constants.sip_status is True:
|
|
||||||
# self.sip_value = 0x00
|
|
||||||
# else:
|
|
||||||
# self.sip_value = 0x803
|
|
||||||
|
|
||||||
# self.sip_label_2 = wx.StaticText(self.frame_modal, label=f"Currently configured SIP: {hex(self.sip_value)}")
|
|
||||||
# self.sip_label_2.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD, False, ".AppleSystemUIFont"))
|
|
||||||
# self.sip_label_2.SetPosition(
|
|
||||||
# wx.Point(self.sip_label.GetPosition().x, self.sip_label.GetPosition().y + self.sip_label.GetSize().height + 10)
|
|
||||||
# )
|
|
||||||
# self.sip_label_2.Center(wx.HORIZONTAL)
|
|
||||||
|
|
||||||
# self.sip_label_2_2 = wx.StaticText(self.frame_modal, label=f"Currently Booted SIP: {hex(py_sip_xnu.SipXnu().get_sip_status().value)}")
|
|
||||||
# self.sip_label_2_2.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
|
||||||
# self.sip_label_2_2.SetPosition(
|
|
||||||
# wx.Point(self.sip_label_2.GetPosition().x, self.sip_label_2.GetPosition().y + self.sip_label_2.GetSize().height + 5)
|
|
||||||
# )
|
|
||||||
# self.sip_label_2_2.Center(wx.HORIZONTAL)
|
|
||||||
|
|
||||||
# self.sip_label_3 = wx.StaticText(self.frame_modal, label="For older Macs requiring root patching, we set SIP to\n be partially disabled (0x803) to allow root patching.")
|
|
||||||
# self.sip_label_3.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
|
||||||
# self.sip_label_3.SetPosition(
|
|
||||||
# wx.Point(self.sip_label_2_2.GetPosition().x, self.sip_label_2_2.GetPosition().y + self.sip_label_2_2.GetSize().height + 10)
|
|
||||||
# )
|
|
||||||
# self.sip_label_3.Center(wx.HORIZONTAL)
|
|
||||||
|
|
||||||
# self.sip_label_4 = wx.StaticText(self.frame_modal, label="This value (0x803) corresponds to the following bits in csr.h:")
|
|
||||||
# self.sip_label_4.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
|
||||||
# self.sip_label_4.SetPosition(
|
|
||||||
# wx.Point(self.sip_label_3.GetPosition().x, self.sip_label_3.GetPosition().y + self.sip_label_3.GetSize().height + 5)
|
|
||||||
# )
|
|
||||||
# self.sip_label_4.Center(wx.HORIZONTAL)
|
|
||||||
|
|
||||||
# self.sip_label_5 = wx.StaticText(self.frame_modal, label=" 0x1 - CSR_ALLOW_UNTRUSTED_KEXTS\n 0x2 - CSR_ALLOW_UNRESTRICTED_FS\n 0x800 - CSR_ALLOW_UNAUTHENTICATED_ROOT")
|
|
||||||
# self.sip_label_5.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
|
||||||
# self.sip_label_5.SetPosition(
|
|
||||||
# wx.Point(self.sip_label_4.GetPosition().x, self.sip_label_4.GetPosition().y + self.sip_label_4.GetSize().height + 7)
|
|
||||||
# )
|
|
||||||
# self.sip_label_5.Center(wx.HORIZONTAL)
|
|
||||||
|
|
||||||
# warning_string = """
|
|
||||||
# OpenCore Legacy Patcher by default knows the most ideal
|
|
||||||
# SIP value for your system. Override this value only if you
|
|
||||||
# understand the consequences. Reckless usage of this
|
|
||||||
# menu can break your installation.
|
|
||||||
# """
|
|
||||||
# self.sip_label_6 = wx.StaticText(self.frame_modal, label=warning_string)
|
|
||||||
# self.sip_label_6.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
|
||||||
# self.sip_label_6.SetPosition(
|
|
||||||
# wx.Point(self.sip_label_5.GetPosition().x, self.sip_label_5.GetPosition().y + self.sip_label_5.GetSize().height - 10)
|
|
||||||
# )
|
|
||||||
# self.sip_label_6.Center(wx.HORIZONTAL)
|
|
||||||
|
|
||||||
# i = -10
|
|
||||||
# for sip_bit in sip_data.system_integrity_protection.csr_values_extended:
|
|
||||||
# self.sip_checkbox = wx.CheckBox(self.frame_modal, label=sip_data.system_integrity_protection.csr_values_extended[sip_bit]["name"])
|
|
||||||
# self.sip_checkbox.SetFont(wx.Font(13, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL, False, ".AppleSystemUIFont"))
|
|
||||||
# self.sip_checkbox.SetToolTip(f'Description: {sip_data.system_integrity_protection.csr_values_extended[sip_bit]["description"]}\nValue: {hex(sip_data.system_integrity_protection.csr_values_extended[sip_bit]["value"])}\nIntroduced in: macOS {sip_data.system_integrity_protection.csr_values_extended[sip_bit]["introduced_friendly"]}')
|
|
||||||
# self.sip_checkbox.SetPosition(
|
|
||||||
# wx.Point(70, self.sip_label_6.GetPosition().y + self.sip_label_6.GetSize().height + i)
|
|
||||||
# )
|
|
||||||
# i = i + 20
|
|
||||||
# self.sip_checkbox.Bind(wx.EVT_CHECKBOX, self.update_sip_value)
|
|
||||||
# if self.sip_value & sip_data.system_integrity_protection.csr_values_extended[sip_bit]["value"] == sip_data.system_integrity_protection.csr_values_extended[sip_bit]["value"]:
|
|
||||||
# self.sip_checkbox.SetValue(True)
|
|
||||||
|
|
||||||
|
|
||||||
def on_checkbox(self, event: wx.Event, warning_pop: str = "", override_function: bool = False) -> None:
|
def on_checkbox(self, event: wx.Event, warning_pop: str = "", override_function: bool = False) -> None:
|
||||||
@@ -597,7 +574,8 @@ class SettingsFrame(wx.Frame):
|
|||||||
event.GetEventObject().SetValue(not event.GetEventObject().GetValue())
|
event.GetEventObject().SetValue(not event.GetEventObject().GetValue())
|
||||||
return
|
return
|
||||||
if override_function is True:
|
if override_function is True:
|
||||||
self.settings[self._find_parent_for_key(label)][label]["override_function"](self.settings["General"][label]["variable"], value)
|
print("Override function")
|
||||||
|
self.settings[self._find_parent_for_key(label)][label]["override_function"](self.settings[self._find_parent_for_key(label)][label]["variable"], value, self.settings[self._find_parent_for_key(label)][label]["constants_variable"] if "constants_variable" in self.settings[self._find_parent_for_key(label)][label] else None)
|
||||||
return
|
return
|
||||||
|
|
||||||
self._update_setting(self.settings[self._find_parent_for_key(label)][label]["variable"], value)
|
self._update_setting(self.settings[self._find_parent_for_key(label)][label]["variable"], value)
|
||||||
@@ -616,15 +594,44 @@ class SettingsFrame(wx.Frame):
|
|||||||
|
|
||||||
|
|
||||||
def _update_setting(self, variable, value):
|
def _update_setting(self, variable, value):
|
||||||
logging.info(f"Updating Setting: {variable} = {value}")
|
logging.info(f"Updating Local Setting: {variable} = {value}")
|
||||||
setattr(self.constants, variable, value)
|
setattr(self.constants, variable, value)
|
||||||
|
|
||||||
|
|
||||||
|
def _update_global_settings(self, variable, value, global_setting = None):
|
||||||
|
logging.info(f"Updating Global Setting: {variable} = {value}")
|
||||||
|
global_settings.GlobalEnviromentSettings().write_property(variable, value)
|
||||||
|
if global_setting is not None:
|
||||||
|
self._update_setting(global_setting, value)
|
||||||
|
|
||||||
|
|
||||||
def _find_parent_for_key(self, key: str) -> str:
|
def _find_parent_for_key(self, key: str) -> str:
|
||||||
for parent in self.settings:
|
for parent in self.settings:
|
||||||
if key in self.settings[parent]:
|
if key in self.settings[parent]:
|
||||||
return parent
|
return parent
|
||||||
|
|
||||||
|
|
||||||
|
def on_sip_value(self, event: wx.Event) -> None:
|
||||||
|
"""
|
||||||
|
"""
|
||||||
|
dict = sip_data.system_integrity_protection.csr_values_extended[f"CSR_{event.GetEventObject().GetLabel()}"]
|
||||||
|
|
||||||
|
if event.GetEventObject().GetValue() is True:
|
||||||
|
self.sip_value = self.sip_value + dict["value"]
|
||||||
|
else:
|
||||||
|
self.sip_value = self.sip_value - dict["value"]
|
||||||
|
|
||||||
|
if hex(self.sip_value) == "0x0":
|
||||||
|
self.constants.custom_sip_value = None
|
||||||
|
self.constants.sip_status = True
|
||||||
|
elif hex(self.sip_value) == "0x803":
|
||||||
|
self.constants.custom_sip_value = None
|
||||||
|
self.constants.sip_status = False
|
||||||
|
else:
|
||||||
|
self.constants.custom_sip_value = hex(self.sip_value)
|
||||||
|
|
||||||
|
self.sip_configured_label.SetLabel(f"Currently configured SIP: {hex(self.sip_value)}")
|
||||||
|
|
||||||
|
|
||||||
def on_return(self, event):
|
def on_return(self, event):
|
||||||
self.frame_modal.Destroy()
|
self.frame_modal.Destroy()
|
||||||
Reference in New Issue
Block a user