161 lines
4.2 KiB
Nix
161 lines
4.2 KiB
Nix
{
|
|
description = "A very basic flake";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
|
crane.url = "github:ipetkov/crane";
|
|
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
|
|
process-compose-wrapper = {
|
|
url = "git+https://git.scug.io/nikkuss/process-compose-wrapper.git?ref=dev";
|
|
};
|
|
rust-overlay = {
|
|
url = "github:oxalica/rust-overlay";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
advisory-db = {
|
|
url = "github:rustsec/advisory-db";
|
|
flake = false;
|
|
};
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
self,
|
|
nixpkgs,
|
|
crane,
|
|
flake-utils,
|
|
process-compose-wrapper,
|
|
rust-overlay,
|
|
advisory-db,
|
|
...
|
|
}:
|
|
flake-utils.lib.eachDefaultSystem (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = [ (import rust-overlay) ];
|
|
};
|
|
process-compose = process-compose-wrapper.lib.mkLib pkgs;
|
|
|
|
inherit (pkgs) lib;
|
|
craneLib = (crane.mkLib pkgs).overrideToolchain (
|
|
p:
|
|
p.rust-bin.nightly.latest.default.override {
|
|
extensions = [ "llvm-tools-preview" ];
|
|
}
|
|
);
|
|
|
|
unfilteredRoot = ./.; # The original, unfiltered source
|
|
src = lib.fileset.toSource {
|
|
root = unfilteredRoot;
|
|
fileset = lib.fileset.unions [
|
|
# Default files from crane (Rust and cargo files)
|
|
(craneLib.fileset.commonCargoSources unfilteredRoot)
|
|
./.cargo/audit.toml
|
|
./templates
|
|
];
|
|
};
|
|
|
|
commonArgs = {
|
|
inherit src;
|
|
strictDeps = true;
|
|
doCheck = false;
|
|
};
|
|
cargoArtifacts = craneLib.buildDepsOnly commonArgs;
|
|
generator = craneLib.buildPackage (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
}
|
|
);
|
|
in
|
|
rec {
|
|
checks = {
|
|
# inherit generator;
|
|
clippy = craneLib.cargoClippy (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
cargoClippyExtraArgs = "--all-targets -- --deny warnings";
|
|
}
|
|
);
|
|
fmt = craneLib.cargoFmt {
|
|
inherit src;
|
|
};
|
|
audit = craneLib.cargoAudit {
|
|
inherit src advisory-db;
|
|
};
|
|
nextest = craneLib.cargoNextest (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
partitions = 1;
|
|
partitionType = "count";
|
|
cargoNextestPartitionsExtraArgs = "--no-tests=pass";
|
|
}
|
|
);
|
|
crateCoverage = craneLib.cargoTarpaulin (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
}
|
|
);
|
|
};
|
|
packages = {
|
|
process-compose = process-compose.mkWrapper {
|
|
name = "process-compose";
|
|
config = (import ./process-compose.nix { inherit pkgs; });
|
|
# enableTui = true;
|
|
modules = [
|
|
(process-compose.mkPostgres {
|
|
name = "postgres";
|
|
initialDatabases = [
|
|
{
|
|
name = "db";
|
|
user = "root";
|
|
password = "root";
|
|
}
|
|
];
|
|
})
|
|
(process-compose.mkRedis {
|
|
name = "redis";
|
|
})
|
|
];
|
|
};
|
|
llvm-coverage = craneLib.cargoLlvmCov (
|
|
commonArgs
|
|
// {
|
|
inherit cargoArtifacts;
|
|
}
|
|
);
|
|
inherit generator;
|
|
};
|
|
|
|
devShells.default = craneLib.devShell {
|
|
checks = self.checks.${system};
|
|
DATABASE_URL = "postgres://root:root@localhost/db";
|
|
REDIS_HOST = "localhost:6379";
|
|
MIGRATION_DIR = "crates/server/migration";
|
|
RUSTFLAGS = "-Clinker=clang -Clink-arg=-fuse-ld=mold";
|
|
packages = with pkgs; [
|
|
sea-orm-cli
|
|
cargo-watch
|
|
llvmPackages.clang
|
|
llvmPackages.bintools
|
|
mold
|
|
cargo-nextest
|
|
cargo-llvm-cov
|
|
cargo-audit
|
|
cargo-tarpaulin
|
|
cargo-udeps
|
|
];
|
|
};
|
|
|
|
}
|
|
);
|
|
|
|
}
|