{ pkgs, stdenv ? pkgs.stdenv, packages ? [ ], shellHook ? "", ... }@vars: let lib = pkgs.lib; cleanVars = lib.removeAttrs vars [ "pkgs" "packages" "shellHook" "stdenv" ]; exported = lib.concatStringsSep "\n" (lib.mapAttrsToList (n: v: "export ${n}=${v}") cleanVars); script = '' #! /usr/bin/env bash ${exported} ${shellHook} ''; in stdenv.mkDerivation { name = "cass-shell"; preferLocalBuild = true; nativeBuildInputs = with pkgs; [ coreutils ] ++ packages; buildCommand = '' # unset all nix-related variables unset SHELL configureFlags mesonFlags shell depsHostHost STRINGS depsTargetTarget stdenv \ builder PWD SOURCE_DATE_EPOCH enableParallelInstalling CXX TEMPDIR system HOST_PATH \ enableParallelBuilding doInstallCheck buildCommandPath enableParallelChecking LS_COLORS \ depsTargetTargetPropagated cmakeFlakes outputs TMPDIR LD READELF doCheck \ depsBuildBuild SIZE propagatedNativeBuildInputs strictDeps AR AS TEMP SHLVL NM \ patches passAsFile buildInputs SSL_CERT_FILE depsBuildTarget OBJCOPY STRIP TMP OBJDUMP propagatedBuildInputs \ CC __ETC_PROFILE_SOURCED depsBuildTargetPropagated depsBuildBuildPropagated CONFIG_SHELL __structuredAttrs \ RANLIB nativeBuildInputs name depsHostHostPropagated TEST TZ HOME GZIP_NO_TIMESTAMPS \ cmakeFlags TERM buildCommand preferLocalBuild _ unset "''${!NIX_@}" # create export commands for the rest envs="$(env | sed 's/^/export /' -)" # assemble script printf '${script}' > $out echo "$envs" >> $out echo 'exec $SHELL' >> $out # required here sed -i 's/^export out=.*$//' $out # inserted by env cmd sed -i 's/^export _=.*$//' $out # append to user's current path sed -i '/^export PATH=/ s/$/:\$PATH/' $out chmod +x $out ''; }