{
  description = "Horizon Haskell: Moon Base";

  inputs = {
    flake-parts.url = "github:hercules-ci/flake-parts";
    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-parts
    , horizon-platform
    , lint-utils
    , nixpkgs
    , ...
    }:
    flake-parts.lib.mkFlake { inherit inputs; }
      {
        systems = [
          "aarch64-darwin"
          "x86_64-darwin"
          "x86_64-linux"
        ];
        perSystem = { pkgs, system, ... }:
          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;
          };
      };
}