{ 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"; }; }; outputs = { nixpkgs, crane, flake-utils, process-compose-wrapper, rust-overlay, ... }: 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 = [ "rustc-codegen-cranelift-preview" "rust-analyzer" "rust-src" ]; } ); src = craneLib.cleanCargoSource ./.; commonArgs = { inherit src; strictDeps = true; }; cargoArtifacts = craneLib.buildDepsOnly commonArgs; individualCrateArgs = commonArgs // { inherit cargoArtifacts; inherit (craneLib.crateNameFromCargoToml { inherit src; }) version; }; fileSetForCrate = crate: lib.fileset.toSource { root = ./.; fileset = lib.fileset.unions [ ./Cargo.toml ./Cargo.lock ]; }; server = craneLib.buildPackage ( individualCrateArgs // { } ); in { packages = { process-compose = process-compose.mkWrapper { name = "process-compose"; config = (import ./process-compose.nix { inherit pkgs; }); modules = [ ]; }; }; devShells.default = craneLib.devShell { packages = with pkgs; [ mold llvmPackages.clang llvmPackages.lld watchexec openssl pkg-config tdlib ]; }; } ); }