Commit Graph

2233 Commits

Author SHA1 Message Date
Martin Wimpress e86d9980cd fix(quickemu): accept HygonGenuine CPUs and skip x86 checks on ARM hosts
- Treat HygonGenuine as AMD-compatible and check svm for AMD-style hosts
- On aarch64/arm64 hosts, skip x86-specific VT-x/SVM validation (HVF/KVM
handled by hypervisor)
- Add warning for unknown CPU vendors to aid troubleshooting

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-24 14:25:42 +00:00
Martin Wimpress e3fb8c3372 fix: use portable extended grep regex
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-24 14:02:38 +00:00
Martin Wimpress 18451fe6c1 feat(quickemu): enable GL on macOS (cocoa) and prefer virtio GL
- Add check_cocoa_gl_es_support(): detect QEMU cocoa gl=es support and
look for
  ANGLE/libEGL in QEMU prefix, Homebrew and DYLD paths
- Use the check in configure_display() to enable "gl=es" for cocoa when
available
  and fall back to disabling GL (preserving previous stability
behaviour)
- Improve virtio GL selection: prefer virtio-gpu(-gl) /
virtio-gpu-gl-pci /
  virtio-vga-gl variants when GL is enabled and QEMU exposes the device
- Remove the hard disable of GL for cocoa in display_param_check() (now
handled
  by the detection function)
- Ensure user-visible display/GL/VirGL status remains printed for
diagnostics
Enables safer GL usage on macOS (covers Nix/Homebrew QEMU and ANGLE
cases);
falls back cleanly when support is absent.

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-24 14:02:38 +00:00
Martin Wimpress 7668519b8d fix: prevent FAT directory name munging
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-24 12:42:51 +00:00
Martin Wimpress c96a2484e6 fix: prevent FAT direectory name munging
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-24 12:42:51 +00:00
Martin Wimpress f9249d657f fix: verify all mtools are available
Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
2026-01-24 12:42:51 +00:00
Martin Wimpress 1783381e29 feat(quickget): integrate OpenCore into macOS disk image by default
Create macOS VMs with OpenCore embedded in the EFI partition of disk.qcow2
instead of using a separate OpenCore.qcow2 file. This simplifies VM management
by reducing from two disk images to one.

Implementation:
- Add create_macos_disk_with_opencore() using mtools/sgdisk for cross-platform
  EFI partition creation without mounting or root privileges
- Add download_opencore() to extract OpenCore files from OSX-KVM image
- Use LC_ALL='' with mcopy to prevent FAT directory name mangling
- Adjust disk size threshold for macOS integrated mode (1GB vs 1.5MB)

Backwards compatibility:
- If OpenCore.qcow2 exists, use legacy two-disk boot method
- If mtools/sgdisk unavailable, fall back to legacy method automatically

New dependencies: mtools, gptfdisk (added to devshell.nix and package.nix)

Closes #1720
2026-01-24 12:42:51 +00:00
Martin Wimpress 2fe51d5671 fix(quickemu): skip x86 CPU feature checks on Apple Silicon
When using TCG emulation for cross-architecture VMs (e.g., x86_64 guest
on arm64 host), skip the SSE/AVX CPU feature detection since QEMU
emulates these features in software. This fixes macOS guest startup on
Apple Silicon Macs.

Fixes #1457
2026-01-24 10:40:23 +00:00
Martin Wimpress 81143afaab fix(devshell): enable EFI boot on macOS by patching OVMF paths
Nix's qemu_full bundles EDK2 firmware with different filenames than
quickemu expects. Add darwin-specific sed patterns to:
- Set SHARE_PATH to qemu_full's share directory
- Prepend correct firmware paths (edk2-x86_64-code.fd, edk2-i386-vars.fd)
  to the ovmfs search array
2026-01-24 10:02:16 +00:00
Martin Wimpress 9cc54ff365 fix(quickemu): remove duplicate +invtsc flag for AMD macOS guests
The invtsc flag is already added by the configure_cpu_flag loop when
check_cpu_flag recognises constant_tsc as equivalent to invtsc on AMD.
Adding it again in the AMD-specific TSC block caused duplication.

Only +tsc and +tsc-deadline are needed as additional flags.
2026-01-24 02:42:52 +00:00
Martin Wimpress 3cfbfb1a30 fix(quickemu): improve TSC flag detection for macOS on AMD CPUs 2026-01-24 02:42:52 +00:00
Martin Wimpress a2539d3c56 fix(quickget): resize Batocera image for GPT expansion 2026-01-24 02:10:49 +00:00
Martin Wimpress c66827ccb1 fix(quickget): extract Archcraft version folder from redirect URL
The hash URL was incorrectly using 'v${RELEASE}' (e.g., 'vlatest')
instead of extracting the actual version folder from the redirect URL.
Since releases_archcraft returns 'latest', the download redirect goes
to a versioned folder like 'v25.10', but the hash file lookup used
'vlatest' which doesn't exist.

Extract the version folder from the redirect URL to construct the
correct hash file path.
2026-01-24 01:43:24 +00:00
Martin Wimpress 7a59041120 fix(quickget): add hash verification for Mabox Linux 2026-01-24 01:43:24 +00:00
Martin Wimpress 9d4171b0d6 fix(quickget): add hash verification for KolibriOS 2026-01-24 01:43:24 +00:00
Martin Wimpress 2e5b29ad43 fix(quickget): add hash verification for Archcraft 2026-01-24 01:43:24 +00:00
Martin Wimpress 5090385dbd fix(quickemu): conditionalise KVM-specific CPU flags for Windows
Fixes #1731
2026-01-24 01:02:49 +00:00
Martin Wimpress 5ef6d1ffeb
chore: bump version to 4.9.9 2026-01-24 00:33:33 +00:00
Martin Wimpress 848ed99ef6
feat(quickget): add macOS Tahoe support and update board IDs. fixes #1731 2026-01-24 00:04:07 +00:00
Martin Wimpress 959a9a3546
docs: add AGENTS.md describing agents and contribution workflow
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-24 00:01:16 +00:00
Martin Wimpress e7c17eded2 fix(quickget): address PR review feedback
- Fix misleading comment in releases_fedora() to match actual behaviour
- Fix editions_zorin() to handle unset RELEASE in csv_data() context
2026-01-23 23:52:27 +00:00
Martin Wimpress 7dc93266c9 fix(quickget): remove Athena OS (no longer getting updates) 2026-01-23 23:52:27 +00:00
Martin Wimpress 083ae65ae3 fix(quickget): remove VX Linux (project website down) 2026-01-23 23:52:27 +00:00
Martin Wimpress 5b67c0808f fix(quickget): handle Solus Xfce beta naming for older releases
Xfce was a beta edition with uppercase naming (XFCE-Beta) in releases
prior to 2025-11-29. Fall back to beta naming when standard fails.
2026-01-23 23:52:27 +00:00
Martin Wimpress e560c22d69 fix(quickget): update Zorin OS download method and editions
- Use direct mirror URL instead of unreliable shortlink redirects
- Remove lite64 edition from Zorin 18 (now Pro-only)
- Automatically detect latest revision for each version
2026-01-23 23:52:27 +00:00
Martin Wimpress cb67f82e6c fix(quickget): dynamically find PCLinuxOS edition releases
Different editions have different release dates. Changed to 'latest'
release with dynamic ISO discovery per edition.
2026-01-23 23:52:27 +00:00
Martin Wimpress b1ccbe9e61 fix(quickget): update Parrot Security releases and editions
- Only list releases that have ISO files available
- Remove htb edition (discontinued in 7.0 series)
- Filter out releases with empty ISO directories
2026-01-23 23:52:27 +00:00
Martin Wimpress a10864541b fix(quickget): remove unavailable KolibriOS Italian locale
The it_IT locale no longer has ISO builds available.
2026-01-23 23:52:27 +00:00
Martin Wimpress 08f8313a96 fix(quickget): update Garuda Linux editions
Remove discontinued editions: kde-git, lxqt-kwin, mate, qtile, wayfire
Add new editions: hyprland, mokka
2026-01-23 23:52:27 +00:00
Martin Wimpress b94bc69728 fix(quickget): update MX Linux Xfce ISO naming
Xfce edition now uses 'MX-VERSION_Xfce_x64.iso' naming convention.
2026-01-23 23:52:27 +00:00
Martin Wimpress c67a9971f6 fix(quickget): remove discontinued KDE Neon developer edition
The developer edition no longer provides ISO images.
2026-01-23 23:52:27 +00:00
Martin Wimpress e08e84c720 fix(quickget): update Guix releases to 1.5.0 and 1.4.0
Remove EOL 1.3.0 which has unreliable mirror availability.
Add latest 1.5.0 release.
2026-01-23 23:52:27 +00:00
Martin Wimpress 98735ad60a fix(quickget): only list Debian archive versions with live images
Filter archive releases to only include those with -live directories,
ensuring live image editions are actually available for download.
2026-01-23 23:52:27 +00:00
Martin Wimpress f725c1998b fix(quickget): fix Artix Linux editions parsing
Community editions now include init system suffix (e.g., community-gtk-openrc).
Updated parsing to correctly extract full edition-init combinations.
2026-01-23 23:52:27 +00:00
Martin Wimpress 542987bdbc fix(quickget): update Athena OS ISO naming for v23.11+
Newer releases use 'athenaos-rolling' prefix instead of 'athena-rolling'.
Detect which naming scheme to use by checking URL availability.
2026-01-23 23:52:27 +00:00
Martin Wimpress 07dee441b0 fix(quickget): fix failing downloads and remove discontinued distros
Fixes:
- slint: Update version from 15.0-5 to 15.0-10
- blendos: Replace dead mirror with official GitLab build server
- void: Filter out directories without standard base ISOs (fixes
20250401)

Removals:
- holoiso: Project archived Feb 2024, download server returns 404
- truenas-core: Discontinued, merged into TrueNAS Community Edition
- truenas-scale: Rebranded to TrueNAS Community Edition
2026-01-23 23:52:27 +00:00
Martin Wimpress 9d76158196 fix(quickget): use mirrors.kernel.org for Gentoo, Linux Mint and LMDE
- Replace mirror.bytemark.co.uk with mirrors.kernel.org in get_gentoo,
  get_linuxmint and get_lmde
- Prefer kernel.org mirrors for improved availability and fresher
releases
- No change to ISO selection or hash verification logic; behaviour
unchanged

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 23:52:27 +00:00
Martin Wimpress 7d5de87c2f fix(quickget): exclude EOL and pre-release distro versions
- Remove Devuan 'beowulf' from the release list
- Drop Mageia '8' from the release list
- Filter Fedora releases JSON and exclude Fedora 41 (prevent EOL
entries)
- Restrict GNOME OS parsing to stable numeric versions and keep
"nightly"
- Rationale: avoid presenting EOL or alpha/beta/rc images to users and
reduce failed downloads

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 23:52:27 +00:00
Martin Wimpress fed267550d ci(test-quickget): use temp file to collect distro rows for sorting
Replace string concatenation with temp file approach to fix issue where
only the first distro appeared in the summary table. Writing rows to a
temp file and sorting it directly is more robust than piping concatenated
strings through sort.
2026-01-23 19:29:23 +00:00
Martin Wimpress 84c77bd3c3 ci(test-quickget): improve test summary formatting and status logic
- Set status to  only when failed>0 and passed==0; use ⚠️ when failures
exist but some passed
- Build per-distro rows with printf to preserve newlines and avoid
trailing whitespace
- Replace heredoc cat with explicit echo lines for consistent GitHub
summary formatting
- Append sorted distro rows without extra blank lines

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 19:29:23 +00:00
Martin Wimpress a2baa3b489 ci(test-quickget): narrow artifact globs and remove merge-multiple
- Remove merge-multiple: true from actions/download-artifact step
- Use results/result-*/result.json and results/result-*/failed.txt globs
- Ensure per-distro result files and failed lists are read consistently
for summary

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 19:29:23 +00:00
Martin Wimpress 9073738ade ci(test-quickget): use wc -l to count test results
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 19:29:23 +00:00
Martin Wimpress a4d8329ba7 refactor(quickget): centralise qemu-img detection into require_qemu_img
- Add require_qemu_img() to detect qemu-img and print a clear error if
missing
- Call require_qemu_img before any qemu-img operations (RecoveryImage,
.img conversions)
- Remove duplicate global qemu-img existence check to avoid repetition

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 19:29:23 +00:00
Martin Wimpress e259ade5fa ci(test-quickget): split tests into detect/matrix per-distro workflow
- Replace single quickget-tests job with detect-distros, test-distro,
and report-results
- detect-distros extracts unique distro list and emits JSON for matrix
strategy
- test-distro runs ./quickget --check per distro, captures
PASS/FAIL/SKIP counts,
  archives results, and exposes per-distro outputs
- report-results downloads artifacts, aggregates counts into a GitHub
step summary,
  includes failed URLs, and fails the workflow if any distro has
failures
- Use actions/checkout@v6 and upload/download-artifact@v4; allow
per-distro jobs to
  continue-on-error so all distros are exercised before reporting

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 19:29:23 +00:00
Martin Wimpress d83db9843b fix(public_dir): respect public_dir setting when loading VM
- Read public_dir from the sourced VM config into PUBLIC
- Preserve existing PUBLIC when public_dir is not set
- Prevent PUBLIC being empty when a VM specifies public_dir

Fixes #1634

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 17:56:32 +00:00
Martin Wimpress 59f908ea6d refactor(firmware): use od to read qcow2 magic bytes
- Replace head-based check with od -tx1 to read first 4 bytes as hex
- Compare hex string to 514649fb to detect qcow2 reliably
- Avoid null-byte warnings from command substitution; keep same
true/false output

Fixes #1796

Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 17:26:53 +00:00
Martin Wimpress 1534e2cf8e
chore: remove Formula directory
The Homebrew formula has been migrated to a dedicated tap:
https://github.com/quickemu-project/homebrew-quickemu
2026-01-23 17:03:29 +00:00
Martin Wimpress 179b65d6a8
chore: update flake.nix
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 16:42:42 +00:00
Martin Wimpress 1f8e6addcc
fix(windows): correct order of first logon commands in unattended XML
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 16:42:28 +00:00
Martin Wimpress 9b22109d90 chore(opensuse): remove aeon appliance handling. fixes #1793
Signed-off-by: Martin Wimpress <martin@wimpress.org>
2026-01-23 16:25:11 +00:00