aboutsummaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2022-06-07 12:28:18 +0200
committerMaximilian Manz <maximilian.manz@de.clara.net>2022-06-20 11:33:04 +0200
commit0fe38f6b06118107f9fbe89ff5dab6a287f76f7b (patch)
tree8df36a36cd75db8600c6d63a0a6fc167829c20f6 /flake.nix
parentprocess sync and update in parallel (diff)
add nix flake
Diffstat (limited to 'flake.nix')
-rw-r--r--flake.nix103
1 files changed, 103 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..851c72c
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,103 @@
+{
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs";
+ rust-overlay = {
+ url = "github:oxalica/rust-overlay";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ naersk = {
+ url = "github:nmattia/naersk";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ utils.url = "github:numtide/flake-utils";
+ };
+
+ outputs = { self, nixpkgs, rust-overlay, utils, naersk }:
+ with nixpkgs.lib;
+ recursiveUpdate (utils.lib.eachDefaultSystem (system:
+ let
+ pkgs = nixpkgs.legacyPackages.${system};
+
+ rust = rust-overlay.packages."${system}".rust;
+
+ naersk-lib = naersk.lib."${system}".override {
+ cargo = rust;
+ rustc = rust;
+ };
+ in rec {
+ packages.default = packages.gtree;
+
+ packages.gtree = naersk-lib.buildPackage {
+ pname = "gtree";
+ root = ./.;
+
+ nativeBuildInputs = [ pkgs.perl ];
+
+ cargoBuildOptions = prev:
+ prev ++ [ "--features=vendored-libgit2,vendored-openssl" ];
+ };
+
+ apps.default = utils.lib.mkApp { drv = packages.default; };
+
+ devShell = pkgs.mkShell { nativeBuildInputs = [ rust pkgs.perl ]; };
+ })) (utils.lib.eachSystem [
+ utils.lib.system.x86_64-linux
+ utils.lib.system.aarch64-linux
+ ] (system:
+ let
+ pkgs = nixpkgs.legacyPackages.${system};
+
+ staticInputs = with pkgs; [
+ pkgsStatic.stdenv.cc
+ pkgsStatic.openssl.dev
+ rust
+ perl
+ ];
+
+ target =
+ "${elemAt (strings.splitString "-" system) 0}-unknown-linux-musl";
+
+ rust = rust-overlay.packages."${system}".rust.override {
+ extensions = [ "rust-src" ];
+ targets = [ target ];
+ };
+
+ naersk-lib = naersk.lib."${system}".override {
+ cargo = rust;
+ rustc = rust;
+ };
+ in rec {
+ # `nix build`
+ packages.gtreeStatic = naersk-lib.buildPackage {
+ pname = "gtree";
+ root = ./.;
+
+ nativeBuildInputs = staticInputs;
+
+ CARGO_BUILD_TARGET = target;
+ CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS =
+ "-C target-feature=+crt-static";
+ CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS =
+ "-C target-feature=+crt-static";
+
+ OPENSSL_STATIC = true;
+ OPENSSL_DIR = "${pkgs.pkgsStatic.openssl}";
+ OPENSSL_LIB_DIR = "${pkgs.pkgsStatic.openssl.out}/lib";
+ OPENSSL_INCLUDE_DIR = "${pkgs.pkgsStatic.openssl.dev}/include";
+ };
+
+ devShell = pkgs.mkShell {
+ nativeBuildInputs = staticInputs;
+
+ shellHook = ''
+ export CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=+crt-static"
+ export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUSTFLAGS="-C target-feature=+crt-static"
+
+ export OPENSSL_STATIC=1
+ export OPENSSL_DIR="${pkgs.pkgsStatic.openssl}"
+ export OPENSSL_LIB_DIR="${pkgs.pkgsStatic.openssl.out}/lib"
+ export OPENSSL_INCLUDE_DIR="${pkgs.pkgsStatic.openssl.dev}/include"
+ '';
+ };
+ }));
+}