147 lines
4.3 KiB
Nix
147 lines
4.3 KiB
Nix
|
{
|
||
|
inputs = {
|
||
|
flake-compat = {
|
||
|
url = "github:edolstra/flake-compat";
|
||
|
flake = false;
|
||
|
};
|
||
|
|
||
|
nixpkgs.url = "github:NixOs/nixpkgs/nixos-unstable";
|
||
|
|
||
|
fenix = {
|
||
|
url = "github:nix-community/fenix";
|
||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||
|
};
|
||
|
|
||
|
nix-filter = {
|
||
|
url = "github:numtide/nix-filter";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
outputs =
|
||
|
{
|
||
|
self,
|
||
|
nixpkgs,
|
||
|
fenix,
|
||
|
nix-filter,
|
||
|
...
|
||
|
}@inputs:
|
||
|
let
|
||
|
cargoMeta = builtins.fromTOML (builtins.readFile ./Cargo.toml);
|
||
|
packageName = cargoMeta.package.name;
|
||
|
|
||
|
forSystems =
|
||
|
function:
|
||
|
nixpkgs.lib.genAttrs [ "x86_64-linux" ] (
|
||
|
system:
|
||
|
let
|
||
|
pkgs = import nixpkgs {
|
||
|
inherit system;
|
||
|
|
||
|
overlays = [ (final: prev: { ${packageName} = self.packages.${system}.${packageName}; }) ];
|
||
|
};
|
||
|
|
||
|
fenix-pkgs = fenix.packages.${system};
|
||
|
fenix-channel = fenix-pkgs.toolchainOf {
|
||
|
channel = "nightly";
|
||
|
date =
|
||
|
builtins.replaceStrings [ "nightly-" ] [ "" ]
|
||
|
(builtins.fromTOML (builtins.readFile ./rust-toolchain.toml)).toolchain.channel;
|
||
|
sha256 = "sha256-SzEeSoO54GiBQ2kfANPhWrt0EDRxqEvhIbTt2uJt/TQ=";
|
||
|
};
|
||
|
|
||
|
makeCrossPackage =
|
||
|
packageName: pkgsCross:
|
||
|
let
|
||
|
pkgs = builtins.throw "defining cross pkg, accessing pkgs is a bug";
|
||
|
in
|
||
|
{
|
||
|
"${packageName}-cross-${pkgsCross.stdenv.hostPlatform.config}${
|
||
|
if pkgsCross.stdenv.hostPlatform.isStatic then "-static" else ""
|
||
|
}" =
|
||
|
let
|
||
|
toolchain =
|
||
|
with fenix-pkgs;
|
||
|
combine [
|
||
|
minimal.cargo
|
||
|
minimal.rustc
|
||
|
targets.${pkgsCross.rust.lib.toRustTarget pkgsCross.stdenv.targetPlatform}.latest.rust-std
|
||
|
];
|
||
|
in
|
||
|
pkgsCross.callPackage (./. + "/nix/packages/${packageName}.nix") {
|
||
|
inherit cargoMeta;
|
||
|
flake-self = self;
|
||
|
nix-filter = import inputs.nix-filter;
|
||
|
rustPlatform = pkgsCross.makeRustPlatform {
|
||
|
cargo = toolchain;
|
||
|
rustc = toolchain;
|
||
|
};
|
||
|
};
|
||
|
};
|
||
|
in
|
||
|
function {
|
||
|
inherit
|
||
|
system
|
||
|
pkgs
|
||
|
fenix-pkgs
|
||
|
fenix-channel
|
||
|
makeCrossPackage
|
||
|
;
|
||
|
}
|
||
|
);
|
||
|
in
|
||
|
{
|
||
|
formatter = forSystems ({ pkgs, ... }: pkgs.alejandra);
|
||
|
|
||
|
packages = forSystems (
|
||
|
{
|
||
|
pkgs,
|
||
|
fenix-channel,
|
||
|
system,
|
||
|
makeCrossPackage,
|
||
|
...
|
||
|
}:
|
||
|
{
|
||
|
${packageName} = pkgs.callPackage (./. + "/nix/packages/${packageName}.nix") {
|
||
|
inherit cargoMeta;
|
||
|
flake-self = self;
|
||
|
nix-filter = import inputs.nix-filter;
|
||
|
rustPlatform = pkgs.makeRustPlatform {
|
||
|
cargo = fenix-channel.toolchain;
|
||
|
rustc = fenix-channel.toolchain;
|
||
|
};
|
||
|
};
|
||
|
default = self.packages.${system}.${packageName};
|
||
|
}
|
||
|
// makeCrossPackage packageName pkgs.pkgsCross.musl64.pkgsStatic
|
||
|
// makeCrossPackage packageName pkgs.pkgsCross.musl32.pkgsStatic
|
||
|
// makeCrossPackage packageName pkgs.pkgsCross.aarch64-multiplatform-musl.pkgsStatic
|
||
|
// makeCrossPackage packageName pkgs.pkgsCross.armv7l-hf-multiplatform.pkgsStatic
|
||
|
// makeCrossPackage packageName pkgs.pkgsCross.mingwW64.pkgsStatic
|
||
|
);
|
||
|
|
||
|
devShells = forSystems (
|
||
|
{
|
||
|
pkgs,
|
||
|
fenix-pkgs,
|
||
|
fenix-channel,
|
||
|
...
|
||
|
}:
|
||
|
let
|
||
|
fenixRustToolchain = fenix-channel.withComponents [
|
||
|
"cargo"
|
||
|
"clippy-preview"
|
||
|
"rust-src"
|
||
|
"rustc"
|
||
|
"rustfmt-preview"
|
||
|
];
|
||
|
in
|
||
|
{
|
||
|
default = pkgs.callPackage (./. + "/nix/dev-shells/${packageName}.nix") {
|
||
|
inherit fenixRustToolchain cargoMeta;
|
||
|
};
|
||
|
ci = pkgs.callPackage (./nix/dev-shells/ci.nix) { inherit fenixRustToolchain cargoMeta; };
|
||
|
}
|
||
|
);
|
||
|
};
|
||
|
}
|