# Development Shell helpers {#chap-devShellTools} The `nix-shell` command has popularized the concept of transient shell environments for development or testing purposes. However, `nix-shell` is not the only way to create such environments, and even `nix-shell` itself can indirectly benefit from this library. This library provides a set of functions that help create such environments. ## `devShellTools.valueToString` {#sec-devShellTools-valueToString} Converts Nix values to strings in the way the [`derivation` built-in function](https://nix.dev/manual/nix/2.23/language/derivations) does. :::{.example} ## `valueToString` usage examples ```nix devShellTools.valueToString (builtins.toFile "foo" "bar") => "/nix/store/...-foo" ``` ```nix devShellTools.valueToString false => "" ``` ::: ## `devShellTools.unstructuredDerivationInputEnv` {#sec-devShellTools-unstructuredDerivationInputEnv} Convert a set of derivation attributes (as would be passed to [`derivation`]) to a set of environment variables that can be used in a shell script. This function does not support `__structuredAttrs`, but does support `passAsFile`. :::{.example} ## `unstructuredDerivationInputEnv` usage example ```nix devShellTools.unstructuredDerivationInputEnv { drvAttrs = { name = "foo"; buildInputs = [ hello figlet ]; builder = bash; args = [ "-c" "${./builder.sh}" ]; }; } => { name = "foo"; buildInputs = "/nix/store/...-hello /nix/store/...-figlet"; builder = "/nix/store/...-bash"; } ``` Note that `args` is not included, because Nix does not added it to the builder process environment. ::: ## `devShellTools.derivationOutputEnv` {#sec-devShellTools-derivationOutputEnv} Takes the relevant parts of a derivation and returns a set of environment variables, that would be present in the derivation. :::{.example} ## `derivationOutputEnv` usage example ```nix let pkg = hello; in devShellTools.derivationOutputEnv { outputList = pkg.outputs; outputMap = pkg; } ``` :::