{ description = "tlater.net web server"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-20.09"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { flake-utils.follows = "flake-utils"; nixpkgs.follows = "nixpkgs"; }; }; naersk = { url = "github:nmattia/naersk"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, rust-overlay, naersk }@inputs: flake-utils.lib.simpleFlake { inherit self nixpkgs; name = "tlaternet-webserver"; preOverlays = [ rust-overlay.overlay ]; overlay = final: prev: { tlaternet-webserver = let # The rust toolchain to use toolchain = prev.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; # The rust build lib, set to use the toolchain naersk-lib = naersk.lib.${prev.system}.override { cargo = toolchain; rustc = toolchain; }; # pkg-config, needed to include many native libs nativeBuildInputs = [ prev.pkgconfig ]; # Native libs buildInputs = [ prev.openssl ]; in rec { # The packages provided by this flake packages = { webserver = prev.callPackage ({ rustPlatform, openssl, pkgconfig, ... }: naersk-lib.buildPackage { inherit nativeBuildInputs buildInputs; pname = "tlaternet-webserver"; root = ./.; }) { }; }; defaultPackage = packages.webserver; # A dev shell to hack manually; note this includes # additional toolchain components devShell = prev.mkShell { inherit buildInputs; nativeBuildInputs = nativeBuildInputs ++ [ (toolchain.override { extensions = [ "rust-src" "rust-analysis" "rust-analyzer-preview" ]; }) ]; }; }; }; }; }