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

  inputs = {
    nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable";
    flake-utils.url = "github:numtide/flake-utils";
    flake-compat = {
      url = "github:edolstra/flake-compat";
      flake = false;
    };
  };

  outputs = { self, nixpkgs, flake-utils, ... }:
    flake-utils.lib.eachDefaultSystem (system:
      let
        pkgs = nixpkgs.legacyPackages.${system};

        # Build pijul without git feature
        pijul = cargoNix.workspaceMembers.pijul.build;

        # Import the generated Cargo.nix
        cargoNix = pkgs.callPackage ./Cargo.nix {
          # Additional build inputs for all crates
          defaultCrateOverrides = pkgs.defaultCrateOverrides // {
            pijul = attrs: {
              nativeBuildInputs = with pkgs; [
                pkg-config
              ];
              buildInputs = with pkgs; [
                openssl
                libsodium
                zstd
                dbus
              ] ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
                pkgs.darwin.apple_sdk.frameworks.SystemConfiguration
                pkgs.libiconv
              ];
            };
            pijul-core = attrs: {
              nativeBuildInputs = with pkgs; [
                pkg-config
              ];
              buildInputs = with pkgs; [
                openssl
                libsodium
                zstd
              ] ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
                pkgs.libiconv
              ];
              meta = {
                description = "A distributed version control system";
                homepage = "https://pijul.org";
                license = pkgs.lib.licenses.gpl2Plus;
              };
            };
            libsodium-sys = attrs: {
              nativeBuildInputs = with pkgs; [
                pkg-config
              ];
              buildInputs = with pkgs; [
                libsodium
              ];
            };
          };
        };

        devShells.default = pkgs.mkShell {
          inputsFrom = [ pijul ];
          packages = with pkgs; [
            rust-analyzer
            rustfmt
            clippy
          ];
          RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
        };

        # Build pijul with git feature
        pijul-git = cargoNix.workspaceMembers.pijul.build.override {
          features = [ "git" ];
        };
      in
      {
        packages = {
          default = pijul;
          inherit pijul pijul-git;
        };
      }
    );
}