aboutsummaryrefslogtreecommitdiff
path: root/src/libcmd
diff options
context:
space:
mode:
authorLinus Heckemann <git@sphalerite.org>2023-03-13 21:08:52 +0100
committerLinus Heckemann <git@sphalerite.org>2023-03-13 21:08:52 +0100
commite91596eb6922157aaba17a858dc52244dd0e5688 (patch)
treefafdbbca4cc58a3011ed25d5ba0ef50178c04276 /src/libcmd
parent4a96125c3cbcb91eebb6ebda044841f3fab3bf21 (diff)
Allow specifying alternative paths for reading/writing flake locks
This allows having multiple separate lockfiles for a single project, which can be useful for testing against different versions of nixpkgs; it also allows tracking custom input overrides for remote flakes without requiring local clones of these flakes. For example, if I want to build Nix against my locally pinned nixpkgs, and have a lock file tracking this override independently of future updates to said nixpkgs: nix flake lock --output-lock-file /tmp/nix-flake.lock --override-input nixpkgs flake:nixpkgs nix build --reference-lock-file /tmp/nix-flake.lock Co-Authored-By: Will Fancher <elvishjerricco@gmail.com>
Diffstat (limited to 'src/libcmd')
-rw-r--r--src/libcmd/installables.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/libcmd/installables.cc b/src/libcmd/installables.cc
index 5ecf6293f..ce42e7770 100644
--- a/src/libcmd/installables.cc
+++ b/src/libcmd/installables.cc
@@ -103,6 +103,28 @@ MixFlakeOptions::MixFlakeOptions()
});
addFlag({
+ .longName = "reference-lock-file",
+ .description = "Read the given lock file instead of `flake.lock` within the top-level flake",
+ .category = category,
+ .labels = {"flake-lock-path"},
+ .handler = {[&](std::string lockFilePath) {
+ lockFlags.referenceLockFilePath = lockFilePath;
+ }},
+ .completer = completePath
+ });
+
+ addFlag({
+ .longName = "output-lock-file",
+ .description = "Write the given lock file instead of `flake.lock` within the top-level flake",
+ .category = category,
+ .labels = {"flake-lock-path"},
+ .handler = {[&](std::string lockFilePath) {
+ lockFlags.outputLockFilePath = lockFilePath;
+ }},
+ .completer = completePath
+ });
+
+ addFlag({
.longName = "inputs-from",
.description = "Use the inputs of the specified flake as registry entries.",
.category = category,