A branded graphical boot picker for OpenCore.
Instead of OpenCore's black-and-white text menu, you boot into this:
I'm looking at this and i'm thinking how did i do this.. It's crazy how far hackmate has gotten.
The HackMate banner over a blurred macOS Tahoe backdrop, a short legend for what Safe Mode / Recovery / Reset NVRAM actually do, mouse support, readable entry names.
OpenCore is unmodified. HackMate-Core is two things:
- An OpenCanopy theme — a
Resources/folder (background, icons, fonts, labels). OpenCanopy is Acidanthera's own graphical picker; it ships with every OpenCore release asOpenCanopy.efi. - A few
config.plistkeys that switch the picker on and point it at the theme.
Nothing about the boot chain, security model, or update path changes. Proven on a real ThinkPad T480s (macOS 26.5.2): graphical picker at native 1920×1080, trackpad cursor, all boot entries, macOS boots through it.
You need an existing, working OpenCore EFI.
Automatic (patches config.plist + merges the theme in):
python hackmate_core.py install /Volumes/EFI/EFI/OC
Add --minimal for no shutdown/restart buttons, --resolution 2560x1440 to
pick the matching background, --oc-release /path/to/OpenCore-1.0.7-RELEASE if
OpenCanopy.efi isn't already in your Drivers/ folder.
Manual:
-
Copy
Resources/Image/HackMate/intoEFI/OC/Resources/Image/. If yourResources/has noFont/orLabel/, copy those from this repo too. -
Put
OpenCanopy.efi(from your OpenCore release, matching yourOpenCore.efiversion) inEFI/OC/Drivers/and add it toUEFI > DriverswithEnabled = true. -
In
config.plist > Misc > Boot:key value PickerModeExternalPickerVariantHackMate\CorePickerAttributes145(or209for minimal)and
UEFI > Output > ProvideConsoleGop = true.
Then reboot.
- full (
PickerAttributes 145) — banner, legend, shutdown/restart buttons - minimal (
209) — same, no shutdown/restart buttons
Background.icns is centred, not stretched. Three variants ship:
Background.icns (1080p), Background_1440p.icns, Background_2160p.icns. The
install command with --resolution swaps in the right one; otherwise rename
the file yourself, or regenerate (below). A mismatch just letterboxes against
DefaultBackgroundColor (black).
For a 4K panel also set NVRAM UIScale to 02.
tools/build_theme.py regenerates Resources/ — composites the BANNER over a
wallpaper (blurred, darkened), redraws Apple.icns, tints the selection chrome,
and pulls Font/ + Label/ from OcBinaryData:
python tools/build_theme.py \
--wallpaper /path/to/wallpaper.jpg \
--ocbinary /path/to/OcBinaryData \
--goldengate /path/to/OcBinaryData/Resources/Image/Acidanthera/GoldenGate
--blur, --brightness, --dark tune the backdrop. Edit BANNER, SUBTITLE,
LEGEND at the top of the file for different text.
tools/preview.py renders a mockup PNG without booting anything.
tools/build_test_efi.py + tools/qemu_shot.py build a throwaway ESP and boot
it in QEMU + OVMF.
- OpenCanopy's layout (icon size, row position, spacing) is fixed — a theme
controls colours, images, and labels only. The banner and legend live inside
Background.icns, positioned to sit clear of the entry row. - The
.icnsfiles are the Apple ICNS container wrapping a PNG (ic07+ic13chunks). For the background both chunks hold the full-resolution image. - The auto-detected macOS entry currently shows the generic drive icon rather than the Apple logo — a flavour-resolution quirk, cosmetic.
MIT — see LICENSE. Third-party assets and their licences are listed in THIRD_PARTY.md.