self: super: {
  python27 = super.python27.override {
    packageOverrides = python-self: python-super: {
      # Get the newest Tahoe-LAFS as a module instead of an application.
      tahoe-lafs = python-super.toPythonModule (python-super.callPackage ../pkgs/tahoe-lafs.nix { });

      # Get our ZKAP authorizer plugin package.
      zkapauthorizer = python-self.callPackage ../pkgs/zkapauthorizer.nix { };

      # new tahoe-lafs has a new dependency on eliot.
      eliot = python-super.callPackage ../pkgs/eliot.nix { };

      # new tahoe-lafs depends on a very recent autobahn for better websocket
      # testing features.
      autobahn = python-super.callPackage ../pkgs/autobahn.nix { };

      # new autobahn requires a newer cryptography
      cryptography = python-super.callPackage ../pkgs/cryptography.nix { };

      # new cryptography requires a newer cryptography_vectors
      cryptography_vectors = python-super.callPackage ../pkgs/cryptography_vectors.nix { };

      # upstream twisted package is missing a recently added dependency.
      twisted = python-super.twisted.overrideAttrs (old:
      { propagatedBuildInputs = old.propagatedBuildInputs ++ [ python-super.appdirs ];
        checkPhase = ''
          ${self.python.interpreter} -m twisted.trial twisted
        '';
      });

    };
  };

  privatestorage = self.python27.buildEnv.override
  { extraLibs =
    [ self.python27Packages.tahoe-lafs
      self.python27Packages.zkapauthorizer
    ];
    # Twisted's dropin.cache always collides between different
    # plugin-providing packages.
    ignoreCollisions = true;
  };
}