Summary
When a long-running Determinate Nix build is interrupted, nix prints a crash banner and stack trace instead of treating the interrupt as a normal user cancellation.
I hit this while verifying a Home Manager config, but the bug appears to be the interrupt handling/reporting path itself, not the specific derivation.
Environment
- Determinate Nix:
nix (Determinate Nix 3.17.0) 2.33.3
- macOS:
26.2 (25C56)
- Host:
mbp2025
- Architecture:
arm64
Command
home-manager switch --flake .#mbp2025 --no-write-lock-file
This delegated to:
nix build .#homeConfigurations."mbp2025".activationPackage --out-link /var/folders/.../generation --no-write-lock-file
Repro Shape
I can reproduce the failure mode with a long-running build in a PTY-backed session:
- Start a long-running
nix build / home-manager switch
- Interrupt the build
- Determinate Nix prints a crash report
In my case the build was in:
building '/nix/store/anwmra3n5jp0zhb8qykdrv7marny6f12-grafana-dashboard-modules-root.drv'...
Actual Behavior
Instead of cleanly reporting interruption, Determinate Nix emits:
error: interrupted by the user
Determinate Nix crashed. This is a bug. Please report this at https://github.com/DeterminateSystems/nix-src/issues with the following information included:
Exception: nix::Interrupted: error: interrupted by the user
Stack trace:
0# nix::(anonymous namespace)::onTerminate() in /nix/store/w75hyfqa1p3vy04x8zn4237pqgqfwicp-determinate-nix-3.17.0/bin/nix
1# std::__terminate(void (*)()) in /nix/store/sg5gfy9cj0991jbd4xfyrl21rmqib9r2-libcxx-19.1.7/lib/libc++abi.1.0.dylib
2# __cxa_rethrow in /nix/store/sg5gfy9cj0991jbd4xfyrl21rmqib9r2-libcxx-19.1.7/lib/libc++abi.1.0.dylib
3# nix::ignoreExceptionExceptInterrupt(nix::Verbosity) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
4# nix::JSONLogger::write(...) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
5# nix::JSONLogger::logEI(...) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
6# nix::TeeLogger::logEI(...) in /nix/store/lg8s87vqpmigbgpkm7f7g549k946lqfa-determinate-nix-util-3.17.0/lib/libnixutil.2.33.3.dylib
7# nix::handleExceptions(...) in /nix/store/yijfh1mylylgbs1j7sp35n517wf7ccfc-determinate-nix-main-3.17.0/lib/libnixmain.2.33.3.dylib
8# main in /nix/store/w75hyfqa1p3vy04x8zn4237pqgqfwicp-determinate-nix-3.17.0/bin/nix
Expected Behavior
A user interrupt should be handled as a normal cancellation path:
- print
error: interrupted by the user or similar
- exit cleanly
- do not print
Determinate Nix crashed. This is a bug.
- do not emit a crash-style stack trace for an ordinary interrupt
Notes
I am not claiming the underlying build should have succeeded. The bug report is specifically about Determinate Nix treating an interrupt as an internal crash condition.
Summary
When a long-running Determinate Nix build is interrupted,
nixprints a crash banner and stack trace instead of treating the interrupt as a normal user cancellation.I hit this while verifying a Home Manager config, but the bug appears to be the interrupt handling/reporting path itself, not the specific derivation.
Environment
nix (Determinate Nix 3.17.0) 2.33.326.2 (25C56)mbp2025arm64Command
home-manager switch --flake .#mbp2025 --no-write-lock-fileThis delegated to:
nix build .#homeConfigurations."mbp2025".activationPackage --out-link /var/folders/.../generation --no-write-lock-fileRepro Shape
I can reproduce the failure mode with a long-running build in a PTY-backed session:
nix build/home-manager switchIn my case the build was in:
Actual Behavior
Instead of cleanly reporting interruption, Determinate Nix emits:
Expected Behavior
A user interrupt should be handled as a normal cancellation path:
error: interrupted by the useror similarDeterminate Nix crashed. This is a bug.Notes
I am not claiming the underlying build should have succeeded. The bug report is specifically about Determinate Nix treating an interrupt as an internal crash condition.