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

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
    flake-compat.url = "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz";
  };

  outputs =
    { self
    , nixpkgs
    , ...
    }:
    let
      nameValuePair = name: value: { inherit name value; };
      genAttrs = names: f: builtins.listToAttrs (map (n: nameValuePair n (f n)) names);
      forAllSystems = f: genAttrs allSystems (system: f nixpkgs.legacyPackages.${system});
      allSystems = [ "x86_64-linux" "aarch64-linux" "i686-linux" "x86_64-darwin" "aarch64-darwin" ];
      cargoMeta = builtins.fromTOML (builtins.readFile ./pijul/Cargo.toml);
    in {
      devShell = forAllSystems
        (pkgs:
          (pkgs.mkShell.override { stdenv = pkgs.clangStdenv; })
          {
            name = "pijul";

            inputsFrom = [ self.packages.${pkgs.system}.pijul-git ];

            packages = with pkgs; [
              rust-analyzer
              rustfmt
            ];

            LIBCLANG_PATH = "${pkgs.llvmPackages.libclang}/lib";
          }
        );

      packages = forAllSystems
        (pkgs: rec {
          default = pijul;

          pijul = pkgs.clangStdenv.mkDerivation (self: {
            pname = cargoMeta.package.name;
            version = cargoMeta.package.version;

            src = ./.;
            buildAndTestSubdir = "pijul";

            doCheck = true;
            cargoBuildType = "release";

            cargoDeps = pkgs.rustPlatform.importCargoLock {
              lockFile = ./Cargo.lock;
            };

            nativeBuildInputs = builtins.attrValues {
              inherit (pkgs)
                cargo
                libiconv
                pkg-config
                rustc
                ;
            };

            buildInputs = builtins.attrValues (
              {
                inherit (pkgs)
                  libsodium
                  openssl
                  ;

                inherit (pkgs.rustPlatform)
                  cargoBuildHook
                  cargoInstallHook
                  cargoSetupHook
                  ;
              }
              // nixpkgs.lib.optionalAttrs (pkgs.stdenv.isDarwin) {
                inherit (pkgs.darwin.apple_sdk.frameworks)
                  SystemConfiguration
                  ;
              }
            );
          });

          pijul-git = pijul.overrideAttrs (self: {
            cargoBuildFeatures = [ "git" ];
          });
        });
    };
}