{ description = "Methanium Status"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; rust-overlay.url = "github:oxalica/rust-overlay"; }; outputs = { self, nixpkgs, rust-overlay, ... }: let systems = [ "aarch64-darwin" "aarch64-linux" "x86_64-darwin" "x86_64-linux" ]; forAllSystems = nixpkgs.lib.genAttrs systems; pkgsFor = system: import nixpkgs { inherit system; overlays = [ rust-overlay.overlays.default ]; }; in { packages = forAllSystems ( system: let pkgs = pkgsFor system; root = toString ./.; rustToolchain = pkgs.rust-bin.stable.latest.default.override { targets = [ "wasm32-unknown-unknown" ]; }; wasmBindgenCli = pkgs.rustPlatform.buildRustPackage rec { pname = "wasm-bindgen-cli"; version = "0.2.126"; src = pkgs.fetchCrate { inherit pname version; hash = "sha256-H6Is3fiZVxZCfOMWK5dWMSrtn50VGv0sfdnsT+cTtyk="; }; cargoHash = "sha256-VucqkXbCi4qtQzY/HrXiDnbSURsagPsdNVMn1Tw3UiY="; doCheck = false; }; mtpSource = pkgs.fetchzip { url = "https://git.methanium.net/methanium/mtp/releases/download/0.2.0-dev-a692bed/mtp-0.2.0.tgz"; hash = "sha256-RIk4zhSkKg9jpeEoXNlRzSIZiOsNTEX/1mXVu1m/9rY="; }; mtpCargoDeps = pkgs.rustPlatform.fetchCargoVendor { src = mtpSource; hash = "sha256-jNQdhihszzQ3lcDk7WC3D6tigluhKPohAlNaTm77yuU="; }; source = pkgs.lib.cleanSourceWith { src = ./.; filter = path: _type: let relative = pkgs.lib.removePrefix "${root}/" (toString path); in !(pkgs.lib.hasPrefix ".git/" relative) && !(pkgs.lib.hasInfix "node_modules" relative) && !(pkgs.lib.hasInfix "target/" relative) && !(pkgs.lib.hasInfix "apps/frontend/dist/" relative) && relative != "result"; }; frontendNativeBuildInputs = [ pkgs.binaryen pkgs.cacert pkgs.git pkgs.nodejs pkgs.pnpm pkgs.wasm-pack rustToolchain wasmBindgenCli ]; frontendDeps = pkgs.fetchPnpmDeps { pname = "methanium-status-frontend-deps"; version = "0.1.0"; src = source; pnpm = pkgs.pnpm; fetcherVersion = 4; hash = "sha256-x9YvkWSTYG3AULRNXdaNOnHQTtlosZGqq//jV6DPkSk="; }; frontend = pkgs.stdenvNoCC.mkDerivation { pname = "methanium-status-frontend"; version = "0.1.0"; src = source; nativeBuildInputs = frontendNativeBuildInputs ++ [ pkgs.pnpmConfigHook ]; pnpmDeps = frontendDeps; buildPhase = '' runHook preBuild export HOME="$TMPDIR/home" export CARGO_HOME="$TMPDIR/cargo" export CARGO_NET_OFFLINE=true mkdir -p "$CARGO_HOME" cat > "$CARGO_HOME/config.toml" <