aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/manual/rl-next/upgrade-nix-override.md6
-rw-r--r--src/nix/upgrade-nix.cc17
2 files changed, 23 insertions, 0 deletions
diff --git a/doc/manual/rl-next/upgrade-nix-override.md b/doc/manual/rl-next/upgrade-nix-override.md
new file mode 100644
index 000000000..d3046ff13
--- /dev/null
+++ b/doc/manual/rl-next/upgrade-nix-override.md
@@ -0,0 +1,6 @@
+---
+synopsis: add --store-path argument to `nix upgrade-nix`, to manually specify the Nix to upgrade to
+cls: 953
+---
+
+`nix upgrade-nix` by default downloads a manifest to find the new Nix version to upgrade to, but now you can specify `--store-path` to upgrade Nix to an arbitrary version from the Nix store.
diff --git a/src/nix/upgrade-nix.cc b/src/nix/upgrade-nix.cc
index 4940d93f8..31a051246 100644
--- a/src/nix/upgrade-nix.cc
+++ b/src/nix/upgrade-nix.cc
@@ -21,6 +21,8 @@ struct CmdUpgradeNix : MixDryRun, EvalCommand
Path profileDir;
std::string storePathsUrl = "https://github.com/NixOS/nixpkgs/raw/master/nixos/modules/installer/tools/nix-fallback-paths.nix";
+ std::optional<Path> overrideStorePath;
+
CmdUpgradeNix()
{
addFlag({
@@ -32,6 +34,13 @@ struct CmdUpgradeNix : MixDryRun, EvalCommand
});
addFlag({
+ .longName = "store-path",
+ .description = "A specific store path to upgrade Nix to",
+ .labels = {"store-path"},
+ .handler = {&overrideStorePath},
+ });
+
+ addFlag({
.longName = "nix-store-paths-url",
.description = "The URL of the file that contains the store paths of the latest Nix release.",
.labels = {"url"},
@@ -246,6 +255,14 @@ struct CmdUpgradeNix : MixDryRun, EvalCommand
/* Return the store path of the latest stable Nix. */
StorePath getLatestNix(ref<Store> store)
{
+ if (this->overrideStorePath) {
+ printTalkative(
+ "skipping Nix version query and using '%s' as latest Nix",
+ *this->overrideStorePath
+ );
+ return store->parseStorePath(*this->overrideStorePath);
+ }
+
Activity act(*logger, lvlInfo, actUnknown, "querying latest Nix version");
// FIXME: use nixos.org?