diff --git a/nixos/modules/programs/nix-required-mounts.nix b/nixos/modules/programs/nix-required-mounts.nix index a7ec09fe5f9a..962116c97575 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 { @@ -112,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 new file mode 100644 index 000000000000..81f1a4f8ca84 --- /dev/null +++ b/pkgs/by-name/ni/nix-required-mounts/eval-test.nix @@ -0,0 +1,26 @@ +{ + nixos, + lib, + runCommand, +}: +let + base = nixos { + services.userborn.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; + }; + 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 +'' 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 = {