diff --git a/flake.lock b/flake.lock index 723c444..ce637f8 100644 --- a/flake.lock +++ b/flake.lock @@ -15,6 +15,26 @@ "type": "github" } }, + "naersk": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1614785451, + "narHash": "sha256-TPw8kQvr2UNCuvndtY+EjyXp6Q5GEW2l9UafXXh1XmI=", + "owner": "nmattia", + "repo": "naersk", + "rev": "e0fe990b478a66178a58c69cf53daec0478ca6f9", + "type": "github" + }, + "original": { + "owner": "nmattia", + "repo": "naersk", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1617042094, @@ -34,6 +54,7 @@ "root": { "inputs": { "flake-utils": "flake-utils", + "naersk": "naersk", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay" } diff --git a/flake.nix b/flake.nix index b1e7936..5ed0bdb 100644 --- a/flake.nix +++ b/flake.nix @@ -11,27 +11,62 @@ nixpkgs.follows = "nixpkgs"; }; }; + naersk = { + url = "github:nmattia/naersk"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; - outputs = { self, nixpkgs, flake-utils, rust-overlay }@inputs: + outputs = { self, nixpkgs, flake-utils, rust-overlay, naersk }@inputs: flake-utils.lib.simpleFlake { inherit self nixpkgs; name = "tlaternet"; preOverlays = [ rust-overlay.overlay ]; - shell = { pkgs }: - let - rust_channel = - pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; - in pkgs.mkShell { - nativeBuildInputs = with pkgs; [ - (rust_channel.override { - extensions = - [ "rust-src" "rust-analysis" "rust-analyzer-preview" ]; - }) - pkgconfig - ]; - buildInputs = with pkgs; [ openssl ]; + overlay = final: prev: { + tlaternet = 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 + tlaternet = { + webserver = prev.callPackage + ({ rustPlatform, openssl, pkgconfig, ... }: + naersk-lib.buildPackage { + inherit nativeBuildInputs buildInputs; + + pname = "tlaternet-webserver"; + root = ./.; + }) { }; + }; + defaultPackage = tlaternet.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" ]; + }) + ]; + }; }; + }; }; }