{
  description = "clojure/tools.build packaged for NixOS.";

  inputs = {
    nixpkgs.url = "nixpkgs/nixos-21.05";
    utils.url = "github:numtide/flake-utils";
    clj2nix.url = "github:hlolli/clj2nix";
    build-tools-src = {
      url = "github:clojure/tools.build?tag=v0.8.2";
      flake = false;
    };
    gitignore = {
      url = "github:hercules-ci/gitignore.nix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
  };

  outputs = { self, nixpkgs, utils, clj2nix, build-tools-src, gitignore, ... }:
    let
      system = "x86_64-linux";
      pkgs = nixpkgs.legacyPackages."${system}";
      build-tools-jar = pkgs.callPackage ./build.tools.nix {
        inherit build-tools-src;
        inherit (gitignore.lib) gitignoreSource;
      };
    in {
      lib = {
        mkClojureLib =
          pkgs.callPackage ./mkClojureLib.nix { inherit build-tools-jar; };
      };
      devShell."${system}" =
        pkgs.mkShell { buildInputs = with pkgs; [ clojure clj2nix ]; };
    };
}