diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 83eccb818..a5b539202 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -4299,25 +4299,16 @@ void EvalState::createBaseEnv()
         .impureOnly = true,
     });
 
-    v.mkString(nixVersion);
+    v.mkString("2.18.3-lix");
     addConstant("__nixVersion", v, {
         .type = nString,
         .doc = R"(
-          The version of Nix.
+          Legacy version of Nix. Always returns "2.18.3-lix" on Lix.
 
-          For example, where the command line returns the current Nix version,
-
-          ```shell-session
-          $ nix --version
-          nix (Nix) 2.16.0
-          ```
-
-          the Nix language evaluator returns the same value:
-
-          ```nix-repl
-          nix-repl> builtins.nixVersion
-          "2.16.0"
-          ```
+          To determine if features exist, Nix scripts should instead use direct
+          means of feature detection, such as checking for existence of
+          builtins they want to use. Doing so allows for much better compatibility
+          across implementations.
         )",
     });
 
diff --git a/tests/unit/libexpr/primops.cc b/tests/unit/libexpr/primops.cc
index 71e838b32..bd174a6c0 100644
--- a/tests/unit/libexpr/primops.cc
+++ b/tests/unit/libexpr/primops.cc
@@ -611,7 +611,7 @@ namespace nix {
 
     TEST_F(PrimOpTest, nixVersion) {
         auto v = eval("builtins.nixVersion");
-        ASSERT_THAT(v, IsStringEq(nixVersion));
+        ASSERT_THAT(v, IsStringEq("2.18.3-lix"));
     }
 
     TEST_F(PrimOpTest, currentSystem) {