From 8c4f5dcb9ca9d217b9c292b2a418f83b6fd9d103 Mon Sep 17 00:00:00 2001 From: Adam Dinwoodie Date: Mon, 15 Jul 2024 22:46:20 +0100 Subject: [PATCH] home-manager: add repl subcommand Similar to the `nixos-rebuild repl` command, `home-manager repl` will launch the Nix read-evaluate-print-loop environment with the Home Manager configuration loaded. To make that more useful, also add the pkgs and options attributes from the generated Home Manager configuration to the environment. This doesn't currently work with flakes, because I don't use them and I'm not confident I could safely test that function. --- home-manager/home-manager | 30 +++++++++++++++++++++++++++++- home-manager/home-manager.nix | 2 +- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/home-manager/home-manager b/home-manager/home-manager index 5bf796b47..65363e5cc 100644 --- a/home-manager/home-manager +++ b/home-manager/home-manager @@ -634,6 +634,28 @@ function doBuild() { presentNews } +function doRepl() { + setFlakeAttribute + if [[ -v FLAKE_CONFIG_URI ]]; then + _i 'home-manager repl does not (yet) support flakes' >&2 + return 1 + fi + + setConfigFile + + extraArgs=() + for p in "${EXTRA_NIX_PATH[@]}"; do + extraArgs+=(-I "$p") + done + + exec nix repl \ + --file '' \ + "${extraArgs[@]}" \ + "${PASSTHROUGH_OPTS[@]}" \ + --argstr confPath "$HOME_MANAGER_CONFIG" \ + --argstr confAttr "$HOME_MANAGER_CONFIG_ATTRIBUTE" +} + function doSwitch() { setWorkDir @@ -937,6 +959,9 @@ function doHelp() { echo " Remove indicated generations. Use 'generations' command to" echo " find suitable generation numbers." echo + echo " repl" + echo " Opens the configuration in \`nix repl\`" + echo echo " expire-generations TIMESTAMP" echo " Remove generations older than TIMESTAMP where TIMESTAMP is" echo " interpreted as in the -d argument of the date tool. For" @@ -960,7 +985,7 @@ while [[ $# -gt 0 ]]; do opt="$1" shift case $opt in - build|init|instantiate|option|edit|expire-generations|generations|help|news|packages|remove-generations|switch|uninstall) + build|init|instantiate|option|edit|expire-generations|generations|help|news|packages|remove-generations|repl|switch|uninstall) COMMAND="$opt" ;; -A) @@ -1105,6 +1130,9 @@ case $COMMAND in packages) doListPackages ;; + repl) + doRepl + ;; news) doShowNews --all ;; diff --git a/home-manager/home-manager.nix b/home-manager/home-manager.nix index 13a638fd8..53192661f 100644 --- a/home-manager/home-manager.nix +++ b/home-manager/home-manager.nix @@ -15,4 +15,4 @@ let check = check; }; -in { inherit (env) activationPackage config; } +in { inherit (env) activationPackage config pkgs options; }