{
  description = "A Nix-flake-based Dhall development environment";

  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/release-22.11";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs =
    { self
    , nixpkgs
    , flake-utils
    }:

    flake-utils.lib.eachDefaultSystem (system:
    let
      pkgs = import nixpkgs { inherit system; };

      # Helper function for building dhall-* tools
      mkDhallTools = ls:
        builtins.map (tool: pkgs.haskellPackages."dhall-${tool}") ls;

      dhallTools = mkDhallTools [
        "bash"
        "docs"
        "json"
        "lsp-server"
        "nix"
        "nixpkgs"
        "openapi"
        "toml"
        "yaml"
      ] ++ pkgs.lib.optionals (pkgs.stdenv.isLinux) (mkDhallTools [ "csv" "text" ]); # Linux only
    in
    {
      devShells.default = pkgs.mkShell {
        packages = (with pkgs; [ dhall ]) ++ dhallTools;

        shellHook = ''
          echo "dhall `${pkgs.dhall}/bin/dhall --version`"
        '';
      };
    });
}