{ description = "Organic Org parser"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; }; }; }; outputs = { self, nixpkgs, rust-overlay, }: let forAllSystems = func: builtins.listToAttrs ( map (system: { name = system; value = func system; }) nixpkgs.lib.systems.flakeExposed ); in { devShells = forAllSystems ( system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; rustToolchain = (pkgs.pkgsBuildHost.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml).override { targets = [ "wasm32-unknown-unknown" ]; }; in { default = pkgs.mkShell { nativeBuildInputs = [ rustToolchain ]; buildInputs = with pkgs; [ wasm-bindgen-cli ]; }; } ); packages = forAllSystems ( system: let overlays = [ (import rust-overlay) ]; pkgs = import nixpkgs { inherit system overlays; }; build_wasm = { bindgenTarget ? null, }: (pkgs.callPackage ./nix/package.nix { targetBins = [ "wasm" ]; features = [ "wasm" ]; cargoBuildTarget = "wasm32-unknown-unknown"; buildType = "wasm"; }).overrideAttrs ( old: let bindgen_command = [ "${pkgs.wasm-bindgen-cli}/bin/wasm-bindgen" "--target" bindgenTarget "--out-dir" "target/wasm32-unknown-unknown/${bindgenTarget}" "target/wasm32-unknown-unknown/wasm/wasm.wasm" ]; in { postBuild = '' ${pkgs.lib.escapeShellArgs bindgen_command} ''; installPhase = '' mkdir -p $out/share/${bindgenTarget} cp target/wasm32-unknown-unknown/${bindgenTarget}/* $out/share/${bindgenTarget} ''; } ); in rec { all = pkgs.symlinkJoin { name = "all"; paths = [ library devTools wasm_bundler wasm_web ]; }; library = (pkgs.callPackage ./nix/package.nix { buildLib = true; }).overrideAttrs ( old: let in { installPhase = '' mkdir -p $out/lib cp target/*/release/liborganic.rlib $out/lib/ ''; } ); devTools = pkgs.callPackage ./nix/package.nix { targetBins = [ "parse" "compare" ]; features = [ "compare" ]; }; wasm_bundler = build_wasm { bindgenTarget = "bundler"; }; wasm_web = build_wasm { bindgenTarget = "web"; }; docker_env = pkgs.buildEnv { name = "organic"; paths = with pkgs; [ devTools bash uutils-coreutils-noprefix # toybox # Smaller than uutils-coreutils? ]; }; default = all; } ); }; }