Add :i command to install a package to the current profile.

It works by running `nix-env -i <derivation path>`.

Fixes #15.
This commit is contained in:
Scott Olson 2016-02-16 00:24:50 -06:00
parent 30a7bfbebe
commit 82aca33899

View file

@ -281,6 +281,7 @@ bool NixRepl::processLine(string line)
<< " <x> = <expr> Bind expression to variable\n" << " <x> = <expr> Bind expression to variable\n"
<< " :a <expr> Add attributes from resulting set to scope\n" << " :a <expr> Add attributes from resulting set to scope\n"
<< " :b <expr> Build derivation\n" << " :b <expr> Build derivation\n"
<< " :i <expr> Build derivation, then install result into current profile\n"
<< " :l <path> Load Nix expression and add it to scope\n" << " :l <path> Load Nix expression and add it to scope\n"
<< " :p <expr> Evaluate and print expression recursively\n" << " :p <expr> Evaluate and print expression recursively\n"
<< " :q Exit nix-repl\n" << " :q Exit nix-repl\n"
@ -311,7 +312,7 @@ bool NixRepl::processLine(string line)
std::cout << showType(v) << std::endl; std::cout << showType(v) << std::endl;
} }
else if (command == ":b" || command == ":s") { else if (command == ":b" || command == ":i" || command == ":s") {
Value v; Value v;
evalString(arg, v); evalString(arg, v);
DrvInfo drvInfo(state); DrvInfo drvInfo(state);
@ -331,8 +332,11 @@ bool NixRepl::processLine(string line)
for (auto & i : drv.outputs) for (auto & i : drv.outputs)
std::cout << format(" %1% -> %2%") % i.first % i.second.path << std::endl; std::cout << format(" %1% -> %2%") % i.first % i.second.path << std::endl;
} }
} else } else if (command == ":i") {
runProgram("nix-env", Strings{"-i", drvPath});
} else {
runProgram("nix-shell", Strings{drvPath}); runProgram("nix-shell", Strings{drvPath});
}
} }
else if (command == ":p" || command == ":print") { else if (command == ":p" || command == ":print") {