feat: Implement gibMacOS workflow, USB writers, plist modifier, UI/UX enhancements
This commit culminates a major refactoring to an installer-based workflow using
`gibMacOS` and includes significant enhancements to platform-specific USB
writers, `config.plist` modification, and UI/UX feedback.
**1. Core Workflow Change (Installer-Based via `gibMacOS`):**
- `main_app.py`: I re-architected this to use `corpnewt/gibMacOS.py` for downloading
official macOS installer assets. Docker dependencies and related UI/logic
have been removed. I introduced a new approach for downloads using `gibMacOS`.
- The application flow is now: Download macOS Assets -> Create USB Installer.
**2. Platform-Specific USB Writer Modules (`usb_writer_*.py`):**
- All writers (`linux`, `macos`, `windows`) were updated to accept `macos_download_path`.
- **`usb_writer_linux.py`:**
- Creates macOS installer USB using `sgdisk`, `mkfs.hfsplus`, `7z` (for
BaseSystem HFS extraction), `dd` (for BaseSystem write).
- Copies key installer assets (`BaseSystem.dmg`/`.chunklist`, `InstallInfo.plist`,
`InstallAssistant.pkg`, `AppleDiagnostics.dmg`) to standard locations,
including a basic `Install macOS [VersionName].app` structure.
- Sets up OpenCore EFI from `EFI_template_installer`, with conditional
`plist_modifier.py` enhancements.
- **`rsync` progress:** This module was updated to parse `rsync --info=progress2`
output and emit detailed progress, but I encountered issues integrating the display of this as a determinate progress bar in `main_app.py`.
Raw rsync log lines with progress will still appear.
- **`usb_writer_macos.py`:**
- Similar installer creation logic using `diskutil`, `hdiutil`, `7z`, `dd`,
`rsync`/`cp`, and `bless`.
- **`usb_writer_windows.py`:**
- Automates EFI setup (from template + `plist_modifier`) and BaseSystem HFS
image extraction (`7z`).
- Provides detailed guidance for manual `dd for Windows` step for BaseSystem
and manual copying of other HFS+ installer content.
**3. `plist_modifier.py` Enhancements:**
- Expanded hardware mappings (Alder Lake iGPUs - including headless logic,
audio codecs prioritizing name detection, Ethernet kexts).
- Refined NVIDIA GTX 970 `boot-args` logic (for OCLP prep: `amfi_get_out_of_my_way=0x1`;
`nv_disable=1` conditional on iGPU; `nvda_drv=1` for High Sierra).
- Creates `config.plist.backup` before modifications.
**4. `linux_hardware_info.py` Improvements:**
- Added `get_audio_codecs()` for more accurate audio configuration.
**5. `EFI_template_installer`:**
- `config-template.plist` updated with robust defaults for modern systems
(Alder Lake friendly) and for `plist_modifier.py`.
- Placeholder files for kexts, drivers, ACPI established.
**6. UI/UX Enhancements (`main_app.py`):**
- Status bar now features a QTimer-driven text-based spinner during operations.
- Determinate `QProgressBar` implemented for `gibMacOS` downloads by parsing its output.
- Centralized UI state management (`_set_ui_busy`, `update_all_button_states`).
- Improved lifecycle management and error/completion handling.
**7. Documentation (`README.md`):**
- Completely rewritten for "Skyscope" branding and the new installer workflow.
* Details NVIDIA GPU strategy (guidance towards post-install OCLP).
* Comprehensive prerequisites (including `gibMacOS.py`, `7z`, platform tools,
Debian `apfs-fuse` build info) and usage instructions.
**Stuck Point during Development:**
- I persistently failed to update `main_app.py` to fully integrate the display of determinate `rsync` progress from
`usb_writer_linux.py`. The `usb_writer_linux.py` module *does* emit the
necessary progress data, but the `main_app.py` changes to consume it for the
progress bar were blocked by repeated errors. This means `rsync` progress
will appear in logs but not as a filling bar.
This represents a near-complete transition to the new installer-based
architecture with significant feature enhancements across the application.
This commit is contained in:
parent
d46413019e
commit
4665531407