{ pkgs, stdenv, lib, self }: let discoPkgs = pkgs.recurseIntoAttrs self.packages.${stdenv.system}; discoDrvs = lib.filterAttrs (_: value: lib.isDerivation value) discoPkgs; filterDrvs = inputs: lib.filter (drv: !(lib.hasAttr "pname" drv) || drv.pname == null || !(lib.any (name: name == drv.pname || name == drv.name) (lib.attrNames discoDrvs))) inputs; in (pkgs.mkShell { OCAMLRUNPARAM = "b"; inputsFrom = lib.attrValues discoDrvs; buildInputs = with pkgs; [ ocamlPackages.ocaml-lsp ocamlformat ocamlPackages.merlin ocamlPackages.utop ffmpeg youtube-dl ] ++ lib.optionals stdenv.isDarwin [ fswatch ]; propagatedBuildInputs = with pkgs.ocamlPackages; [ alcotest qcheck qcheck-alcotest ]; }).overrideAttrs (o: { propagatedBuildInputs = filterDrvs o.propagatedBuildInputs; buildInputs = filterDrvs o.buildInputs; })