{ 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://gitlab.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 ]; }; } ); }