{ stdenv , numactl }: { app , chdirPrefix , nixPrefix ? "" , argv ? "" , binary ? "/bin/run" , ntasks ? null , nodes ? null , exclusive ? true # By default we run in exclusive mode , qos ? null , time ? null , output ? "job_%j.out" , error ? "job_%j.err" , contiguous ? null , extra ? null }: with stdenv.lib; let sbatchOpt = name: value: optionalString (value!=null) "#SBATCH --${name}=${value}\n"; sbatchEnable = name: value: optionalString (value!=null) "#SBATCH --${name}\n"; in stdenv.mkDerivation rec { name = "${app.name}-job"; preferLocalBuild = true; src = ./.; buildInputs = [ app ]; #SBATCH --tasks-per-node=48 #SBATCH --ntasks-per-socket=24 #SBATCH --cpus-per-task=1 dontBuild = true; dontPatchShebangs = true; installPhase = '' mkdir -p $out cat > $out/job < $out/bin/run <&2 echo "Execution aborted: '${chdirPrefix}/$(basename $out)' already exists" exit 1 fi mkdir -p "${chdirPrefix}/$(basename $out)" echo sbatch ${nixPrefix}$out/job sbatch ${nixPrefix}$out/job EOF chmod +x $out/bin/run ''; }