Interactively browse dependency graphs of Nix derivations.
Go to file
2023-12-11 12:18:46 +13:00
.github/workflows Update update-flake-lock action 2023-12-11 12:18:46 +13:00
src chore: apply most of hlint suggestions 2023-12-11 09:35:57 +13:00
test Delete duplicate file 2021-09-04 22:23:12 +12:00
.gitignore Stop using flakes 2021-05-05 23:51:34 +12:00
asciicast.sh Update asciicast 2021-02-28 00:12:41 +13:00
CHANGELOG.md Release v0.3.2 2023-11-28 14:40:20 +13:00
default.nix Move to a flake-based setup 2022-10-24 11:52:14 +13:00
flake.lock flake.lock: Update 2023-10-09 11:32:29 +13:00
flake.nix Update flake.lock (#60) 2023-05-24 22:59:27 +00:00
format.sh ci: Do not try to format absent file 2022-11-07 15:15:05 +13:00
LICENSE Add LICENSE 2020-12-22 10:52:02 +13:00
nix-tree.cabal Release v0.3.2 2023-11-28 14:40:20 +13:00
README.md More descriptive Related Tools section 2023-04-26 11:03:53 +12:00
shell.nix Revert "Remove shell.nix, use 'nix develop' instead" 2022-12-04 22:56:45 +08:00

nix-tree

Build Status Packaging status

Interactively browse dependency graphs of Nix derivations.

asciicast

Installation

nix-tree is on nixpkgs since 20.09, so just use your preferred method for adding packages to your system, eg:

nix-env -i nix-tree

To run the current development version:

nix run github:utdemir/nix-tree -- --help

Usage

$ nix-tree --help
Usage: nix-tree [--version] [--derivation] [INSTALLABLE]
  Interactively browse dependency graphs of Nix derivations.

Available options:
  --version                Show the nix-tree version.
  --derivation             Operate on the store derivation rather than its
                           outputs.
  INSTALLABLE              A store path or a flake reference. Paths default to
                           "~/.nix-profile" and "/var/run/current-system".
  -h,--help                Show this help text

Keybindings:
  hjkl/Arrow Keys : Navigate
  w               : Open why-depends mode
  /               : Open search mode
  s               : Change sort order
  y               : Yank selected path to clipboard
  ?               : Show help
  q/Esc           : Quit / close modal

Glossary

  • NAR Size: Size of the store path itself.
  • Closure size: Total size of the store path and all its transitive dependencies.
  • Added size: Size of the store path, and all its unique transitive dependencies. In other words, the cost of having that store path on top of all other paths. See issue #14 for a better explanation.

Tips

nix-build prints built paths to stdout, which can be piped conveniently with | xargs -o nix-tree. Examples:

# Output of a local derivation
nix-build . --no-out-link | xargs -o nix-tree

# Build time dependencies (passing a `.drv` path)
nix-instantiate -r | xargs -o nix-tree --derivation

# Dependencies from shell.nix
nix-build shell.nix -A inputDerivation | xargs -o nix-tree

# All outputs of a derivation in nixpkgs:
nix-build '<nixpkgs>' -A openssl.all --no-out-link | xargs -o nix-tree

nix-tree also supports flake references:

# Build time dependencies of a flake on the current directory
nix-tree --derivation '.#'

# Same thing works for any flake reference
nix-tree --derivation 'nixpkgs#asciiquarium'

Run nix-tree on your current nixos system:

nix-tree /nix/var/nix/profiles/system

Contributing

All contributions, issues and feature requests are welcome.

To hack on it, simply run nix-shell and use cabal as usual. Please run ./format.sh before sending a PR.

  • nix-du: Visualise which gc-roots to delete to free some space in your nix store
  • nix-melt: A ranger-like flake.lock viewer
  • nix-query-tree-viewer: GTK viewer for the output of nix-store --query --tree
  • nix-visualize: Uses the Nix package manager to visualize the dependencies of a given package