diff --git a/docs/WORKAROUNDS.md b/docs/WORKAROUNDS.md index 042af472..b08d8eba 100644 --- a/docs/WORKAROUNDS.md +++ b/docs/WORKAROUNDS.md @@ -16,14 +16,14 @@ obsolete workarounds get rolled back instead of lingering. A version or revision pinned for a reason that can go away. -| ID | What & where | Why | Removal condition | Added | Revisit | Status | -| ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | ---------- | -------------------------- | ------ | -| WA-004 | `catppuccin` on `main` — `flake.nix` | `main` carries the nodejs→nodejs-slim deprecation fix, which is not in a release | Switch to a release tag once it includes the fix | 2026-09-25 | on catppuccin release | active | -| WA-006 | `nixpkgs-blender` — `flake.nix` | Blender 5.2 LTS + CUDA/OptiX pin; keeps `just up` from triggering a full source rebuild | Bump deliberately when needed; drop the pin if the current nixpkgs build is acceptable | 2026-07-24 | deliberate | active | -| WA-020 | `fcitx5-vinput` pinned to release tag `v2.4.2` — `flake.nix`; consumer `home/linux/gui/base/vinput/default.nix` | Tracks a release tag instead of a branch, so `just up` stays on that release | Bump to a newer release tag when its changes are wanted | 2026-10-04 | on vinput release | active | -| WA-021 | `nix-x86-on-aarch64` input — our fork of rowanG077's patched FEX + muvm runtime — `flake.nix`; `hosts/12kingdoms-shoukei/game/` | FEX does not support 16K pages, so x86/x86_64 apps and games on shoukei need this pinned flake's 4K-page microVM runtime; our fork lets upstream changes be reviewed before use | Drop once FEX supports 16K pages directly, or nixpkgs/nixos-apple-silicon ships an equivalent runtime | 2026-10-07 | on FEX/nixpkgs/muvm update | active | -| WA-023 | `nix.package = pkgs.nixVersions.latest` — `modules/nixos/base/nix.nix` | NixOS is opted into Nix 2.35 (2.35.3), which nixpkgs ships as `nixVersions.latest`, while `nixVersions.stable` is still 2.34 (2.34.9) | Drop the override and fall back to the default `pkgs.nix` once `nixVersions.stable` is 2.35 or newer | 2026-10-07 | eval warning | active | -| WA-037 | `nixpkgs-npu` input pinned to `2ddccb854d89` — the `openvino-npu-compiler` branch of `ryan4yin/nixpkgs`, carrying [NixOS/nixpkgs#570230](https://github.com/NixOS/nixpkgs/pull/570230) — `flake.nix`; consumer `pkgs-npu` in `outputs/default.nix`, `hosts/idols-aquamarine/asr.nix` | The Intel NPU compiler, and the driver change that loads it, are unmerged, so the NPU driver the Whisper service needs comes from that branch | Drop the input and load `intel-npu-driver` from `nixos-unstable` once #570230 merges | 2026-10-17 | when #570230 merges | active | +| ID | What & where | Why | Removal condition | Added | Revisit | Status | +| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ---------- | ------------------------------------- | ------ | +| WA-004 | `catppuccin` on `main` — `flake.nix` | `main` carries the nodejs→nodejs-slim deprecation fix, which is not in a release | Switch to a release tag once it includes the fix | 2026-09-25 | on catppuccin release | active | +| WA-006 | `nixpkgs-blender` — `flake.nix` | Blender 5.2 LTS + CUDA/OptiX pin; keeps `just up` from triggering a full source rebuild | Bump deliberately when needed; drop the pin if the current nixpkgs build is acceptable | 2026-07-24 | deliberate | active | +| WA-020 | `fcitx5-vinput` pinned to release tag `v2.4.2` — `flake.nix`; consumer `home/linux/gui/base/vinput/default.nix` | Tracks a release tag instead of a branch, so `just up` stays on that release | Bump to a newer release tag when its changes are wanted | 2026-10-04 | on vinput release | active | +| WA-021 | `nix-x86-on-aarch64` input — our fork of rowanG077's patched FEX + muvm runtime — `flake.nix`; `hosts/12kingdoms-shoukei/game/` | FEX does not support 16K pages, so x86/x86_64 apps and games on shoukei need this pinned flake's 4K-page microVM runtime; our fork lets upstream changes be reviewed before use | Drop once FEX supports 16K pages directly, or nixpkgs/nixos-apple-silicon ships an equivalent runtime | 2026-10-07 | on FEX/nixpkgs/muvm update | active | +| WA-023 | `nix.package = pkgs.nixVersions.latest` — `modules/nixos/base/nix.nix` | NixOS is opted into Nix 2.35 (2.35.3), which nixpkgs ships as `nixVersions.latest`, while `nixVersions.stable` is still 2.34 (2.34.9) | Drop the override and fall back to the default `pkgs.nix` once `nixVersions.stable` is 2.35 or newer | 2026-10-07 | eval warning | active | +| WA-037 | `nixpkgs-small` input on `nixos-unstable-small`, which carries [NixOS/nixpkgs#570230](https://github.com/NixOS/nixpkgs/pull/570230) — `flake.nix`; consumer `pkgs-small` in `outputs/default.nix`, the `intel-npu-driver` overlay in `hosts/idols-aquamarine/hardware-intel-cpu.nix`, and the Python env in `hosts/idols-aquamarine/asr.nix` | The Intel NPU compiler, and the driver change that loads it, are not in `nixos-unstable` yet; `openvino-genai` 2026.4.0.0 failed to build there | Drop the overlay once #570230 reaches `nixos-unstable`; drop the input once `openvino-genai` also builds there | 2026-10-17 | when #570230 reaches `nixos-unstable` | active | ## Workarounds diff --git a/flake.lock b/flake.lock index c97886b2..baa068cf 100644 --- a/flake.lock +++ b/flake.lock @@ -676,22 +676,6 @@ "type": "github" } }, - "nixpkgs-npu": { - "locked": { - "lastModified": 1792250783, - "narHash": "sha256-J/gNk34hn774ccDrvJuSWW9EFLvIvyy3t4HnuTcN4tU=", - "owner": "ryan4yin", - "repo": "nixpkgs", - "rev": "2ddccb854d89eb027e09198368073fdb9cde4d1d", - "type": "github" - }, - "original": { - "owner": "ryan4yin", - "ref": "openvino-npu-compiler", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs-patched": { "locked": { "lastModified": 1793459509, @@ -708,6 +692,22 @@ "type": "github" } }, + "nixpkgs-small": { + "locked": { + "lastModified": 1794378162, + "narHash": "sha256-gJGP/BWdmF1pbjAzbuICPSeGkMncAiDt9PRe7L13664=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c24da8b1d51f447e8faedcb5cb823b3f84346a60", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable-small", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-stable": { "locked": { "lastModified": 1793183032, @@ -896,8 +896,8 @@ "nixpkgs-blender": "nixpkgs-blender", "nixpkgs-darwin": "nixpkgs-darwin", "nixpkgs-master": "nixpkgs-master", - "nixpkgs-npu": "nixpkgs-npu", "nixpkgs-patched": "nixpkgs-patched", + "nixpkgs-small": "nixpkgs-small", "nixpkgs-stable": "nixpkgs-stable", "nu_scripts": "nu_scripts", "nur-ryan4yin": "nur-ryan4yin", diff --git a/flake.nix b/flake.nix index 9be9d088..989701b3 100644 --- a/flake.nix +++ b/flake.nix @@ -32,10 +32,9 @@ nixpkgs-patched.url = "github:ryan4yin/nixpkgs/nixos-unstable-patched"; # get some latest packages from the master branch nixpkgs-master.url = "github:nixos/nixpkgs/master"; - # ryan4yin/nixpkgs branch carrying NixOS/nixpkgs#570230 (the Intel NPU - # compiler and the driver change that loads it). Only aquamarine consumes it, - # through `pkgs-npu`; drop it once the PR merges. - nixpkgs-npu.url = "github:ryan4yin/nixpkgs/openvino-npu-compiler"; + # Ahead of nixos-unstable for aquamarine's NPU stack, through `pkgs-small`; + # removal condition in docs/WORKAROUNDS.md WA-037. + nixpkgs-small.url = "github:nixos/nixpkgs/nixos-unstable-small"; # NixOS MicroVMs -- run the VMs directly on the hosts, replacing the former KubeVirt microvm = { url = "github:microvm-nix/microvm.nix"; diff --git a/hosts/idols-aquamarine/asr.nix b/hosts/idols-aquamarine/asr.nix index f91ec26a..a1e9e891 100644 --- a/hosts/idols-aquamarine/asr.nix +++ b/hosts/idols-aquamarine/asr.nix @@ -3,7 +3,7 @@ mylib, myvars, pkgs, - pkgs-npu, + pkgs-small, ... }: let @@ -52,9 +52,9 @@ let ''; # openvino-genai 2026.4.0.0 fails to compile against the OpenVINO headers in - # nixos-unstable (no matching constructor in continuous_batching); the branch's - # nixpkgs builds it, and the service has to match the NPU stack anyway. - pythonEnv = pkgs-npu.python3.withPackages (ps: [ + # nixos-unstable (no matching constructor in continuous_batching); the + # service takes it from the same nixpkgs as the NPU stack. + pythonEnv = pkgs-small.python3.withPackages (ps: [ ps.fastapi ps.numpy ps.openvino-genai @@ -90,9 +90,6 @@ in # Python block-buffers stdout when it is not a tty, which would hold the # request log lines back instead of putting them in the journal. PYTHONUNBUFFERED = "1"; - # The stock driver cannot find the NPU compiler; the patched one loads it - # from its own store path. - ZE_ENABLE_ALT_DRIVERS = "${lib.getLib pkgs-npu.intel-npu-driver}/lib/libze_intel_npu.so"; }; # Reads its model, writes its cache, uses the NPU and listens on the LAN. diff --git a/hosts/idols-aquamarine/default.nix b/hosts/idols-aquamarine/default.nix index e16580eb..f9612222 100644 --- a/hosts/idols-aquamarine/default.nix +++ b/hosts/idols-aquamarine/default.nix @@ -1,8 +1,6 @@ { disko, myvars, - lib, - pkgs-npu, ... }: ############################################################# @@ -71,13 +69,6 @@ in # profile's rootless Podman (modules/nixos/agent.nix), built from the `~/src` # checkout that ./preservation.nix keeps. - # Speech recognition runs on the NPU, see ./asr.nix. The driver and the - # compiler it loads come from NixOS/nixpkgs#570230, which is unmerged, so they - # are taken from that branch as `pkgs-npu`; the stock driver cannot find the - # compiler, the patched one loads it from its own store path. The service sets - # this itself -- the session variable is for manual runs. - environment.sessionVariables.ZE_ENABLE_ALT_DRIVERS = "${lib.getLib pkgs-npu.intel-npu-driver}/lib/libze_intel_npu.so"; - # The daemons of the hosts that build here (modules/nixos/base/remote-builders.nix). # Their host keys have no passphrase, so they only get the daemon protocol, as # nix.sshServe does. `--store daemon` hands builds to the system daemon instead diff --git a/hosts/idols-aquamarine/hardware-intel-cpu.nix b/hosts/idols-aquamarine/hardware-intel-cpu.nix index 0fe08ab0..ffb7d8e1 100644 --- a/hosts/idols-aquamarine/hardware-intel-cpu.nix +++ b/hosts/idols-aquamarine/hardware-intel-cpu.nix @@ -1,8 +1,14 @@ { pkgs, + pkgs-small, ... }: { + # The NPU serves ./asr.nix; the driver's compiler lookup is fixed by + # NixOS/nixpkgs#570230, which reached nixos-unstable-small first (WA-037). + hardware.cpu.intel.npu.enable = true; + nixpkgs.overlays = [ (_: _: { inherit (pkgs-small) intel-npu-driver; }) ]; + # Ad-hoc CPU idle-power diagnostics: package power, C-state residency and # wakeup attribution. Long-term RAPL export lives in the shared # modules/nixos/base/power-monitoring.nix module. diff --git a/outputs/default.nix b/outputs/default.nix index 233ae6d2..31f60a9b 100644 --- a/outputs/default.nix +++ b/outputs/default.nix @@ -61,7 +61,7 @@ let # to use chrome, we need to allow the installation of non-free software config.allowUnfree = true; }; - pkgs-npu = import inputs.nixpkgs-npu { + pkgs-small = import inputs.nixpkgs-small { inherit system; config.allowUnfree = true; };