Adapted to home-manager configuration, made it use nix run to support flakes and inferno for magnitudes faster svg generation:
home.packages =
let
# https://discourse.nixos.org/t/nix-flamegraph-or-profiling-tool/33333
stackCollapse = pkgs.writeTextFile {
name = "stack-collapse.py";
destination = "/bin/stack-collapse.py";
text = builtins.readFile (builtins.fetchurl
{
url = "https://raw.githubusercontent.com/NixOS/nix/master/contrib/stack-collapse.py";
sha256 = "sha256:0mi9cf3nx7xjxcrvll1hlkhmxiikjn0w95akvwxs50q270pafbjw";
});
executable = true;
};
nixFunctionCalls = pkgs.writeShellApplication {
name = "nixFunctionCalls";
runtimeInputs = [ stackCollapse pkgs.inferno ];
text = builtins.readFile ./nix-function-calls.sh;
checkPhase = "";
};
in
[ nixFunctionCalls ];
#!/usr/bin/env zsh
WORKDIR=$(mktemp -d)
nix eval -vvvvvvvvvvvvvvvvvvvv --raw --option trace-function-calls true $1 1>/dev/null 2> $WORKDIR/nix-function-calls.trace
stack-collapse.py $WORKDIR/nix-function-calls.trace > $WORKDIR/nix-function-calls.folded
inferno-flamegraph $WORKDIR/nix-function-calls.folded > $WORKDIR/nix-function-calls.svg
echo "$WORKDIR/nix-function-calls.svg"