{
  description = "Horizon Haskell: Moon Base";

  inputs = {
    horizon-platform.url = "git+https://gitlab.horizon-haskell.net/package-sets/horizon-platform";

    lint-utils.url = "git+https://gitlab.homotopic.tech/nix/lint-utils";

    nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
  };

  outputs =
    inputs@
    { self
    , flake-utils
    , horizon-platform
    , lint-utils
    , nixpkgs
    , ...
    }:
    flake-utils.lib.eachSystem [ "aarch64-darwin" "x86_64-darwin" "x86_64-linux" ] (system:
    let
      pkgs = import nixpkgs { inherit system; };
    in
    with pkgs.lib;
    let
      overrides = composeManyExtensions [
        (import ./overlay.nix { inherit pkgs; })
      ];

      legacyPackages = horizon-platform.legacyPackages.${system}.extend overrides;

      packages = filterAttrs (_: isDerivation) legacyPackages;

      horizon-hoogle = pkgs.writers.writeBashBin "horizon-hoogle" ''
        ${legacyPackages.ghcWithHoogle (p: attrValues (packages // { hoogle = null; }))}/bin/hoogle server --local
      '';

    in
    {

      apps = {
        run-hoogle = {
          type = "app";
          program = "${horizon-hoogle}/bin/horizon-hoogle";
        };
      };

      checks = with lint-utils.outputs.linters.${system}; {
        dhall-format = dhall-format { src = self; };
        nixpkgs-fmt = nixpkgs-fmt { src = self; find = "flake.nix"; };
      };

      inherit legacyPackages;
      inherit packages;
    });
}