{ config ? {}, system ? builtins.currentSystem, ... }@args:

let
  sources = import ../nix/sources.nix;
  pkgs = import sources.nixpkgs args;
  unstable = import sources.nixpkgs-unstable args;

  callPackage = pkgs.lib.callPackageWith (pkgs // newpkgs);

  newpkgs = {

    # TODO: i don't think we still need this?
    docker = pkgs.docker.overrideAttrs (super: {
      moby = super.moby.overrideAttrs (super: {
        extraPath = super.extraPath + ":${pkgs.zfs}/bin";
      });
    });

    mattermost = callPackage ./mattermost {};

    # a version of the lounge with some extra css that
    # hides things the hacc-voc doesn't need
    thelounge-hacked = pkgs.stdenv.mkDerivation {
      name = "thelounge-hacked";
      src = pkgs.thelounge;

      phases = [ "buildPhase" "installPhase" ];
      buildPhase = ''
        cp $src/* -r .
        chmod 777 lib/node_modules/thelounge/public/css/style.css
        cat ${./thelounge/css-patch.css} >> lib/node_modules/thelounge/public/css/style.css
      '';

      installPhase = ''
        mkdir -p $out
        cp * -r $out
      '';
    };

    uffd = callPackage ./uffd {};

    # TODO: are these still needed (but also not sure if downgrades are possible)
    inherit (unstable) bottom vaultwarden vaultwarden-vault;
  };

in pkgs.extend(_: _: newpkgs)
