diff --git a/.gitignore b/.gitignore index ea8c4bf..d787b70 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /target +/result diff --git a/flake.lock b/flake.lock index 36b08f6..31a69e9 100644 --- a/flake.lock +++ b/flake.lock @@ -17,21 +17,6 @@ } }, "flake-utils": { - "locked": { - "lastModified": 1617631617, - "narHash": "sha256-PARRCz55qN3gy07VJZIlFeOX420d0nGF0RzGI/9hVlw=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "b2c27d1a81b0dc266270fa8aeecebbd1807fc610", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { "locked": { "lastModified": 1614513358, "narHash": "sha256-LakhOx3S1dRjnh0b5Dg3mbZyH0ToC9I8Y2wKSkBaTzU=", @@ -46,7 +31,39 @@ "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": 1617833390, + "narHash": "sha256-puAjU8RcmfqrPYnOuDvESPgA+QtaszUKJZ7jrjnk7iU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "87df3e15f029f44a3dca474907a3c02bcbe03414", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1617636226, "narHash": "sha256-iZhBWrOR2DoDs1C+0FlnM9AQLMol/qoGQ+d+S43CKJM=", @@ -62,7 +79,7 @@ "type": "github" } }, - "nixpkgs_2": { + "nixpkgs_3": { "locked": { "lastModified": 1617325113, "narHash": "sha256-GksR0nvGxfZ79T91UUtWjjccxazv6Yh/MvEJ82v1Xmw=", @@ -80,15 +97,16 @@ "root": { "inputs": { "flake-compat": "flake-compat", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" + "naersk": "naersk", + "nixpkgs": "nixpkgs_2", + "rust-overlay": "rust-overlay", + "utils": "utils" } }, "rust-overlay": { "inputs": { - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_2" + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_3" }, "locked": { "lastModified": 1617762447, @@ -103,6 +121,21 @@ "repo": "rust-overlay", "type": "github" } + }, + "utils": { + "locked": { + "lastModified": 1617631617, + "narHash": "sha256-PARRCz55qN3gy07VJZIlFeOX420d0nGF0RzGI/9hVlw=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b2c27d1a81b0dc266270fa8aeecebbd1807fc610", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index b63c4d0..21c57a5 100644 --- a/flake.nix +++ b/flake.nix @@ -4,36 +4,51 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; rust-overlay.url = "github:oxalica/rust-overlay"; - flake-utils.url = "github:numtide/flake-utils"; + utils.url = "github:numtide/flake-utils"; + naersk.url = "github:nmattia/naersk"; flake-compat = { url = "github:edolstra/flake-compat"; flake = false; }; }; - outputs = { self, nixpkgs, flake-utils, rust-overlay, flake-compat }: - flake-utils.lib.eachDefaultSystem + outputs = { self, nixpkgs, utils, rust-overlay, naersk, ... }: + utils.lib.eachDefaultSystem (system: - let pkgs = import nixpkgs { - inherit system; - overlays = [ rust-overlay.overlay ]; - }; in - { - devShell = pkgs.mkShell { - nativeBuildInputs = [ - (pkgs.rust-bin.stable.latest.default.override { - extensions = [ - "rust-src" - "cargo" - "rustc" - "rls" - "rust-analysis" - "rustfmt" - "clippy" - ]; + let + pkgs = import nixpkgs { + inherit system; + overlays = [ + rust-overlay.overlay + (self: super: { + # Because rust-overlay bundles multple rust packages into one + # derivation, specify that mega-bundle here, so that naersk + # will use them automatically. + rustc = self.rust-bin.stable.latest.default; + cargo = self.rust-bin.stable.latest.default; }) ]; }; + naersk-lib = naersk.lib."${system}"; + in rec { + # `nix build` + packages.bouncy = naersk-lib.buildPackage { + pname = "bouncy"; + root = ./.; + }; + defaultPackage = packages.bouncy; + + # `nix run` + apps.bouncy = utils.lib.mkApp { + drv = packages.bouncy; + }; + defaultApp = apps.bouncy; + + # `nix develop` + devShell = pkgs.mkShell { + nativeBuildInputs = with pkgs; [ rustc cargo ]; + RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}"; + }; } ); }