{ config, ... }:
let
  mozRust =
    with builtins;
    (map (
      p:
      import (
        (fetchTarball {
          url = "https://github.com/mozilla/nixpkgs-mozilla/archive/e912ed4.tar.gz";
          sha256 = "08fvzb8w80bkkabc1iyhzd15f4sm7ra10jn32kfch5klgl0gj3j3";
        })
        + p
      )
    ))
      [
        (toPath "/lib-overlay.nix")
        (toPath "/rust-overlay.nix")
      ];
  stablepkgs = import <nixos-stable> { overlays = mozRust; };

  # https://rust-lang.github.io/rustup-components-history
  nightly = stablepkgs.rustChannelOf {
    date = "2020-06-10";
    channel = "nightly";
  };
  rustNightly = {
    rustc =
      nightly.rust.override {
        extensions = [
          "clippy-preview"
          "rls-preview"
          "rust-analysis"
          "rust-src"
          "rustfmt-preview"
        ];
      }
      // {
        src = nightly.rust-src;
      };
    inherit (nightly) cargo;
  };
  rustPNightly = stablepkgs.recurseIntoAttrs (
    stablepkgs.makeRustPlatform {
      inherit (rustNightly) rustc cargo;
    }
  );
in
{
  config.machine.pkgsets.rustpkgs.pkgs =
    (with stablepkgs; [
      diesel-cli
      carnix
      rustracer
    ])
    ++ (with rustNightly; [
      rustc
      cargo
    ]);
}