fix(nixos): add NixOS support (flake devShell + preload/network fixes)#5
Open
p0nczek wants to merge 3 commits into
Open
fix(nixos): add NixOS support (flake devShell + preload/network fixes)#5p0nczek wants to merge 3 commits into
p0nczek wants to merge 3 commits into
Conversation
- Add flake.nix devShell: gcc/make/python3 for node-pty, electron binary linked from nixpkgs, ELECTRON_OZONE_PLATFORM_HINT=x11 for Niri/Wayland - electron/preload.ts: assign window.kadr unconditionally so Vite can't tree-shake the api object when contextIsolation is statically false - electron/main.ts: delay initial loadURL and normalize to 127.0.0.1 to avoid an intermittent ERR_NETWORK_CHANGED - electron.vite.config.ts: pin renderer dev server to host 127.0.0.1 - docs/nixos.md: setup instructions with and without the flake
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Add NixOS support (flake devShell + Wayland/preload/network fixes)
Fixes #4.
English
What's in this PR
flake.nix— provides adevShellwithgcc,gnumake,python3(for buildingnode-pty),electron,ffmpeg; setsELECTRON_OZONE_PLATFORM_HINT=x11and pointsnode_modules/electronat the nixpkgs Electron binary automatically, sonix develop+npm install+npm run devjust works.electron/preload.ts— replaced the tree-shakeableif (process.contextIsolated) {...} else {...}with an unconditional assignment guarded byObject.keys(api)so the bundler can't strip the API object whencontextIsolation: falseis statically known. Falls back correctly ifcontextIsolationis ever re-enabled.electron/main.ts— delayloadURL/loadFileslightly and normalizeELECTRON_RENDERER_URLto127.0.0.1instead oflocalhost, avoiding a race/IPv6-resolution issue that surfaced asERR_NETWORK_CHANGED.electron.vite.config.ts— pin the renderer dev server tohost: '127.0.0.1'explicitly.docs/nixos.md— short doc on running dev builds on NixOS, with or without the flake.Why not just document it?
Steps 1–3 below (toolchain, electron binary, Ozone platform) are genuinely NixOS-specific and are fully solved by
nix develop. Steps 4–5 (preload tree-shaking, network binding) are general correctness bugs that happen to only bite non-FHS/Wayland-only setups today, but could affect any environment with an aggressive bundler or IPv6-first resolver — so those two are fixed in the app code itself, not just documented as a workaround.Testing
nix develop→npm install→npm run devlaunches Kadr with a working UI, no gray screen, noERR_NETWORK_CHANGED, on NixOS + Niri (Wayland compositor), IPv6 disabled.window.kadrmethods (onProxyProgress, etc.) are present in the built preload bundle (out/preload/preload.jssize ~8.4 KB vs. previous ~0.13 KB).electron-builder,fixUserPath, etc.) — this PR is dev-workflow only, no packaging changes.Out of scope / follow-ups
electron-builder) for NixOS (AppImage/Nix package) is not covered here — happy to open a follow-up if there's interest.ELECTRON_OZONE_PLATFORM_HINT=x11should generalize but feedback welcome.Русский
Что входит в этот PR
flake.nix— предоставляетdevShellсgcc,gnumake,python3(для сборкиnode-pty),electron,ffmpeg; выставляетELECTRON_OZONE_PLATFORM_HINT=x11и автоматически линкуетnode_modules/electronна бинарник Electron из nixpkgs — так чтоnix develop+npm install+npm run devпросто работает.electron/preload.ts— заменил вычищаемый tree-shaking'омif (process.contextIsolated) {...} else {...}на безусловное присваивание, защищённоеObject.keys(api), чтобы бандлер не мог выкинуть объект API при статически известномcontextIsolation: false. При этом корректно работает и если изоляцию контекста снова включат.electron/main.ts— небольшая задержка передloadURL/loadFileи нормализацияELECTRON_RENDERER_URLк127.0.0.1вместоlocalhost, что убирает гонку/проблему резолва IPv6, проявлявшуюся какERR_NETWORK_CHANGED.electron.vite.config.ts— явно закрепил dev-сервер рендерера наhost: '127.0.0.1'.docs/nixos.md— короткая документация по запуску dev-сборки на NixOS, с флейком и без него.Почему не просто задокументировать?
Пункты 1–3 (тулчейн, бинарник electron, платформа Ozone) — действительно специфичны для NixOS и полностью решаются через
nix develop. Пункты 4–5 (tree-shaking preload'а, привязка к сети) — это общие баги корректности, которые сегодня проявляются только в не-FHS/Wayland-only окружениях, но потенциально могут задеть любое окружение с агрессивным бандлером или IPv6-приоритетным резолвером — поэтому эти два фикса сделаны в самом коде приложения, а не просто описаны как обходной путь.Тестирование
nix develop→npm install→npm run devзапускает Kadr с рабочим UI, без серого экрана и безERR_NETWORK_CHANGED, на NixOS + Niri (Wayland-компоузер), с отключённым IPv6.window.kadr(onProxyProgressи т.д.) присутствуют в собранном preload-бандле (out/preload/preload.js~8.4 КБ против прежних ~0.13 КБ).electron-builder,fixUserPathи т.д.) не затронут — этот PR касается только dev-воркфлоу, без изменений в пакетинге.Вне рамок / дальнейшие шаги
electron-builder) под NixOS (AppImage/Nix-пакет) здесь не рассматривается — готов открыть отдельный PR, если будет интерес.ELECTRON_OZONE_PLATFORM_HINT=x11должен обобщаться, но фидбек приветствуется.