cass/default.nix
2025-11-17 20:38:57 +11:00

61 lines
1.8 KiB
Nix

{
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
'';
}