maralorn / nix-output-monitor

Pipe your nix-build output through the nix-output-monitor a.k.a nom to get additional information while building.
GNU Affero General Public License v3.0
934 stars 28 forks source link

`shellHook` runs twice for `nom develop` #140

Open amuricys opened 4 months ago

amuricys commented 4 months ago

parts of it run twice immediately upon entering the shell, like the cp command below. I know this because the second attempt at copying from the flake below fails with "permission denied" (because the file is not writable, since it comes from the nix store). i know this is ugly (copying files from the store to the home directory, it's just for illustration purposes).

{
  description = "hey";

  inputs = {
    nixpkgs.url = github:nixos/nixpkgs/nixpkgs-unstable;
    flake-utils.url = github:numtide/flake-utils;
  };

  outputs = { self, nixpkgs, flake-utils, ... }:
    flake-utils.lib.eachSystem [ "aarch64-darwin" ] (system:
      let
        pkgs = import nixpkgs { inherit system; };
      in
      {
        devShell = pkgs.mkShell {
          src = [ ./. ];
          packages = [ pkgs.hello ];
          shellHook = ''
            cp ${hello}/bin/hello .
            whoami
          '';
        };
      });
}

the output is

nom develop
warning: Git tree '/Users/deco/work/banksy' is dirty
copying path '/nix/store/566f5isbvw014h7knmzmxa5l6hshx43k-hello-2.12.1' from 'https://cache.nixos.org'
nix-shell-env> building '/nix/store/ipdk9liiaglzgjarf06bzrmc5fhpf15a-nix-shell-env.drv'

warning: Git tree '/Users/deco/work/' is dirty
cp: cannot create regular file './hello': Permission denied
deco
(nix:nix-shell-env) H2TYHFDQD7: deco$ # press Ctrl-D
exit
deco

nix develop works as expected.

maralorn commented 4 months ago

Yes, this is a known limitation. From the readme:

The latter two commands work by calling nix shell or nix develop twice, the first time with overridden --run exit and monitoring the output, the second time passing output through to the user. This will incur a performance cost by doubling eval time.

amuricys commented 4 months ago

sorry for missing that! Feel free to close the issue :)

maralorn commented 4 months ago

Well, I agree that this is super annoying and I would love a better solution. So lets keep this open in the hope that someone suggests a fix!