{
  pkgs,
  fenix,
  selfPkgs,
  ...
}:
let
  defaultAdditionalPkgs = with pkgs; [
    rustfmt
    clippy
    cargo-expand
    cargo-tarpaulin
    gdb
  ];
in
(builtins.mapAttrs (
  packageName: package:
  pkgs.mkShell {
    inputsFrom = [ package ];
    packages = defaultAdditionalPkgs;
    RUST_BACKTRACE = 1;
    RUST_LOG = "all";
  }
) selfPkgs)
// {
  default = pkgs.mkShell {
    inputsFrom = [
      selfPkgs.servicepoint-binding-c
      selfPkgs.announce
    ];
    packages =
      defaultAdditionalPkgs
      ++ (with pkgs; [
        (pkgs.symlinkJoin {
          name = "rust-toolchain";
          paths = with pkgs; [
            rustc
            cargo
            rustPlatform.rustcSrc
            rustPlatform.rustLibSrc
            rustfmt
            clippy
            cargo-expand
            cargo-tarpaulin
          ];
        })
        gcc
        gnumake
        xe
        libgcc
        libunwind
        pkgsStatic.gcc
        pkgsStatic.libgcc
        pkgsStatic.musl
      ]);

    RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
  };
}