nix3-why-depends(1)

πŸ’– nix3-why-depends(1) β€” like, the manual page, but make it make sense πŸŽ€

okay bestie, welcome to the nix3-why-depends page from the General Commands Manual ✨

⚠️ Warning β€” this program is experimental and its interface is subject to change. yes fr, they said it, not me πŸ™ˆ

🌸 NAME 🌸

nix why-depends β€” show why a package has another package in its closure πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

nix why-depends [option…] package dependency

✨ EXAMPLES ✨

okay so here's where it gets good πŸ‘‘

  • Show one path through the dependency graph leading from Hello to Glibc:
# nix why-depends nixpkgs#hello nixpkgs#glibc
/nix/store/10l19qifk7hjjq47px8m2prqk1gv4isy-hello-2.10
└───bin/hello: …...................../nix/store/kmmr0ggkywxvnad4z1chqb6lsxi6pqgc-glibc-2.32/lib/ld-linux-x86-64.…
  β†’ /nix/store/kmmr0ggkywxvnad4z1chqb6lsxi6pqgc-glibc-2.32
  • Show all files and paths in the dependency graph leading from Thunderbird to libX11:
# nix why-depends --all nixpkgs#thunderbird nixpkgs#xorg.libX11
/nix/store/0my2p7psgdzqc5pq6dyl4ld9w6g0np58-thunderbird-78.5.1
β”œβ”€β”€β”€lib/thunderbird/libxul.so: …6wrw-libxcb-1.14/lib:/nix/store/jmwiq1bb3n47a0css8b1q7lhgf7416k5-libX11-1.7.0/lib:/nix/store/ssf…
β”‚   β†’ /nix/store/jmwiq1bb3n47a0css8b1q7lhgf7416k5-libX11-1.7.0
β”œβ”€β”€β”€lib/thunderbird/libxul.so: …pxyc-libXt-1.2.0/lib:/nix/store/l1sv43bafhkf2iikmdw9y62aybjdhcmm-libXdamage-1.1.5/lib:/nix/store…
β”‚   β†’ /nix/store/l1sv43bafhkf2iikmdw9y62aybjdhcmm-libXdamage-1.1.5
β”‚   β”œβ”€β”€β”€lib/libXdamage.so.1.1.0: …-libXfixes-5.0.3/lib:/nix/store/jmwiq1bb3n47a0css8b1q7lhgf7416k5-libX11-1.7.0/lib:/nix/store/9l0…
β”‚   β”‚   β†’ /nix/store/jmwiq1bb3n47a0css8b1q7lhgf7416k5-libX11-1.7.0
…
  • Show why Glibc depends on itself (yes, it's giving main character energy 🫢):
# nix why-depends nixpkgs#glibc nixpkgs#glibc
/nix/store/q9mknq836i0kblq8g1hm9f3cv9qda0r9-glibc-2.31
└───lib/ld-2.31.so: …che       Do not use /nix/store/q9mknq836i0kblq8g1hm9f3cv9qda0r9-glibc-2.31/etc/ld.so.cache.  --…
  β†’ /nix/store/q9mknq836i0kblq8g1hm9f3cv9qda0r9-glibc-2.31
  • Show why Geeqie has a build-time dependency on systemd:
# nix why-depends --derivation nixpkgs#geeqie nixpkgs#systemd
/nix/store/drrpq2fqlrbj98bmazrnww7hm1in3wgj-geeqie-1.4.drv
└───/: …atch.drv",["out"]),("/nix/store/qzh8dyq3lfbk3i1acbp7x9wh3il2imiv-gtk+3-3.24.21.drv",["dev"]),("/…
  β†’ /nix/store/qzh8dyq3lfbk3i1acbp7x9wh3il2imiv-gtk+3-3.24.21.drv
  └───/: …16.0.drv",["dev"]),("/nix/store/8kp79fyslf3z4m3dpvlh6w46iaadz5c2-cups-2.3.3.drv",["dev"]),("/nix…
      β†’ /nix/store/8kp79fyslf3z4m3dpvlh6w46iaadz5c2-cups-2.3.3.drv
      └───/: ….3.1.drv",["out"]),("/nix/store/yd3ihapyi5wbz1kjacq9dbkaq5v5hqjg-systemd-246.4.drv",["dev"]),("/…
          β†’ /nix/store/yd3ihapyi5wbz1kjacq9dbkaq5v5hqjg-systemd-246.4.drv

πŸ‘‘ DESCRIPTION πŸ‘‘

okay so here's the lore πŸ“–βœ¨

Nix automatically figures out the potential runtime dependencies between store paths by scanning for the hash parts of store paths. Like, say there's a store path /nix/store/q9mknq836i0kblq8g1hm9f3cv9qda0r9-glibc-2.31, and some file inside another store path contains the string q9mknq83… β€” then that other store path refers to the first one, and therefore might need it at runtime. Nix always keeps the existence of the transitive closure of a store path under the references relationship, so it is not possible to install a store path without having all of its references present. periodt πŸ’…

Sometimes Nix packages end up with unexpected runtime dependencies β€” like, a reference to a compiler accidentally ends up in a binary, which drags it into the latter's closure. that kinda closure size bloat? undesirable. not the vibe. 😭

nix why-depends lets you diagnose the cause of issues like that 🩺 It shows why the store path package depends on the store path dependency, by showing a shortest sequence in the references graph from the former to the latter. And also, for each node along this path, it shows a file fragment containing a reference to the next store path in the sequence. lowkey iconic πŸ”₯

To show why derivation package has a build-time rather than runtime dependency on derivation dependency, use --derivation.


πŸ’… OPTIONS πŸ’…

  • --all, -a β€” show all the edges in the dependency graph leading from package to dependency, instead of just a shortest path.
  • --precise β€” for each edge in the dependency graph, show the files in the parent that cause the dependency.

🌈 Common evaluation options 🌈

  • --arg name expr β€” pass the value expr as the argument name to Nix functions.
  • --arg-from-file name path β€” pass the contents of file path as the argument name to Nix functions.
  • --arg-from-stdin name β€” pass the contents of stdin as the argument name to Nix functions.
  • --argstr name string β€” pass the string string as the argument name to Nix functions.
  • --debugger β€” start an interactive environment if evaluation fails.
  • --eval-store store-url β€” the URL of the Nix store to use for evaluation, i.e. to store derivations (.drv files) and inputs referenced by them.
  • --impure β€” allow access to mutable paths and repositories.
  • --include, -I path β€” add path to search path entries used to resolve lookup paths.

This option may be given multiple times.

Paths added through -I take precedence over the nix-path configuration setting and the NIX_PATH environment variable.

  • --override-flake original-ref resolved-ref β€” override the flake registries, redirecting original-ref to resolved-ref.

  • --commit-lock-file β€” commit changes to the flake's lock file.
  • --inputs-from flake-url β€” use the inputs of the specified flake as registry entries.
  • --no-registries β€” don't allow lookups in the flake registries.
DEPRECATED β€” use --no-use-registries instead.
  • --no-update-lock-file β€” do not allow any updates to the flake's lock file.
  • --no-write-lock-file β€” do not write the flake's newly generated lock file.
  • --output-lock-file flake-lock-path β€” write the given lock file instead of flake.lock within the top-level flake.
  • --override-input input-path flake-url β€” override a specific flake input (e.g. dwarffs/nixpkgs). The input-path must not be empty. This implies --no-write-lock-file.
  • --recreate-lock-file β€” recreate the flake's lock file from scratch.
DEPRECATED β€” use nix flake update instead.
  • --reference-lock-file flake-lock-path β€” read the given lock file instead of flake.lock within the top-level flake.
  • --update-input input-path β€” update a specific flake input (ignoring its previous entry in the lock file).
DEPRECATED β€” use nix flake update instead.

  • --debug β€” set the logging verbosity level to debug.
  • --log-format format β€” set the format of log output; one of raw, internal-json, bar or bar-with-logs.
  • --print-build-logs, -L β€” print full build logs on standard error.
  • --quiet β€” decrease the logging verbosity level.
  • --verbose, -v β€” increase the logging verbosity level.

🧚 Miscellaneous global options 🧚

  • --help β€” show usage information.
  • --offline β€” disable substituters and consider all previously downloaded files up-to-date.
  • --option name value β€” set the Nix configuration setting name to value (overriding nix.conf).
  • --refresh β€” consider all previously downloaded files out-of-date.
  • --repair β€” during evaluation, rewrite missing or corrupted files in the Nix store. During building, rebuild missing or corrupted store paths.
  • --version β€” show version information.

πŸ’œ Options that change the interpretation of installables πŸ’œ

  • --derivation β€” operate on the store derivation rather than its outputs.
  • --expr expr β€” interpret installables as attribute paths relative to the Nix expression expr.
  • --file, -f file β€” interpret installables as attribute paths relative to the Nix expression stored in file. If file is the character -, then a Nix expression is read from standard input. Implies --impure.
πŸ“Œ Note β€” see man nix.conf for overriding configuration settings with command line flags.

aaaand that's the whole page bestie, you ate that πŸ’…βœ¨ this was nix3-why-depends(1) from the General Commands Manual β€” go forth and debug your closures, ily πŸ«ΆπŸŽ€

πŸ“¦ where this page comes from