about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Klink <flokli@flokli.de>2023-01-31T13·45+0100
committerclbot <clbot@tvl.fyi>2023-01-31T15·16+0000
commit2d24c5f260945216ca01371d4120f5d53f08b2cd (patch)
tree5053bbffefd5a41241ab6ea27fafc290e44e665f
parent9e809e21ccb1768567fc2516c5526ad0cdd56df0 (diff)
refactor(tvix/nix-compat): absorb //tvix/derivation r/5791
Put this in its src/derivation.

Change-Id: Ic047ab1c2da555a833ee454e10ef60c77537b617
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7967
Reviewed-by: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
Autosubmit: flokli <flokli@flokli.de>
-rw-r--r--tvix/Cargo.lock21
-rw-r--r--tvix/Cargo.nix88
-rw-r--r--tvix/Cargo.toml1
-rw-r--r--tvix/cli/Cargo.toml2
-rw-r--r--tvix/cli/src/derivation.rs9
-rw-r--r--tvix/cli/src/errors.rs2
-rw-r--r--tvix/derivation/Cargo.toml25
-rw-r--r--tvix/derivation/default.nix5
-rw-r--r--tvix/nix-compat/Cargo.toml8
-rw-r--r--tvix/nix-compat/src/derivation/derivation.rs (renamed from tvix/derivation/src/derivation.rs)10
-rw-r--r--tvix/nix-compat/src/derivation/errors.rs (renamed from tvix/derivation/src/errors.rs)2
-rw-r--r--tvix/nix-compat/src/derivation/mod.rs (renamed from tvix/derivation/src/lib.rs)0
-rw-r--r--tvix/nix-compat/src/derivation/output.rs (renamed from tvix/derivation/src/output.rs)5
-rw-r--r--tvix/nix-compat/src/derivation/string_escape.rs (renamed from tvix/derivation/src/string_escape.rs)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv (renamed from tvix/derivation/src/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv (renamed from tvix/derivation/src/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv (renamed from tvix/derivation/src/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv (renamed from tvix/derivation/src/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv (renamed from tvix/derivation/src/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv (renamed from tvix/derivation/src/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv (renamed from tvix/derivation/src/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv (renamed from tvix/derivation/src/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv.json (renamed from tvix/derivation/src/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv.json)0
-rw-r--r--tvix/nix-compat/src/derivation/tests/mod.rs (renamed from tvix/derivation/src/tests/mod.rs)21
-rw-r--r--tvix/nix-compat/src/derivation/validate.rs (renamed from tvix/derivation/src/validate.rs)4
-rw-r--r--tvix/nix-compat/src/derivation/write.rs (renamed from tvix/derivation/src/write.rs)4
-rw-r--r--tvix/nix-compat/src/lib.rs1
34 files changed, 60 insertions, 148 deletions
diff --git a/tvix/Cargo.lock b/tvix/Cargo.lock
index 46915411cb..7060c77314 100644
--- a/tvix/Cargo.lock
+++ b/tvix/Cargo.lock
@@ -1308,8 +1308,11 @@ dependencies = [
  "anyhow",
  "data-encoding",
  "glob",
+ "serde",
+ "serde_json",
  "sha2 0.10.6",
  "test-case",
+ "test-generator",
  "thiserror",
 ]
 
@@ -2623,31 +2626,15 @@ dependencies = [
  "clap 4.0.32",
  "data-encoding",
  "dirs",
+ "nix-compat",
  "rustyline",
  "smol_str",
  "ssri",
  "thiserror",
- "tvix-derivation",
  "tvix-eval",
 ]
 
 [[package]]
-name = "tvix-derivation"
-version = "0.1.0"
-dependencies = [
- "anyhow",
- "data-encoding",
- "glob",
- "nix-compat",
- "serde",
- "serde_json",
- "sha2 0.10.6",
- "test-case",
- "test-generator",
- "thiserror",
-]
-
-[[package]]
 name = "tvix-eval"
 version = "0.1.0"
 dependencies = [
diff --git a/tvix/Cargo.nix b/tvix/Cargo.nix
index aa9fa9dbf8..70c022ddce 100644
--- a/tvix/Cargo.nix
+++ b/tvix/Cargo.nix
@@ -63,16 +63,6 @@ rec {
       # File a bug if you depend on any for non-debug work!
       debug = internal.debugCrate { inherit packageId; };
     };
-    "tvix-derivation" = rec {
-      packageId = "tvix-derivation";
-      build = internal.buildRustCrateWithFeatures {
-        packageId = "tvix-derivation";
-      };
-
-      # Debug support which might change between releases.
-      # File a bug if you depend on any for non-debug work!
-      debug = internal.debugCrate { inherit packageId; };
-    };
     "tvix-eval" = rec {
       packageId = "tvix-eval";
       build = internal.buildRustCrateWithFeatures {
@@ -3759,6 +3749,11 @@ rec {
             packageId = "glob";
           }
           {
+            name = "serde";
+            packageId = "serde";
+            features = [ "derive" ];
+          }
+          {
             name = "sha2";
             packageId = "sha2 0.10.6";
           }
@@ -3769,9 +3764,17 @@ rec {
         ];
         devDependencies = [
           {
+            name = "serde_json";
+            packageId = "serde_json";
+          }
+          {
             name = "test-case";
             packageId = "test-case";
           }
+          {
+            name = "test-generator";
+            packageId = "test-generator";
+          }
         ];
 
       };
@@ -7772,6 +7775,10 @@ rec {
             packageId = "dirs";
           }
           {
+            name = "nix-compat";
+            packageId = "nix-compat";
+          }
+          {
             name = "rustyline";
             packageId = "rustyline";
           }
@@ -7788,73 +7795,12 @@ rec {
             packageId = "thiserror";
           }
           {
-            name = "tvix-derivation";
-            packageId = "tvix-derivation";
-          }
-          {
             name = "tvix-eval";
             packageId = "tvix-eval";
           }
         ];
 
       };
-      "tvix-derivation" = rec {
-        crateName = "tvix-derivation";
-        version = "0.1.0";
-        edition = "2021";
-        # We can't filter paths with references in Nix 2.4
-        # See https://github.com/NixOS/nix/issues/5410
-        src =
-          if (lib.versionOlder builtins.nixVersion "2.4pre20211007")
-          then lib.cleanSourceWith { filter = sourceFilter; src = ./derivation; }
-          else ./derivation;
-        dependencies = [
-          {
-            name = "anyhow";
-            packageId = "anyhow";
-          }
-          {
-            name = "data-encoding";
-            packageId = "data-encoding";
-          }
-          {
-            name = "glob";
-            packageId = "glob";
-          }
-          {
-            name = "nix-compat";
-            packageId = "nix-compat";
-          }
-          {
-            name = "serde";
-            packageId = "serde";
-            features = [ "derive" ];
-          }
-          {
-            name = "sha2";
-            packageId = "sha2 0.10.6";
-          }
-          {
-            name = "thiserror";
-            packageId = "thiserror";
-          }
-        ];
-        devDependencies = [
-          {
-            name = "serde_json";
-            packageId = "serde_json";
-          }
-          {
-            name = "test-case";
-            packageId = "test-case";
-          }
-          {
-            name = "test-generator";
-            packageId = "test-generator";
-          }
-        ];
-
-      };
       "tvix-eval" = rec {
         crateName = "tvix-eval";
         version = "0.1.0";
diff --git a/tvix/Cargo.toml b/tvix/Cargo.toml
index b125a94ad5..079d36218b 100644
--- a/tvix/Cargo.toml
+++ b/tvix/Cargo.toml
@@ -19,7 +19,6 @@
 
 members = [
   "cli",
-  "derivation",
   "eval",
   "eval/builtin-macros",
   "nar",
diff --git a/tvix/cli/Cargo.toml b/tvix/cli/Cargo.toml
index 5bb7baa158..69b54bd299 100644
--- a/tvix/cli/Cargo.toml
+++ b/tvix/cli/Cargo.toml
@@ -8,8 +8,8 @@ name = "tvix"
 path = "src/main.rs"
 
 [dependencies]
+nix-compat = { path = "../nix-compat" }
 tvix-eval = { path = "../eval" }
-tvix-derivation = { path = "../derivation" }
 rustyline = "10.0.0"
 clap = { version = "4.0", features = ["derive", "env"] }
 dirs = "4.0.0"
diff --git a/tvix/cli/src/derivation.rs b/tvix/cli/src/derivation.rs
index 2b12f6dd73..5014076ace 100644
--- a/tvix/cli/src/derivation.rs
+++ b/tvix/cli/src/derivation.rs
@@ -1,10 +1,10 @@
 //! Implements `builtins.derivation`, the core of what makes Nix build packages.
 
 use data_encoding::BASE64;
+use nix_compat::derivation::{Derivation, Hash};
 use std::cell::RefCell;
 use std::collections::{btree_map, BTreeSet};
 use std::rc::Rc;
-use tvix_derivation::{Derivation, Hash};
 use tvix_eval::builtin_macros::builtins;
 use tvix_eval::{AddContext, CoercionKind, ErrorKind, NixAttrs, NixList, Value, VM};
 
@@ -416,9 +416,10 @@ mod derivation_builtins {
 
         // TODO: fail on derivation references (only "plain" is allowed here)
 
-        let path = tvix_derivation::path_with_references(name.as_str(), content.as_str(), refs)
-            .map_err(Error::InvalidDerivation)?
-            .to_absolute_path();
+        let path =
+            nix_compat::derivation::path_with_references(name.as_str(), content.as_str(), refs)
+                .map_err(Error::InvalidDerivation)?
+                .to_absolute_path();
 
         state.borrow_mut().plain(&path);
 
diff --git a/tvix/cli/src/errors.rs b/tvix/cli/src/errors.rs
index cc402c9a9d..5315b24864 100644
--- a/tvix/cli/src/errors.rs
+++ b/tvix/cli/src/errors.rs
@@ -1,6 +1,6 @@
+use nix_compat::derivation::DerivationError;
 use std::rc::Rc;
 use thiserror::Error;
-use tvix_derivation::DerivationError;
 
 /// Errors related to derivation construction
 #[derive(Debug, Error, PartialEq)]
diff --git a/tvix/derivation/Cargo.toml b/tvix/derivation/Cargo.toml
deleted file mode 100644
index ee629b6ad3..0000000000
--- a/tvix/derivation/Cargo.toml
+++ /dev/null
@@ -1,25 +0,0 @@
-[package]
-name = "tvix-derivation"
-version = "0.1.0"
-edition = "2021"
-
-# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
-
-[dependencies]
-anyhow = "1.0.68"
-data-encoding = "2.3.3"
-glob = "0.3.0"
-nix-compat = { path = "../nix-compat" }
-serde = { version = "1.0", features = ["derive"] }
-sha2 = "0.10.6"
-thiserror = "1.0.38"
-
-[dev-dependencies.test-generator]
-# This fork of test-generator adds support for cargo workspaces, see
-# also https://github.com/frehberg/test-generator/pull/14
-git = "https://github.com/JamesGuthrie/test-generator.git"
-rev = "82e799979980962aec1aa324ec6e0e4cad781f41"
-
-[dev-dependencies]
-serde_json = "1.0"
-test-case = "2.2.2"
diff --git a/tvix/derivation/default.nix b/tvix/derivation/default.nix
deleted file mode 100644
index 40e2a64760..0000000000
--- a/tvix/derivation/default.nix
+++ /dev/null
@@ -1,5 +0,0 @@
-{ depot, ... }:
-
-depot.tvix.crates.workspaceMembers.tvix-derivation.build.override {
-  runTests = true;
-}
diff --git a/tvix/nix-compat/Cargo.toml b/tvix/nix-compat/Cargo.toml
index 484285e780..7758ea995c 100644
--- a/tvix/nix-compat/Cargo.toml
+++ b/tvix/nix-compat/Cargo.toml
@@ -9,8 +9,16 @@ edition = "2021"
 anyhow = "1.0.68"
 data-encoding = "2.3.3"
 glob = "0.3.0"
+serde = { version = "1.0", features = ["derive"] }
 sha2 = "0.10.6"
 thiserror = "1.0.38"
 
 [dev-dependencies]
+serde_json = "1.0"
 test-case = "2.2.2"
+
+[dev-dependencies.test-generator]
+# This fork of test-generator adds support for cargo workspaces, see
+# also https://github.com/frehberg/test-generator/pull/14
+git = "https://github.com/JamesGuthrie/test-generator.git"
+rev = "82e799979980962aec1aa324ec6e0e4cad781f41"
diff --git a/tvix/derivation/src/derivation.rs b/tvix/nix-compat/src/derivation/derivation.rs
index d58fef13bc..c9a45d9c9b 100644
--- a/tvix/derivation/src/derivation.rs
+++ b/tvix/nix-compat/src/derivation/derivation.rs
@@ -1,8 +1,8 @@
-use crate::output::{Hash, Output};
-use crate::write;
-use crate::DerivationError;
-use nix_compat::nixbase32;
-use nix_compat::store_path::{StorePath, STORE_DIR};
+use crate::derivation::output::{Hash, Output};
+use crate::derivation::write;
+use crate::derivation::DerivationError;
+use crate::nixbase32;
+use crate::store_path::{StorePath, STORE_DIR};
 use serde::{Deserialize, Serialize};
 use sha2::{Digest, Sha256};
 use std::collections::BTreeSet;
diff --git a/tvix/derivation/src/errors.rs b/tvix/nix-compat/src/derivation/errors.rs
index b07abfab51..0dcad9a534 100644
--- a/tvix/derivation/src/errors.rs
+++ b/tvix/nix-compat/src/derivation/errors.rs
@@ -1,4 +1,4 @@
-use nix_compat::{nixbase32::Nixbase32DecodeError, store_path::ParseStorePathError};
+use crate::{nixbase32::Nixbase32DecodeError, store_path::ParseStorePathError};
 use thiserror::Error;
 
 /// Errors that can occur during the validation of Derivation structs.
diff --git a/tvix/derivation/src/lib.rs b/tvix/nix-compat/src/derivation/mod.rs
index 1b82251bf6..1b82251bf6 100644
--- a/tvix/derivation/src/lib.rs
+++ b/tvix/nix-compat/src/derivation/mod.rs
diff --git a/tvix/derivation/src/output.rs b/tvix/nix-compat/src/derivation/output.rs
index 828f42be74..9aef7172ae 100644
--- a/tvix/derivation/src/output.rs
+++ b/tvix/nix-compat/src/derivation/output.rs
@@ -1,8 +1,7 @@
-use nix_compat::{nixbase32, store_path::StorePath};
+use crate::derivation::OutputError;
+use crate::{nixbase32, store_path::StorePath};
 use serde::{Deserialize, Serialize};
 
-use crate::OutputError;
-
 #[derive(Clone, Debug, Default, Eq, PartialEq, Serialize, Deserialize)]
 pub struct Output {
     pub path: String,
diff --git a/tvix/derivation/src/string_escape.rs b/tvix/nix-compat/src/derivation/string_escape.rs
index 0e1dbe516f..0e1dbe516f 100644
--- a/tvix/derivation/src/string_escape.rs
+++ b/tvix/nix-compat/src/derivation/string_escape.rs
diff --git a/tvix/derivation/src/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv
index a4fea3c5f4..a4fea3c5f4 100644
--- a/tvix/derivation/src/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv.json
index c8bbc4cbb5..c8bbc4cbb5 100644
--- a/tvix/derivation/src/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/0hm2f1psjpcwg8fijsmr4wwxrx59s092-bar.drv.json
diff --git a/tvix/derivation/src/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv
index f0d9230a5a..f0d9230a5a 100644
--- a/tvix/derivation/src/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv.json
index 9cb0b43b4c..9cb0b43b4c 100644
--- a/tvix/derivation/src/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/292w8yzv5nn7nhdpxcs8b7vby2p27s09-nested-json.drv.json
diff --git a/tvix/derivation/src/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv
index a2cf9d31f9..a2cf9d31f9 100644
--- a/tvix/derivation/src/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv.json
index 957a85ccab..957a85ccab 100644
--- a/tvix/derivation/src/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/4wvvbi4jwn0prsdxb7vs673qa5h9gr7x-foo.drv.json
diff --git a/tvix/derivation/src/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv
index bbe88c02c7..bbe88c02c7 100644
--- a/tvix/derivation/src/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv.json
index f8f33c1bba..f8f33c1bba 100644
--- a/tvix/derivation/src/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/52a9id8hx688hvlnz4d1n25ml1jdykz0-unicode.drv.json
diff --git a/tvix/derivation/src/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv
index 4b9338c0b9..4b9338c0b9 100644
--- a/tvix/derivation/src/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv.json
index 74e3d7df55..74e3d7df55 100644
--- a/tvix/derivation/src/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/9lj1lkjm2ag622mh4h9rpy6j607an8g2-structured-attrs.drv.json
diff --git a/tvix/derivation/src/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv
index 1699c2a75e..1699c2a75e 100644
--- a/tvix/derivation/src/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv.json
index 831d27956d..831d27956d 100644
--- a/tvix/derivation/src/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/ch49594n9avinrf8ip0aslidkc4lxkqv-foo.drv.json
diff --git a/tvix/derivation/src/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv
index 523612238c..523612238c 100644
--- a/tvix/derivation/src/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv.json
index 0bd7a2991c..0bd7a2991c 100644
--- a/tvix/derivation/src/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/h32dahq0bx5rp1krcdx3a53asj21jvhk-has-multi-out.drv.json
diff --git a/tvix/derivation/src/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv b/tvix/nix-compat/src/derivation/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv
index 559e93ed0e..559e93ed0e 100644
--- a/tvix/derivation/src/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv
diff --git a/tvix/derivation/src/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv.json b/tvix/nix-compat/src/derivation/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv.json
index e297d27159..e297d27159 100644
--- a/tvix/derivation/src/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv.json
+++ b/tvix/nix-compat/src/derivation/tests/derivation_tests/ss2p4wmxijn652haqyd7dckxwl4c7hxx-bar.drv.json
diff --git a/tvix/derivation/src/tests/mod.rs b/tvix/nix-compat/src/derivation/tests/mod.rs
index 2906bae1f7..57c08f5a75 100644
--- a/tvix/derivation/src/tests/mod.rs
+++ b/tvix/nix-compat/src/derivation/tests/mod.rs
@@ -1,6 +1,6 @@
+use crate::derivation::output::{Hash, Output};
 use crate::derivation::Derivation;
-use crate::output::{Hash, Output};
-use nix_compat::store_path::StorePath;
+use crate::store_path::StorePath;
 use std::collections::BTreeSet;
 use std::fs::File;
 use std::io::Read;
@@ -8,7 +8,7 @@ use std::path::Path;
 use test_case::test_case;
 use test_generator::test_resources;
 
-const RESOURCES_PATHS: &str = "src/tests/derivation_tests";
+const RESOURCES_PATHS: &str = "src/derivation/tests/derivation_tests";
 
 fn read_file(path: &str) -> String {
     let path = Path::new(path);
@@ -20,7 +20,7 @@ fn read_file(path: &str) -> String {
     return data;
 }
 
-#[test_resources("src/tests/derivation_tests/*.drv")]
+#[test_resources("src/derivation/tests/derivation_tests/*.drv")]
 fn check_serizaliation(path_to_drv_file: &str) {
     let data = read_file(&format!("{}.json", path_to_drv_file));
     let derivation: Derivation = serde_json::from_str(&data).expect("JSON was not well-formatted");
@@ -33,7 +33,7 @@ fn check_serizaliation(path_to_drv_file: &str) {
     assert_eq!(expected, serialized_derivation);
 }
 
-#[test_resources("src/tests/derivation_tests/*.drv")]
+#[test_resources("src/derivation/tests/derivation_tests/*.drv")]
 fn validate(path_to_drv_file: &str) {
     let data = read_file(&format!("{}.json", path_to_drv_file));
     let derivation: Derivation = serde_json::from_str(&data).expect("JSON was not well-formatted");
@@ -43,7 +43,7 @@ fn validate(path_to_drv_file: &str) {
         .expect("derivation failed to validate")
 }
 
-#[test_resources("src/tests/derivation_tests/*.drv")]
+#[test_resources("src/derivation/tests/derivation_tests/*.drv")]
 fn check_to_string(path_to_drv_file: &str) {
     let data = read_file(&format!("{}.json", path_to_drv_file));
     let derivation: Derivation = serde_json::from_str(&data).expect("JSON was not well-formatted");
@@ -313,7 +313,7 @@ fn path_with_zero_references() {
     // nix-repl> builtins.toFile "foo" "bar"
     // "/nix/store/vxjiwkjkn7x4079qvh1jkl5pn05j2aw0-foo"
 
-    let store_path = crate::path_with_references("foo", "bar", Vec::<String>::new())
+    let store_path = crate::derivation::path_with_references("foo", "bar", Vec::<String>::new())
         .expect("path_with_references() should succeed");
 
     assert_eq!(
@@ -329,12 +329,13 @@ fn path_with_non_zero_references() {
     // nix-repl> builtins.toFile "baz" "${builtins.toFile "foo" "bar"}"
     // "/nix/store/5xd714cbfnkz02h2vbsj4fm03x3f15nf-baz"
 
-    let inner = crate::path_with_references("foo", "bar", Vec::<String>::new())
+    let inner = crate::derivation::path_with_references("foo", "bar", Vec::<String>::new())
         .expect("path_with_references() should succeed");
     let inner_path = inner.to_absolute_path();
 
-    let outer = crate::path_with_references("baz", &inner_path, vec![inner_path.as_str()])
-        .expect("path_with_references() should succeed");
+    let outer =
+        crate::derivation::path_with_references("baz", &inner_path, vec![inner_path.as_str()])
+            .expect("path_with_references() should succeed");
 
     assert_eq!(
         outer.to_absolute_path().as_str(),
diff --git a/tvix/derivation/src/validate.rs b/tvix/nix-compat/src/derivation/validate.rs
index 05f1e1ad71..7456f930d1 100644
--- a/tvix/derivation/src/validate.rs
+++ b/tvix/nix-compat/src/derivation/validate.rs
@@ -1,5 +1,5 @@
-use crate::{derivation::Derivation, DerivationError};
-use nix_compat::store_path::StorePath;
+use crate::derivation::{Derivation, DerivationError};
+use crate::store_path::StorePath;
 
 impl Derivation {
     /// validate ensures a Derivation struct is properly populated,
diff --git a/tvix/derivation/src/write.rs b/tvix/nix-compat/src/derivation/write.rs
index fd8800abd8..9423ef2e6a 100644
--- a/tvix/derivation/src/write.rs
+++ b/tvix/nix-compat/src/derivation/write.rs
@@ -3,8 +3,8 @@
 //!
 //! [ATerm]: http://program-transformation.org/Tools/ATermFormat.html
 
-use crate::output::Output;
-use crate::string_escape::escape_string;
+use crate::derivation::output::Output;
+use crate::derivation::string_escape::escape_string;
 use std::collections::BTreeSet;
 use std::{collections::BTreeMap, fmt, fmt::Write};
 
diff --git a/tvix/nix-compat/src/lib.rs b/tvix/nix-compat/src/lib.rs
index 6ca48e9ef0..59d687ee7f 100644
--- a/tvix/nix-compat/src/lib.rs
+++ b/tvix/nix-compat/src/lib.rs
@@ -1,2 +1,3 @@
+pub mod derivation;
 pub mod nixbase32;
 pub mod store_path;