{ lib, stdenv, fetchFromGitHub, callPackage, symlinkJoin, pkg-config, ninja, git, which, time, readline, ncurses, zlib, libffi, }: stdenv.mkDerivation (finalAttrs: { pname = "oils-for-unix"; version = "0.37.0"; src = fetchFromGitHub { owner = "oils-for-unix"; repo = "oils"; rev = "release/${finalAttrs.version}"; hash = "sha256-d2i2P8ZiGb+FYzZIzs0pY2gIRQGGuenLbxrGhafVxVc="; }; nativeBuildInputs = [ pkg-config ninja git which time ]; buildInputs = [ readline ncurses zlib libffi ]; postPatch = '' patchShebangs . substituteInPlace build/dynamic-deps.sh \ --replace-quiet '/usr/bin/env' "$(command -v env)" substituteInPlace pyext/posixmodule.c \ --replace-quiet '_PyVerify_fd(fd)' '1' substituteInPlace doctools/cmark.py \ --replace-quiet "raise AssertionError('bin/cmark not found')" \ "cmark_path = '${finalAttrs.passthru.wedge.cmark}/bin/cmark'" ''; configureFlags = [ "--datarootdir=${placeholder "out"}" "--with-readline" "--readline=${finalAttrs.passthru.wedge.readline-all}" ]; buildPhase = '' runHook preBuild build/py.sh configure-for-dev build/stamp.sh write-git-commit build/py.sh py-source build/py.sh py-extensions build/doc.sh all-ref ./NINJA-config.sh ninja _bin/cxx-opt/oils-for-unix runHook postBuild ''; installPhase = '' runHook preInstall mkdir -p $out/bin install -m755 _bin/cxx-opt/oils-for-unix $out/bin/oils-for-unix ln -s oils-for-unix $out/bin/osh ln -s oils-for-unix $out/bin/ysh runHook postInstall ''; env = { NIX_CFLAGS_COMPILE = lib.optionalString stdenv.cc.isClang "-Wno-error=incompatible-function-pointer-types"; PYTHONPATH = "${finalAttrs.passthru.wedge.mypy}:${finalAttrs.passthru.wedge.py3-libs}/lib/python3.10/site-packages:.:vendor/"; LD_LIBRARY_PATH = "${finalAttrs.passthru.wedge.python2}/lib:${finalAttrs.passthru.wedge.python3}/lib"; }; preBuild = '' export PATH="${ lib.makeBinPath [ finalAttrs.passthru.wedge.python2 finalAttrs.passthru.wedge.python3 finalAttrs.passthru.wedge.re2c finalAttrs.passthru.wedge.cmark finalAttrs.passthru.wedge.py3-libs ] }:$PATH" ''; meta = { description = "Oils is our upgrade path from bash to a better language and runtime"; homepage = "https://www.oilshell.org/"; license = lib.licenses.asl20; platforms = lib.platforms.unix; mainProgram = "osh"; }; passthru = { wedge = callPackage ./wedge.nix { oilsSrc = finalAttrs.src; }; withSrc = newSrc: finalAttrs.finalPackage.overrideAttrs { src = newSrc; }; } // ( let mkShell = shellName: symlinkJoin { name = "oils-for-unix-${shellName}-${finalAttrs.version}"; paths = [ finalAttrs.finalPackage ]; passthru.shellPath = "/bin/${shellName}"; meta = finalAttrs.meta // { mainProgram = shellName; }; }; in { osh = mkShell "osh"; ysh = mkShell "ysh"; } ); })