{pkgs ? import {}, ...}: let patchSources = src: patches: pkgs.stdenv.mkDerivation { name = "${src.name}-patched"; inherit patches src; buildPhase = "mkdir -p $out"; installPhase = "cp -r * $out"; }; sources = import ./nix/sources.nix {}; wapkgs = pkgs.lib.fix (self: let mkWorkadventureSet = waSelf: workadventuresrc: name: let callWaPackage = path: pkgs.lib.callPackageWith # some parts of workadventure depend on other parts of workadventure (self // { workadventure = waSelf;}) (import path workadventuresrc name); in { back = callWaPackage ./back {}; pusher = callWaPackage ./pusher {}; messages = callWaPackage ./messages {}; front = callWaPackage ./front {}; uploader = callWaPackage ./uploader {}; maps = (callWaPackage ./maps {}).overrideAttrs (old: { meta.broken = true; }); }; in pkgs // rec { tcm = mkWorkadventureSet tcm sources.tcm "tcm"; xce = mkWorkadventureSet xce sources.xce "xce"; xce-unfederated = mkWorkadventureSet xce-unfederated sources.xce-unfederated "xce-unfederated"; }); in { workadventure-tcm = wapkgs.tcm; workadventure-xce = wapkgs.xce; workadventure-xce-unfederated = wapkgs.xce-unfederated; }