From 02b74722d86f55b367011ac4b9ebafe7ffcbb11c Mon Sep 17 00:00:00 2001 From: Cameron Smith Date: Wed, 11 Feb 2026 22:51:11 -0500 Subject: [PATCH 1/2] nixos/nix-required-mounts: fix infinite recursion with userborn --- .../modules/programs/nix-required-mounts.nix | 7 +++--- .../ni/nix-required-mounts/eval-test.nix | 23 +++++++++++++++++++ .../ni/nix-required-mounts/package.nix | 1 + 3 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 pkgs/by-name/ni/nix-required-mounts/eval-test.nix diff --git a/nixos/modules/programs/nix-required-mounts.nix b/nixos/modules/programs/nix-required-mounts.nix index a7ec09fe5f9a..df00047f6565 100644 --- a/nixos/modules/programs/nix-required-mounts.nix +++ b/nixos/modules/programs/nix-required-mounts.nix @@ -47,10 +47,7 @@ let ); driverPaths = [ - # opengl: - # NOTE: Since driverLink is just a symlink, we need to include its target as well. pkgs.addDriverRunpath.driverLink - config.systemd.tmpfiles.settings.graphics-driver."/run/opengl-driver"."L+".argument # mesa: config.hardware.graphics.package @@ -62,7 +59,9 @@ let defaults = { nvidia-gpu.onFeatures = package.allowedPatterns.nvidia-gpu.onFeatures; nvidia-gpu.paths = package.allowedPatterns.nvidia-gpu.paths ++ driverPaths; - nvidia-gpu.unsafeFollowSymlinks = false; + # TODO: Refactor `hardware.graphics` to ease referencing the closure + # NOTE: A naive implementation may e.g. introduce a conditional infinite recursion (https://github.com/NixOS/nixpkgs/pull/488199) + nvidia-gpu.unsafeFollowSymlinks = true; }; in { diff --git a/pkgs/by-name/ni/nix-required-mounts/eval-test.nix b/pkgs/by-name/ni/nix-required-mounts/eval-test.nix new file mode 100644 index 000000000000..ba7fc1234033 --- /dev/null +++ b/pkgs/by-name/ni/nix-required-mounts/eval-test.nix @@ -0,0 +1,23 @@ +{ + nixos, + lib, + runCommand, +}: +let + machine = nixos { + services.userborn.enable = true; + hardware.graphics.enable = true; + programs.nix-required-mounts = { + enable = true; + presets.nvidia-gpu.enable = true; + }; + fileSystems."/".device = "/dev/null"; + boot.loader.grub.enable = false; + system.stateVersion = lib.trivial.release; + }; +in +runCommand "nix-required-mounts-eval-nvidia-gpu-preset" { } '' + echo "Successfully evaluated ${machine.config.system.build.toplevel}" + echo "This means that combining nix-required-mounts with userborn no longer causes infinite recursion (#488199)" + touch $out +'' diff --git a/pkgs/by-name/ni/nix-required-mounts/package.nix b/pkgs/by-name/ni/nix-required-mounts/package.nix index 89069a112051..9f91c14692a1 100644 --- a/pkgs/by-name/ni/nix-required-mounts/package.nix +++ b/pkgs/by-name/ni/nix-required-mounts/package.nix @@ -55,6 +55,7 @@ python3Packages.buildPythonApplication { inherit allowedPatterns; tests = { inherit (nixosTests) nix-required-mounts; + eval-nvidia-gpu-preset = callPackage ./eval-test.nix { }; }; }; meta = { From 867b4878b711adce951ee21e5e0bdc30039d6e80 Mon Sep 17 00:00:00 2001 From: Cameron Smith Date: Sun, 8 Feb 2026 14:29:07 -0500 Subject: [PATCH 2/2] nixos/nix-required-mounts: nvidia-gpu preset requires hardware.graphics --- nixos/modules/programs/nix-required-mounts.nix | 1 + pkgs/by-name/ni/nix-required-mounts/eval-test.nix | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/nixos/modules/programs/nix-required-mounts.nix b/nixos/modules/programs/nix-required-mounts.nix index df00047f6565..962116c97575 100644 --- a/nixos/modules/programs/nix-required-mounts.nix +++ b/nixos/modules/programs/nix-required-mounts.nix @@ -111,6 +111,7 @@ in lib.mkMerge [ { nix.settings.pre-build-hook = lib.getExe cfg.package; } (lib.mkIf cfg.presets.nvidia-gpu.enable { + hardware.graphics.enable = lib.mkDefault true; nix.settings.system-features = cfg.allowedPatterns.nvidia-gpu.onFeatures; programs.nix-required-mounts.allowedPatterns = { inherit (defaults) nvidia-gpu; diff --git a/pkgs/by-name/ni/nix-required-mounts/eval-test.nix b/pkgs/by-name/ni/nix-required-mounts/eval-test.nix index ba7fc1234033..81f1a4f8ca84 100644 --- a/pkgs/by-name/ni/nix-required-mounts/eval-test.nix +++ b/pkgs/by-name/ni/nix-required-mounts/eval-test.nix @@ -4,9 +4,8 @@ runCommand, }: let - machine = nixos { + base = nixos { services.userborn.enable = true; - hardware.graphics.enable = true; programs.nix-required-mounts = { enable = true; presets.nvidia-gpu.enable = true; @@ -15,8 +14,12 @@ let boot.loader.grub.enable = false; system.stateVersion = lib.trivial.release; }; + machine = base.extendModules { + modules = [ { hardware.graphics.enable = true; } ]; + }; in runCommand "nix-required-mounts-eval-nvidia-gpu-preset" { } '' + echo "Successfully evaluated ${base.config.system.build.toplevel}" echo "Successfully evaluated ${machine.config.system.build.toplevel}" echo "This means that combining nix-required-mounts with userborn no longer causes infinite recursion (#488199)" touch $out