Commit Graph
100 Commits
Author SHA1 Message Date
Kalah 00786aa404 Merge pull request #90 from lucannez64/fix/post-match-cpu
Extend idle select() backoff to LeagueClientUx (refs #82, #84)
2026-10-25 19:12:30 +01:00
lucannez64 76073e6a45 Merge remote-tracking branch 'origin/main' into pr-fix-90 2026-10-25 19:09:59 +01:00
Kalah 501fae30b0 Merge pull request #130 from 3AvisD/docs/interoperability-wording
docs: clarify interoperability and compliance wording
2026-10-25 19:09:37 +01:00
Kalah 24276b91c6 Merge pull request #123 from 3AvisD/fix/recover-stale-client
fix(launcher): recover a stale client tree without restarting Darling
2026-10-23 14:19:34 +02:00
lucannez64andClaude Opus 5.5 a11a144767 Merge main into fix/recover-stale-client
Resolve conflicts with #122: keep both feature docs and CI steps, and drop
this branch's copy of the close-helper block, which main now starts after
the installed-client check.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-23 14:18:33 +02:00
Kalah 4889b99533 Merge pull request #122 from 3AvisD/feat/hide-client-in-game
feat(launcher): select close/hide client handling from League preferences
2026-10-23 14:17:39 +02:00
Kalah 6bf8d63f55 Merge branch 'main' into feat/hide-client-in-game 2026-10-23 14:16:58 +02:00
Kalah 97fcdce089 Merge pull request #115 from ekisu/perf/indium-cpu-shadow
perf(indium): cache buffer address-table keys in CPU memory
2026-10-23 13:42:26 +02:00
Kalah a0b152f53c Merge branch 'main' into perf/indium-cpu-shadow 2026-10-23 13:35:33 +02:00
Kalah a4da79011f Merge pull request #120 from lucannez64/lucannez64-patch-1
Add donations section to README
2026-10-22 13:02:37 +02:00
Kalah 1b43e8f38c Add donations section to README
Added a donations section with a link to Ko-Fi.
2026-10-22 13:01:57 +02:00
Kalah 3c3f4f63e7 Merge pull request #118 from lucannez64/fix/launcher-entry-cleanup
fix(launcher): only remove launcher artifacts this project created
2026-10-21 17:46:46 +02:00
Kalah bb5320e167 Merge pull request #117 from 3AvisD/chore/launcher-name
launcher: use a neutral Darling Launcher name and icon
2026-10-21 17:45:18 +02:00
lucannez64 e00ee99522 fix(launcher): only remove launcher artifacts this project created
Match the legacy entry against this checkout's desktop-run.sh instead of any
desktop-run.sh, and delete the legacy icon files only after that entry or the
old artwork proves ownership.  Quote and escape Exec arguments as the Desktop
Entry specification requires, so a checkout path with reserved characters no
longer produces an invalid entry, and escape the Path value.

Use StartupWMClass=RiotClientServices in both entries: Darling derives WM_CLASS
from -[NSProcessInfo processName], the basename of argv[0], and the launcher
starts .../RiotClientServices.  "Riot Client" is only the bundle display name,
so the checkout entry never matched the window.  Both entries now share
Name/GenericName/Comment/Icon/Keywords/Categories and a test keeps them in
sync; Terminal stays different because the checkout entry logs to
build/desktop-launch.log while the packaged entry runs the session in a
terminal.

Also drop the stray top-level icon copies, handle dangling legacy symlinks,
name the icon for assistive technology, document the alias and menu entry, and
cover the helper with disposable-HOME tests.
2026-10-21 17:38:42 +02:00
Kalah cde860ab49 Merge pull request #114 from nicolai455/fix/nix-fhs-fontconfig
fix(nix): harden fontconfig compatibility across host setups
2026-10-20 13:58:44 +02:00
lucannez64 c686798ddb test(nix): run font compatibility regressions in CI 2026-10-20 13:57:05 +02:00
Kalah e727049d67 Fix Nix FHS text fonts and fontconfig aliases (#113) 2026-10-20 12:14:32 +02:00
Kalah 913dd74a09 Merge pull request #105 from WolfBlack879/fix/trustd-keepalive
security: keep trustd running from boot (fixes black Riot Client window)
2026-10-20 12:02:15 +02:00
Kalah fda57219a2 Merge branch 'main' into fix/trustd-keepalive 2026-10-20 12:00:48 +02:00
Kalah c5828424f2 Merge pull request #107 from DavidutzDev/fix/darlingserver-fd-limit
Raise darlingserver's soft fd limit when the hard limit is fixed
2026-10-20 11:58:17 +02:00
Kalah c2f71e23fe Merge branch 'main' into fix/darlingserver-fd-limit 2026-10-20 11:57:42 +02:00
Kalah 72c58ace46 Merge pull request #110 from 3AvisD/fix/trademark-logo
Compliance and best-practice adjustments
2026-10-20 11:53:24 +02:00
lucannez64 b4cdd19f1b Fix Mach-O analysis with no matching strings 2026-10-20 11:52:23 +02:00
Kalah d3ecc7bea5 Merge pull request #101 from PolarSeeker77/docs/nvidia-reports
Document NVIDIA reports instead of "NVIDIA is not validated"
2026-10-19 19:08:32 +02:00
Kalah d4d5d8adc9 Merge branch 'main' into docs/nvidia-reports 2026-10-19 19:08:01 +02:00
Kalah 6865e1eb6e Merge pull request #100 from lucannez64/fix/host-dns
Use the host DNS resolver in Darling
2026-10-19 19:06:55 +02:00
lucannez64 5f71c82dc5 Bypass proxies when checking guest DNS 2026-10-19 18:22:17 +02:00
lucannez64 e47f05f424 Use the host DNS resolver in Darling 2026-10-19 18:11:49 +02:00
Kalah ca821262e2 Merge pull request #88 from lucannez64/fix/x11-vrr
Fix Metal VSync and VRR presentation together
2026-10-19 13:00:57 +02:00
lucannez64 791d4ad74e Keep the merged X11 patch in canonical diff format 2026-10-19 13:00:24 +02:00
lucannez64 ff8a985057 Merge current main into the tested VSync and VRR fixes 2026-10-19 12:59:58 +02:00
lucannez64 6bfdfbcac7 Merge VSync and VRR fixes for combined testing 2026-10-19 12:15:09 +02:00
Kalah 8bc63ed741 Merge pull request #96 from lucannez64/fix/nsopenpanel-close
Fix NSOpenPanel Open/Cancel not closing the panel (fixes #85)
2026-10-19 09:35:43 +02:00
lucannez64andClaude Sonnet 5.5 d3adda86fa Openpanel probe: expand the tree to the subfolder before selecting, print selection diagnostics
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 09:33:30 +02:00
lucannez64andClaude Sonnet 5.5 66474a3c76 Fix openpanel probe: keep trigger note and panel alive across modal pools
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 09:28:34 +02:00
lucannez64andClaude Sonnet 5.5 70a2feec42 Add standalone NSOpenPanel Open/Cancel probe for issue #85
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 09:19:42 +02:00
lucannez64andClaude Sonnet 5.5 ee322b43e1 Make NSOpenPanel Open/Cancel always end the modal session
Open with no row selected passed nil to -_setFilename:, and NSOpenPanel boxed it in an
array literal, so the action threw before the modal session was stopped and the panel
stayed up. Both buttons now go through one helper that stops the session only when
this panel is the modal window and always orders the panel out; Open accepts the
selection (filtered by canChooseFiles/canChooseDirectories and multiple-selection),
or the shown directory for directory choosers. Escape cancels.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 08:49:04 +02:00
lucannez64andClaude Sonnet 5.5 0a9d9127d2 Extend idle select() backoff to the LeagueClientUx browser process
Issue #82 shows the CEF browser main thread polling select() with a zero
timeout ~24k times a second; the existing backoff only matched LeagueClient
and RiotClientServices.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 08:43:22 +02:00
Kalah c754315072 Merge pull request #89 from lucannez64/fix/splash-stays-mapped
Keep hidden X11 windows unmapped
2026-10-19 08:25:12 +02:00
lucannez64andClaude Sonnet 5.5 84e39e3b48 Keep hidden X11 windows unmapped
Restack and makeKey no longer map a window AppKit considers hidden, and
setIsVisible: NO always unmaps, so the client's splash stays hidden.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-19 08:00:41 +02:00
Kalah 5136911656 Merge pull request #87 from ekisu/fix/cocoa-window-decorations
Fix client-side window decorations and LeagueClient header dragging
2026-10-19 07:43:05 +02:00
Kalah 8fc7d4dff3 Merge branch 'main' into fix/cocoa-window-decorations 2026-10-19 07:40:37 +02:00
lucannez64 041591352e Present full-window Metal layers on the managed X11 surface for VRR 2026-10-19 07:35:16 +02:00
Kalah 388d34df19 Merge pull request #77 from lucannez64/fix/overview-stuck-super
X11: release modifiers swallowed by the GNOME overview (#74)
2026-10-19 07:17:06 +02:00
Kalah 6c9abce695 Merge branch 'main' into fix/overview-stuck-super 2026-10-19 07:13:28 +02:00
lucannez64 27553d8874 Fix Metal VSync propagation to window swap intervals 2026-10-19 01:10:03 +02:00
Kalah 337aa79c27 Merge pull request #80 from lucannez64/fix/rootless-update-test
Fix rootless update test after the shared-identity step
2026-10-19 01:00:21 +02:00
lucannez64andClaude Opus 5.5 cb9fe9babf tests: expect the shared-identity step at the end of rootless update
#79 made update.sh stop Darling again after the overlays and run
configure-darling-platform.py --replace-known-defaults --write. The
rootless update test still expected the old call list and failed. Stub the
identity tool, expect the stop + identity calls last, and check a failed
install never reaches them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:58:45 +02:00
Kalah 7f544d063b Merge pull request #76 from lucannez64/fix/mic-input
Pass microphone input through for voice chat
2026-10-19 00:56:58 +02:00
lucannez64 01fdb0f28f Merge remote-tracking branch 'origin/main' into fix/mic-input 2026-10-19 00:55:17 +02:00
lucannez64andClaude Opus 5.5 d2ec718c48 AUHAL: accept Vivox's playback format and trace recorded levels
The issue #75 trace shows recording now runs, but Vivox's playback unit
(mic test loopback, other players' voices) sets interleaved Float32 stereo
at 32 kHz on input scope element 0 and got -10868. Apply the relaxed rule
to both client sides (input scope element 0, output scope element 1); the
playback path already interleaves for the device and PulseAudio resamples.

AudioUnitRender(bus 1) now traces frames and peak level (no samples) so a
log shows whether the client pulls sound or silence. The input check also
sets Vivox's playback format and expects unsigned 16-bit to be refused.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:41:10 +02:00
lucannez64andClaude Opus 5.5 2462b2b755 AUHAL: only accept float or signed integer recording formats
RenderBus pads missing frames with zeros, which is loud for unsigned PCM
(silence is 0x80 for 8-bit, 0x8000 for 16-bit). Reject unsigned and 8-bit
formats on element 1; voice engines use float or signed 16-bit.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:25:23 +02:00
Kalah 240cbc462d Merge pull request #79 from lucannez64/fix/replace-shared-identity
Provision a platform identity on setup and replace the shared serial/UUID on update
2026-10-19 00:22:48 +02:00
lucannez64andClaude Opus 5.5 c8cbb1ffe7 install-runtime.sh: provision a platform identity for new prefixes
When install-runtime.sh creates the prefix (first-time setup, regular or
Nix), it now runs configure-darling-platform.py --provision --write once
the runtime is stopped, so each new install gets its own synthetic serial,
MLB, UUID and ROM. A prefix counts as new the same way Darling decides it:
the directory did not exist before the first `darling shell`. Existing
prefixes keep their identity on reinstall and update.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:22:07 +02:00
lucannez64andClaude Opus 5.5 d443e631c2 update.sh: replace the shared serial and UUID automatically
Older setups shipped serial C02ZL0GVMD6N and UUID
6F3B2A1E-8C4D-4E5F-9A7B-1D2C3E4F5A6B to every install. After installing,
update.sh now runs configure-darling-platform.py --replace-known-defaults,
which provisions the prefix only when its saved identity still has one of
those values. Other custom values (imported serials/UUIDs, model, board,
manufacturer, ROM, MLB) are kept; prefixes with no saved identity or only
custom values are not touched.

provision() also drops a standalone system-id or provisioning_UDID derived
from the shared UUID instead of keeping it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:17:22 +02:00
lucannez64andClaude Opus 5.5 f7be4a2f93 AUHAL: accept interleaved recording formats on element 1
Vivox sets interleaved Float32 stereo on output scope element 1 and
AUBase's canonical-only rule rejected it with -10868, so voice chat never
started recording (issue #75 trace: 20 attempts, all failing there).
A real AUHAL converts any linear PCM; element 1 now accepts native-endian
float32 or 8/16/32-bit integers in either layout, which PulseAudio records
and RenderBus copies. Playback (element 0) keeps the canonical rule.

The input check gains a Vivox-style run: interleaved stereo 44.1 kHz with
the device set on element 1.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-19 00:13:16 +02:00
Kalah 003daa7fc3 Merge pull request #78 from lucannez64/fix/close-client-cooldown-boot
close-league-client-in-game: don't block closes right after boot
2026-10-18 23:20:24 +02:00
lucannez64andClaude Opus 5.5 87484f0385 close-league-client-in-game: don't block closes right after boot
last_close started at 0.0 and the cooldown compares it with
time.monotonic(), which counts from boot. For the first 30 s of uptime
every close was refused as "in cooldown". That made the tests flaky on
freshly booted CI runners (seen on PR #76). Use None for "never closed".

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 23:16:18 +02:00
lucannez64andClaude Opus 5.5 662b3d414f X11: take modifier masks from the server's modifier map
Right Alt (keycode 108) was hard-coded as Mod5/AltGr. On layouts where it
is Mod1, the swallowed-release reconcile accepted Mod1 as held but rebuilt
the state with Mod5, so the guest could see Option and Function together.
Read the per-key masks from XGetModifierMapping (refreshed on
MappingNotify) and use them everywhere; the old table is the fallback for
unmapped keys. The probe now checks Right Alt against whichever mask the
backend reports.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 23:13:07 +02:00
lucannez64andClaude Opus 5.5 92e1b5d5ab riot-audio-input-check: detect a synchronous access callback by thread
The handler read a flag the caller wrote without synchronization, and
inferred "called inside the request" from whether the call had returned,
which misfires when the handler runs on another thread first. Compare the
handler's thread with the caller's instead and keep the shared results
atomic.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 23:08:48 +02:00
lucannez64andClaude Opus 5.5 97c0e596bc X11: release modifiers whose release the compositor swallowed
GNOME's overview delivers the Super press to the game window, eats the
release and hands the keyboard back without a FocusOut. The backend kept
Command held, so every later key and click reached the game as a Command
shortcut until a real focus change reconciled it (issue #74).

Each key, button, motion and crossing event carries the server's modifier
state; release any modifier key we track as down whose modifier is missing
from it. Synthetic events from other clients are ignored.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 23:03:23 +02:00
lucannez64andClaude Opus 5.5 a65818a7f5 Pass microphone input through CoreAudio and AVFoundation
Voice chat (Vivox) saw no capture device and Chromium was told mic
access was denied. Fixes for issue #75:

- AVCaptureDevice: audio is Authorized when CoreAudio has a default
  input device; requestAccess answers asynchronously. Video stays Denied.
- PulseAudio input device reports 2 channels on input scope, 0 on output
  (was copied from the output device).
- PulseAudio input stream: real sample/host timestamps, one device
  buffer per IOProc call, holes as silence, IOProc errors no longer cork
  the stream, record buffer attrs sized to the device buffer.
- AUHAL: two elements per scope like macOS, non-blocking
  AudioUnitRender on bus 1 with planar support, device records in the
  bus 1 format, input-only units route CurrentDevice/BufferFrameSize to
  the input device, input start errors handled.
- New offline check tools/riot-audio-input-check.cpp.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 22:55:11 +02:00
Kalah f4f01dae12 Merge pull request #73 from PolarSeeker77/fix/x11-transparent-windows
X11: give transparent windows an alpha visual, float translucent splash windows
2026-10-18 20:57:01 +02:00
Kalah 4ff2f11c26 Merge branch 'main' into fix/x11-transparent-windows 2026-10-18 20:56:29 +02:00
Kalah 0b02889968 Merge pull request #72 from 3AvisD/fix/close-league-client-in-game
fix(launcher): close the League client UI while a match runs
2026-10-18 20:56:18 +02:00
Kalah 9ac63c6c6a Merge pull request #71 from 3AvisD/fix/mesa-shader-cache
fix(launcher): keep Mesa's shader cache on the host
2026-10-18 20:56:15 +02:00
lucannez64andClaude Opus 5.5 9f62aa3ce0 close-league-client-in-game: start the idle clock only after a client was seen
A long patch or login can keep the League client closed for more than ten
minutes after launch; the helper then left before the first match.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 20:48:43 +02:00
Kalah f400b86de1 Merge pull request #70 from DavidutzDev/feat/prefix-location
Add darling-lol --set-prefix to keep the prefix on another drive
2026-10-18 19:14:32 +02:00
lucannez64andClaude Sonnet 5.5 20d8320bf6 Make --set-prefix safe against data loss
Stage a cross-filesystem copy in a private directory instead of deleting a
pre-existing PATH.partial, reject destinations inside the overlay work
directory, save the new path before deleting the old prefix, and verify that
the target keeps user.* xattrs before and after copying. Add tests.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-18 19:04:30 +02:00
lucannez64 640f31d148 Merge remote-tracking branch 'origin/main' into pr70 2026-10-18 19:03:04 +02:00
Kalah e8b9b2027c Merge pull request #63 from PolarSeeker77/fix/x11-drag-and-drop
Drag and drop on X11: run drags in-process so CEF/Electron pages don't freeze
2026-10-18 19:00:20 +02:00
lucannez64andClaude Sonnet 5.5 7ef148c76e Add standalone X11 drag-and-drop check for PR #63
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-18 18:59:43 +02:00
Kalah 1e38e01cb1 Merge branch 'main' into fix/x11-drag-and-drop 2026-10-18 18:21:33 +02:00
Kalah 6044e838cc Merge pull request #64 from DavidutzDev/feat/stop-and-signal-cleanup
Stop Darling on Ctrl+C, terminal hangup and darling-lol --stop
2026-10-18 18:15:32 +02:00
Kalah 8b5ba48feb Merge pull request #62 from DavidutzDev/fix/nixos-nvidia-egl-paths
fix(nix): let EGL find NixOS GPU drivers in the FHS environment
2026-10-18 18:15:29 +02:00
Kalah dd6a4fad78 Merge branch 'main' into feat/stop-and-signal-cleanup 2026-10-18 18:15:02 +02:00
Kalah 551beb4436 Merge branch 'main' into fix/nixos-nvidia-egl-paths 2026-10-18 18:15:00 +02:00
Kalah c2a12b2eb9 Merge pull request #68 from lucannez64/pr61/system-profiler-overview
system_profiler: hardware and software overviews from IOKit and sysctl
2026-10-18 17:33:03 +02:00
lucannez64 b53b963997 Merge remote-tracking branch 'origin/main' into pr61/system-profiler-overview
# Conflicts:
#	.github/workflows/source-check.yml
2026-10-18 17:32:11 +02:00
Kalah d377452460 Merge pull request #67 from lucannez64/pr61/metal-device-fixes
Metal: device edge-case fixes and a MacBookPro16,1 GPU name for Riot
2026-10-18 17:32:05 +02:00
lucannez64 fd0d01e813 Merge remote-tracking branch 'origin/main' into pr61/metal-device-fixes
# Conflicts:
#	.github/workflows/source-check.yml
2026-10-18 17:31:14 +02:00
Kalah 95a15b774b Merge pull request #66 from lucannez64/pr61/host-env-filter
Add an opt-in filter for host desktop-session variables
2026-10-18 17:31:06 +02:00
Kalah 1b7332b70a Merge branch 'main' into pr61/host-env-filter 2026-10-18 17:30:23 +02:00
Kalah c9f1bb0f4d Merge pull request #65 from lucannez64/pr61/close-inherited-fds
Close inherited host file descriptors before starting the guest
2026-10-18 17:30:12 +02:00
lucannez64andClaude Opus 5.5 29e35b6a93 Report the MacBookPro16,1 GPU name for Riot on AMD and Intel hosts
With DARLING_METAL_MAC_GPU_NAME=1, MTLDevice.name is the GPU the
MacBookPro16,1 that IOKit reports shipped with, from the host's vendor:
"AMD Radeon Pro 5500M" (vendor 0x1002) or "Intel UHD Graphics 630"
(0x8086). NVIDIA keeps its own name so the game never takes another
vendor's driver paths. recommendedMaxWorkingSetSize and every other value
stay the host's, which was the risky part of #61's identity.

The Riot launcher turns it on by default (0 or empty turns it off); other
Darling apps keep the host name. DARLING_METAL_GPU_NAME still wins.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:24:49 +02:00
beb64a4271 Report hardware and software overviews from IOKit and sysctl in system_profiler
system_profiler now answers SPHardwareDataType and SPSoftwareDataType (and
lists them in -listDataTypes). Model, serial number, platform UUID and
provisioning UDID come from IOKit's IOPlatformExpertDevice via ioreg; CPU,
cache and memory from sysctl; the OS version from sw_vers and uname. A
field the guest does not provide is left out.

#61 instead read a separate darling-smbios.conf written by a new
generator (gen-darling-smbios.py), with hardcoded fallbacks (an Intel Core
i9, macOS 14.7, SIP enabled). iokitd reads darling-platform.plist, so
system_profiler and IOKit could report different serials and models on the
same prefix, and the generator overwrote identities imported with
configure-darling-platform.py. Reading the guest's own APIs keeps a single
source of truth: configure-darling-platform.py remains the only way to set
or provision an identity, and it is still never run by install or launch.

tests/test_system_profiler.py runs the script under sh with stub guest
commands and runs in CI.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:17:05 +02:00
e66bd9a394 Fix Metal device edge cases; keep reporting the host GPU
From #61, without the default "AMD Radeon Pro 5500M" / 4 GB identity: the
host GPU's name and Vulkan working set stay the default for every app, and
the existing DARLING_METAL_GPU_NAME and DARLING_METAL_VRAM_MB overrides
remain the opt-in. Reporting 4 GB on a 2 GB card invites allocation
failures, and under-reports larger cards.

Kept from #61:
- registryID returns MTLDeviceInfo::kDefaultRegistryID instead of 0; a
  real Mac never reports 0 and apps key devices by it.
- Vertex buffer layout and attribute arrays release the old item after
  retiring it; the retire step read the item after the release could free it.
- newDepthStencilState, newSamplerState and the device name return nil (or
  the fallback name) when Indium throws, instead of unwinding through
  Objective-C.
- MTLDepthStencilGetIndium is declared only with DARLING_METAL_ENABLED.
- The replaceRegion trace probes at most `width` bytes, which stays inside
  the first row for every pixel format.

metal.patch is regenerated in its existing file order, so the diff is
these changes only. tests/test_metal_device_info.py compiles the host
check against MTLDeviceInfo.h as shipped in the patch and runs in CI.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:14:47 +02:00
41b5b6fc0f Add an opt-in filter for host desktop-session variables
RCLOL_FILTER_HOST_ENV=1 makes exec-guest.py drop host session metadata
(WAYLAND_DISPLAY, XDG_SESSION_*, XDG_CURRENT_DESKTOP, GNOME/KDE/GDM,
systemd, SSH agent, terminal, toolkit, Flatpak/Snap/AppImage, exported
shell functions) and set SHELL to the guest's /bin/zsh. It is off by
default; RCLOL_KEEP_HOST_ENV lists names to keep anyway.

Unlike the denylist in #61, the filter runs after the launcher sets its
GPU tuning, keeps everything Darling and the host graphics and audio
libraries read (DISPLAY, XAUTHORITY, XDG_RUNTIME_DIR and the XDG base
directories, D-Bus, PulseAudio/PipeWire/ALSA, DRI_PRIME, MESA_*, __GL_*,
__NV_*, VK_*, LD_PRELOAD for gamemoderun, LD_LIBRARY_PATH), and lives in
one place instead of three.

tests/test_exec_guest.py runs in CI; the launcher check also verifies
that MESA_NO_ERROR=1 and __GL_THREADED_OPTIMIZATIONS=0 reach the guest
with the filter on.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:13:24 +02:00
6d3e870346 Close inherited host file descriptors before starting the guest
A terminal, IDE or service manager can leave descriptors open in the
launcher, and the guest inherited all of them. tools/exec-guest.py closes
every descriptor above stderr and then execs the guest command.

A shell loop over /proc/self/fd cannot do this portably: dash only parses
single-digit descriptors in redirections, so "exec 10>&-" runs a command
named 10 and ends the launcher on Debian and Ubuntu.

The launcher offline check now leaks descriptors 3, 4, 12 and 200 into the
launcher and asserts the guest sees only 0, 1 and 2. It runs in CI.

Split from #61.

Co-authored-by: DevWebeloper <[email protected]>
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-18 17:11:36 +02:00
Kalah c943a19606 Merge pull request #58 from DavidutzDev/fix/chromium-temp-dir
fix(launcher): give Chromium a usable temp directory ("Not Found" client page)
2026-10-18 15:19:45 +02:00
lucannez64 0830f08c3f Merge remote-tracking branch 'origin/main' into fix/pr58-docs 2026-10-18 15:19:05 +02:00
Kalah 9d55ef33ac Merge pull request #57 from DavidutzDev/fix/nvidia-580-threaded-egl
fix(nvidia): keep threaded optimizations off for driver 580 (Pascal black screen)
2026-10-18 15:18:21 +02:00
lucannez64 b6edef300f docs(launcher): scope Chromium temp failures and use standalone checks 2026-10-18 15:17:46 +02:00
Kalah b478010eb7 Merge pull request #27 from dnsouzadev/fix/riot-session-crashes-download-recovery
Fix Riot session crashes, stalled downloads and hidden client launches
2026-10-18 14:41:48 +02:00
lucannez64 c58fe4b1c5 fix(test): let Darling initialize the private session prefix 2026-10-18 14:38:15 +02:00
lucannez64 bffe884b5c Merge remote-tracking branch 'origin/main' into fix/pr27-reviewed 2026-10-18 14:30:00 +02:00
Kalah cd0f041ffb Merge pull request #51 from SypherrDev/perf/nvidia-ioctl-reduction
perf(indium): cut NVIDIA driver calls per frame (lazy event-loop wake-ups, tunable submit batching)
2026-10-18 14:28:16 +02:00
lucannez64 195255dd5e fix(indium): preserve device field offsets and clarify tuning defaults 2026-10-18 14:27:41 +02:00
lucannez64 e7a08f21cb test(cfnetwork): scope probe overlays after private-prefix startup 2026-10-18 14:20:40 +02:00
lucannez64 0a1d303cd0 chore(manifest): record CFNetwork session patch ownership 2026-10-18 14:18:35 +02:00