{
  description = "pijul, the sound distributed version control system";

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

  outputs =
    { self, nixpkgs, ... }:
    let
      # there is also nixpkgs.lib.systems.flakeExposed
      allSystems = [
        "x86_64-linux"
        "aarch64-linux"
        "i686-linux"
        "x86_64-darwin"
        "aarch64-darwin"
      ];
      withPkgs =
        pkgsCallback:
        nixpkgs.lib.genAttrs allSystems (
          system:
          let
            pkgs = import nixpkgs {
              inherit system;
              overlays = [
                (import ./nix/overlays/default.nix)
                (import ./nix/overlays/devshells.nix)
              ];
            };
          in
          pkgsCallback { inherit pkgs system; }
        );
    in
    {
      overlays = {
        default = import ./nix/overlay.nix { };
        devShells = import ./nix/devshells-overlay.nix { };
      };
      devShells = withPkgs (
        { pkgs, ... }:
        {
          default = pkgs.pijulGitDevShell;
        }
      );

      formatter = withPkgs ({ pkgs, ... }: pkgs.nixfmt-rfc-style);

      packages = withPkgs (
        { pkgs, ... }:
        {
          inherit (pkgs) pijul pijul-git;
          default = self.packages.${pkgs.system}.pijul;
        }
      );
    };
}