The sound distributed version control system
 
{
description = "pijul, the sound distributed version control system";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-21.11";
rust-overlay.url = "github:oxalica/rust-overlay";
};
outputs =
{ self
, nixpkgs
, rust-overlay
, ...
} @ inputs:
let
nameValuePair = name: value: { inherit name value; };
genAttrs = names: f: builtins.listToAttrs (map (n: nameValuePair n (f n)) names);
allSystems = [ "x86_64-linux" "aarch64-linux" "i686-linux" "x86_64-darwin" ];
forAllSystems = f: genAttrs allSystems (system: f system);
rustOverlay = final: prev:
let
rustChannel = prev.rust-bin.stable."1.58.1";
in {
inherit rustChannel;
rustc = rustChannel.minimal;
};
in {
devShell = forAllSystems (system:
let
rustDevOverlay = final: prev: {
# rust-analyzer needs core source
rustc-with-src = prev.rustc.override { extensions = [ "rust-src" ]; };
};
pkgs = import nixpkgs {
inherit system;
overlays = [
(import rust-overlay)
rustOverlay
rustDevOverlay
];
};
in pkgs.mkShell {
name = "pijul";
inputsFrom = [ self.packages.${system}.pijul-git ];
# Eventually crate2nix will provide a devShell that includes transitive dependencies for us.
# https://github.com/kolloch/crate2nix/issues/111
packages = with pkgs; [
pkg-config
clang
openssl
rust-analyzer rustc-with-src
rustfmt
crate2nix
];
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang}/lib";
});
packages = forAllSystems
(system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [
(import rust-overlay)
rustOverlay
];
};
pijul =
let
cargoNix = import ./Cargo.nix {
inherit pkgs;
defaultCrateOverrides = pkgs.defaultCrateOverrides // {
zstd-seekable = { ... }: {
nativeBuildInputs = [ pkgs.clang ]
++ pkgs.lib.optionals pkgs.stdenv.isDarwin [ pkgs.xcbuild ];
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang}/lib";
};
blake3 = attr: {
nativeBuildInputs = pkgs.lib.optionals pkgs.stdenv.isDarwin [ pkgs.xcbuild ];
};
pijul = { ... }: {
buildInputs = with pkgs; [
zstd
xxHash
libsodium
xxHash
libiconv
] ++ lib.optionals stdenv.isDarwin (
[ openssl ]
++ (with darwin.apple_sdk.frameworks; [
CoreServices
Security
SystemConfiguration
]));
};
};
};
in
cargoNix.workspaceMembers.pijul.build;
in {
inherit pijul;
pijul-git = pijul.override { features = [ "git" ]; };
});
defaultPackage = forAllSystems (system: self.packages.${system}.pijul);
};
}