ZZEEGHFT2VI4UBDWNI7U2AQDYITHU2Q5MDYC5JCETMMLQFGDO5OQC
NACNZRJE4UWFNMAPOV2TLQHQRJ5BND6T2B4WVYW5YGJ3OOZSWQPQC
V3G26FEWYGQN7TJON3KOKJPXM6NGRCUAGV7IW3OI7MNUM63KE5CAC
SXEYMYF7P4RZMZ46WPL4IZUTSQ2ATBWYZX7QNVMS3SGOYXYOHAGQC
ND62U46THW72F6K32HFN6BEOKAXUM23L2ADIYEUXB3MHFAERWRCAC
ENWJBQGQUL3KLYPVGYP2ZSDB5ZUXLTY4W6NCHUA6VTHRRNPRUDHAC
JEQCEOQDHPHNBWOKPJR4JR6AQMC4WR3RMHVHHPBBJMQ7IKCVEEPQC
QHVMHSGYFK56HE24LYM6CISW2MZUR5ICA2RD6UB2M63ING55PMMQC
STG7MO5MLMKFJYJQDAXL6YSUJE2BTXOMWUQHXBWFHDFJNNJRP5AQC
PNJL5TPZLQ3VXAASTLUX7462RCRPO7TV3GKOTTHDZABDQCBMXPRQC
POBHKKNGVKC5M7ANC4I6BDU225AUP5IV5WPG63SDX3KYXRPC4PLAC
ZWPPIJXFKEL3RP2MEYGB3BPTE73GYRW6FSRZDQKFBJFOK4JBNQ4AC
LAFA7YMQZM2FX5NMTAJDZZ3OGOJM7QJVSETRX5ZO5ROWF22OZHWQC
G734WNM64AR5BLAZMN5MDPKSFTYXTUQR6MAGB32NRBC5FXFRWSJAC
VN6L65VRWLKTIXY7XD7OOZBMNKNSIEJG6PJUX5NKKYVYGVG4DFTAC
OP6UAT256FO65GXT64U4XWU2PCRKCYV7Q5YZLSROAO7Q2IFDZ7OQC
Q4XPH27LXW4Q343HV3HCBXSHVJ5J7ESBHZHMQKSVTXM2QYKVXVJAC
BFQYATIR5O7O3FD4SR5573ZTI26J5OCIQJGOMI5PG6PIPBSDBEMQC
JVBQMAFU6GOL7VN2JPKEMZRPZIGQNVIW7B2J27MD6UUALE4HY2UQC
O2CDACIIEOLVVBQPBFT5U5DYQXLSLPUD4VB5QQBNJTUMFDDKHS2AC
MUYNSHG26H3WEDIQZKKD57H4XCMOVGLDDXZ4SZEFQ6MDUN3HSYEAC
(import
(
let lock = builtins.fromJSON (builtins.readFile ./flake.lock); in
fetchTarball {
url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
sha256 = lock.nodes.flake-compat.locked.narHash;
}
)
{ src = ./.; }
).shellNix
(import ./release.nix).pijulGitDevShell
let
flakeLock = builtins.fromJSON (builtins.readFile ./flake.lock);
pkgsSrc = fetchTarball {
url =
flakeLock.nodes.nixpkgs.locked.url
or "https://github.com/NixOS/nixpkgs/archive/${flakeLock.nodes.nixpkgs.locked.rev}.tar.gz";
sha256 = flakeLock.nodes.nixpkgs.locked.narHash;
};
pkgs = import pkgsSrc {
overlays = [
(import ./nix/overlays/default.nix)
(import ./nix/overlays/devshells.nix)
];
};
in
{
inherit (pkgs) pijul pijul-git pijulGitDevShell;
}
buildInputs = with pkgs; [
zstd
libsodium
openssl
pkg-config
libiconv
xxHash
] ++ lib.optionals stdenv.isDarwin
(with darwin.apple_sdk.frameworks; [
CoreServices
Security
SystemConfiguration
]);
buildInputs =
with pkgs;
[
zstd
libsodium
openssl
pkg-config
libiconv
xxHash
]
++ lib.optionals stdenv.isDarwin (
with darwin.apple_sdk.frameworks;
[
CoreServices
Security
SystemConfiguration
]
);
{
stdenv,
lib,
darwin,
rustPlatform,
cargo,
libiconv,
pkg-config,
rustc,
openssl,
libsodium,
...
}:
let
cargoMeta = builtins.fromTOML (builtins.readFile ../pijul/Cargo.toml);
inherit (rustPlatform) cargoBuildHook cargoInstallHook cargoSetupHook;
in
stdenv.mkDerivation {
pname = cargoMeta.package.name;
version = cargoMeta.package.version;
src =
let
fs = lib.fileset;
in
fs.toSource {
root = ../.;
fileset = fs.unions [
../Cargo.toml
../Cargo.lock
../pijul-macros
../pijul
../libpijul
../pijul-interaction
../pijul-config
../pijul-repository
../pijul-identity
../pijul-remote
];
};
buildAndTestSubdir = "pijul";
doCheck = true;
cargoBuildType = "release";
cargoDeps = rustPlatform.importCargoLock { lockFile = ../Cargo.lock; };
nativeBuildInputs = [
cargo
libiconv
pkg-config
rustc
];
buildInputs = [
libsodium
openssl.dev
cargoBuildHook
cargoInstallHook
cargoSetupHook
] ++ lib.optionals (stdenv.isDarwin) [ darwin.apple_sdk.frameworks.SystemConfiguration ];
}
final: prev: {
pijulGitDevShell = (final.mkShell.override { stdenv = final.clangStdenv; }) {
name = "pijul";
inputsFrom = [ final.pijul-git ];
packages = with final; [
rust-analyzer
rustfmt
];
LIBCLANG_PATH = "${final.llvmPackages.libclang}/lib";
};
}
final: prev: {
pijul = final.callPackage ../package.nix { stdenv = final.clangStdenv; };
pijul-git = final.pijul.overrideAttrs (
oldAttrs: { cargoBuildFeatures = oldAttrs.cargoBuildFeatures or [ ] ++ [ "git" ]; }
);
}
nameValuePair = name: value: { inherit name value; };
genAttrs = names: f: builtins.listToAttrs (map (n: nameValuePair n (f n)) names);
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang}/lib";
}
# 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; }
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;
};
buildInputs = builtins.attrValues (
{
inherit (pkgs)
libsodium
openssl
;
in
{
overlays = {
default = import ./nix/overlay.nix { };
devShells = import ./nix/devshells-overlay.nix { };
};
devShells = withPkgs (
{ pkgs, ... }:
{
default = pkgs.pijulGitDevShell;
}
);
inherit (pkgs.rustPlatform)
cargoBuildHook
cargoInstallHook
cargoSetupHook
;
}
// nixpkgs.lib.optionalAttrs (pkgs.stdenv.isDarwin) {
inherit (pkgs.darwin.apple_sdk.frameworks)
SystemConfiguration
;
}
);
});
formatter = withPkgs ({ pkgs, ... }: pkgs.nixfmt-rfc-style);
nativeBuildInputs = builtins.attrValues {
inherit (pkgs)
cargo
libiconv
pkg-config
rustc
;
};
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
];
"flake-compat": {
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"revCount": 57,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
}
},
url = lock.nodes.flake-compat.locked.url or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";
url =
lock.nodes.flake-compat.locked.url
or "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz";