diff --git a/Source/cmFindBase.cxx b/Source/cmFindBase.cxx
index b8d4765692..902c1e5290 100644
--- a/Source/cmFindBase.cxx
+++ b/Source/cmFindBase.cxx
@@ -312,6 +312,11 @@ void cmFindBase::FillCMakeEnvironmentPath()
   // Add CMAKE_*_PATH environment variables
   std::string var = cmStrCat("CMAKE_", this->CMakePathName, "_PATH");
   paths.AddEnvPrefixPath("CMAKE_PREFIX_PATH");
+  if (this->CMakePathName != "PROGRAM") {
+    // Like CMAKE_PREFIX_PATH except when searching for programs. Programs need
+    // to be located via PATH
+    paths.AddEnvPrefixPath("NIXPKGS_CMAKE_PREFIX_PATH");
+  }
   paths.AddEnvPath(var);
 
   if (this->CMakePathName == "PROGRAM") {
diff --git a/Source/cmFindPackageCommand.cxx b/Source/cmFindPackageCommand.cxx
index 6201894fd1..9533862a2b 100644
--- a/Source/cmFindPackageCommand.cxx
+++ b/Source/cmFindPackageCommand.cxx
@@ -2467,6 +2467,7 @@ void cmFindPackageCommand::FillPrefixesCMakeEnvironment()
 
   // And now the general CMake environment variables
   paths.AddEnvPath("CMAKE_PREFIX_PATH");
+  paths.AddEnvPath("NIXPKGS_CMAKE_PREFIX_PATH");
   if (this->DebugModeEnabled()) {
     debugBuffer = cmStrCat(debugBuffer,
                            "CMAKE_PREFIX_PATH env variable "
