Kadr fails to run out of the box on NixOS (electron-vite dev)
English
On NixOS (tested with Niri/Wayland, IPv6 disabled in networking.enableIPv6 = false), npm run dev fails or produces a blank gray window through a chain of unrelated issues that each need a separate fix:
node-pty fails to build — no C/C++ toolchain in a bare nix-shell/default shell (node-gyp needs gcc/make/python3).
node_modules/electron has no dist/ binary — the npm electron package's postinstall download step doesn't play well with NixOS's non-FHS filesystem, so electron-vite dev throws Error: Electron uninstall.
- Wayland/Ozone crash — with default Ozone auto-detection, Electron either fails to composite (blank/gray window) or throws
Message 0 rejected by interface blink.mojom.WidgetHost, depending on the compositor (Niri here). Forcing X11/XWayland via ELECTRON_OZONE_PLATFORM_HINT=x11 fixes it.
- Preload object gets tree-shaken to
{} — because contextIsolation: false is a compile-time-known constant, Vite's bundler treats if (process.contextIsolated) {...} else {...} as dead code and can strip the entire api object, leaving window.kadr undefined even though the file builds "successfully" (build output shrinks from ~8 KB to ~0.13 KB).
ERR_NETWORK_CHANGED on first load — intermittent, timing/IPv6-related; the renderer's first loadURL sometimes races the Vite server or an IPv6-first resolution of localhost. Pinning the Vite dev server explicitly to host: '127.0.0.1' in electron.vite.config.ts (instead of the implicit localhost) resolves it reliably.
None of this is NixOS-specific in principle (bugs 3–5 likely also affect other non-FHS/Wayland-only Linux setups), but NixOS makes all five surface at once because of how it isolates the toolchain and filesystem paths.
A PR with fixes + a flake.nix devShell follows: NixOS support PR
Русский
На NixOS (проверено на Niri/Wayland, с отключённым IPv6 через networking.enableIPv6 = false) npm run dev либо падает, либо открывает пустое серое окно из-за цепочки независимых проблем, каждую из которых нужно чинить отдельно:
node-pty не собирается — в обычном шелле NixOS нет C/C++ тулчейна (node-gyp требует gcc/make/python3).
- В
node_modules/electron отсутствует бинарник в dist/ — постинсталл-скрипт npm-пакета electron плохо работает с не-FHS файловой системой NixOS, из-за чего electron-vite dev падает с Error: Electron uninstall.
- Краш Wayland/Ozone — при автоопределении Ozone Electron либо не может композитить (пустое/серое окно), либо кидает
Message 0 rejected by interface blink.mojom.WidgetHost (зависит от компоузера, здесь — Niri). Принудительный X11/XWayland через ELECTRON_OZONE_PLATFORM_HINT=x11 решает проблему.
- Preload-объект вычищается tree-shaking'ом до
{} — так как contextIsolation: false известна на этапе сборки, бандлер Vite считает if (process.contextIsolated) {...} else {...} мёртвым кодом и может выкинуть весь объект api, из-за чего window.kadr остаётся undefined, хотя сборка формально "успешна" (размер файла падает с ~8 КБ до ~0.13 КБ).
ERR_NETWORK_CHANGED при первой загрузке — нестабильно, связано с таймингом/IPv6; первый loadURL в рендерере иногда опережает готовность Vite-сервера или сталкивается с IPv6-приоритетным резолвом localhost. Явное указание host: '127.0.0.1' для dev-сервера Vite в electron.vite.config.ts (вместо неявного localhost) стабильно решает проблему.
Ничего из этого не специфично для NixOS в принципе (баги 3–5, вероятно, затрагивают и другие не-FHS/Wayland-only Linux-окружения), но именно NixOS проявляет все пять сразу из-за изоляции тулчейна и путей файловой системы.
PR с фиксами + flake.nix devShell прилагается: NixOS support PR
Kadr fails to run out of the box on NixOS (electron-vite dev)
English
On NixOS (tested with Niri/Wayland, IPv6 disabled in
networking.enableIPv6 = false),npm run devfails or produces a blank gray window through a chain of unrelated issues that each need a separate fix:node-ptyfails to build — no C/C++ toolchain in a barenix-shell/default shell (node-gypneedsgcc/make/python3).node_modules/electronhas nodist/binary — the npmelectronpackage's postinstall download step doesn't play well with NixOS's non-FHS filesystem, soelectron-vite devthrowsError: Electron uninstall.Message 0 rejected by interface blink.mojom.WidgetHost, depending on the compositor (Niri here). Forcing X11/XWayland viaELECTRON_OZONE_PLATFORM_HINT=x11fixes it.{}— becausecontextIsolation: falseis a compile-time-known constant, Vite's bundler treatsif (process.contextIsolated) {...} else {...}as dead code and can strip the entireapiobject, leavingwindow.kadrundefined even though the file builds "successfully" (build output shrinks from ~8 KB to ~0.13 KB).ERR_NETWORK_CHANGEDon first load — intermittent, timing/IPv6-related; the renderer's firstloadURLsometimes races the Vite server or an IPv6-first resolution oflocalhost. Pinning the Vite dev server explicitly tohost: '127.0.0.1'inelectron.vite.config.ts(instead of the implicitlocalhost) resolves it reliably.None of this is NixOS-specific in principle (bugs 3–5 likely also affect other non-FHS/Wayland-only Linux setups), but NixOS makes all five surface at once because of how it isolates the toolchain and filesystem paths.
A PR with fixes + a
flake.nixdevShell follows: NixOS support PRРусский
На NixOS (проверено на Niri/Wayland, с отключённым IPv6 через
networking.enableIPv6 = false)npm run devлибо падает, либо открывает пустое серое окно из-за цепочки независимых проблем, каждую из которых нужно чинить отдельно:node-ptyне собирается — в обычном шелле NixOS нет C/C++ тулчейна (node-gypтребуетgcc/make/python3).node_modules/electronотсутствует бинарник вdist/— постинсталл-скрипт npm-пакетаelectronплохо работает с не-FHS файловой системой NixOS, из-за чегоelectron-vite devпадает сError: Electron uninstall.Message 0 rejected by interface blink.mojom.WidgetHost(зависит от компоузера, здесь — Niri). Принудительный X11/XWayland черезELECTRON_OZONE_PLATFORM_HINT=x11решает проблему.{}— так какcontextIsolation: falseизвестна на этапе сборки, бандлер Vite считаетif (process.contextIsolated) {...} else {...}мёртвым кодом и может выкинуть весь объектapi, из-за чегоwindow.kadrостаётсяundefined, хотя сборка формально "успешна" (размер файла падает с ~8 КБ до ~0.13 КБ).ERR_NETWORK_CHANGEDпри первой загрузке — нестабильно, связано с таймингом/IPv6; первыйloadURLв рендерере иногда опережает готовность Vite-сервера или сталкивается с IPv6-приоритетным резолвомlocalhost. Явное указаниеhost: '127.0.0.1'для dev-сервера Vite вelectron.vite.config.ts(вместо неявногоlocalhost) стабильно решает проблему.Ничего из этого не специфично для NixOS в принципе (баги 3–5, вероятно, затрагивают и другие не-FHS/Wayland-only Linux-окружения), но именно NixOS проявляет все пять сразу из-за изоляции тулчейна и путей файловой системы.
PR с фиксами +
flake.nixdevShell прилагается: NixOS support PR