{ description = "transbeam: a low-latency file drop web app"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; utils.url = "github:numtide/flake-utils"; rust-overlay.url = "github:oxalica/rust-overlay"; crate2nix = { url = "github:kolloch/crate2nix"; flake = false; }; }; outputs = { self, nixpkgs, utils, rust-overlay, crate2nix }: let name = "transbeam"; in utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; overlays = [ rust-overlay.overlays.default (final: prev: { rustc = final.rust-bin.stable.latest.default; cargo = final.rust-bin.stable.latest.default; }) ]; }; inherit (import "${crate2nix}/tools.nix" { inherit pkgs; }) generatedCargoNix; project = import (generatedCargoNix { inherit name; src = ./.; }) { inherit pkgs; }; in rec { packages.${name} = pkgs.symlinkJoin { inherit name; paths = [ packages."${name}-unwrapped" ]; buildInputs = [ pkgs.makeWrapper ]; postBuild = '' wrapProgram $out/bin/${name} \ --set TRANSBEAM_STATIC_DIR ${./static} \ --set TRANSBEAM_CACHEBUSTER ${builtins.substring 0 8 (builtins.hashString "sha256" (toString ./static))} ''; }; defaultPackage = packages.${name}; packages."${name}-unwrapped" = project.rootCrate.build; packages."${name}-cli" = with pkgs.python3Packages; buildPythonApplication { pname = "${name}-cli"; version = "0.1"; propagatedBuildInputs = [ tqdm websockets ]; src = ./cli; }; devShell = pkgs.mkShell { nativeBuildInputs = with pkgs; [ stdenv.cc rustc cargo cargo-audit cargo-flamegraph (python3.withPackages (p: with p; [ tqdm websockets ])) ]; RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; }; } ); }