{
  inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
  outputs =
    {
      self,
      nixpkgs,
      ...
    }:
    let
      systems = [
        "aarch64-linux"
        "x86_64-linux"
        "x86_64-darwin"
        "aarch64-darwin"
      ];
      forSystems = nixpkgs.lib.genAttrs systems;
      pkgsFor = system: (import nixpkgs { inherit system; }).extend self.outputs.overlays.default;
      genPkgs = func: (forSystems (system: func (pkgsFor system)));
    in
    {
      overlays.default = final: prev: {
        erlangPackages = prev.beam.packagesWith prev.erlang_27;
        erlang = final.erlangPackages.erlang;
      };
      devShells = genPkgs (pkgs: {
        default = pkgs.mkShell {
          buildInputs = with pkgs; [
            erlang
            gleam
            rebar3
          ];
        };
      });
    };
}