{
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" ];
});
});
};
}