diff --git a/flake.lock b/flake.lock index 9226210..00ac87f 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1759632233, - "narHash": "sha256-krgZxGAIIIKFJS+UB0l8do3sYUDWJc75M72tepmVMzE=", + "lastModified": 1761594641, + "narHash": "sha256-sImk6SJQASDLQo8l+0zWWaBgg7TueLS6lTvdH5pBZpo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d7f52a7a640bc54c7bb414cca603835bf8dd4b10", + "rev": "1666250dbe4141e4ca8aaf89b40a3a51c2e36144", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 34e3d68..28be0b7 100644 --- a/flake.nix +++ b/flake.nix @@ -4,7 +4,10 @@ }; outputs = - { self, nixpkgs }: + { + self, + nixpkgs, + }: let system = "x86_64-linux"; # Adjust if necessary pkgs = import nixpkgs { @@ -14,9 +17,9 @@ in { packages.${system} = { - xsdata-pydantic = pkgs.python313Packages.callPackage ./xsdata-pydantic.nix { }; - entsoe-apy = pkgs.python313Packages.callPackage ./entsoe-apy.nix { - xsdata-pydantic = self.packages.${system}.xsdata-pydantic; + wasm-bindgen-cli_0_2_101 = pkgs.callPackage ./wasm-bindgen-cli.nix { }; + threema-desktop = pkgs.callPackage ./threema-desktop.nix { + wasm-bindgen-cli = self.packages.${system}.wasm-bindgen-cli_0_2_101; }; }; diff --git a/threema-desktop.nix b/threema-desktop.nix new file mode 100644 index 0000000..a252d9b --- /dev/null +++ b/threema-desktop.nix @@ -0,0 +1,76 @@ +{ + lib, + buildNpmPackage, + fetchFromGitHub, + rustPlatform, + binaryen, + pkg-config, + openssl, + wasm-bindgen-cli, + protobuf, + lld, +}: + +buildNpmPackage rec { + pname = "threema-desktop"; + version = "2.0-beta56"; + + src = fetchFromGitHub { + owner = "threema-ch"; + repo = "threema-desktop"; + rev = "v${version}"; + hash = "sha256-wMIQ7piFPOBp0IleSnDSrZjaqXNBDyeELjx+938pmVk="; + }; + + forceGitDeps = true; + + npmDepsHash = "sha256-9pyBbA+MARxWPZzyvjyKCuofgt+X3DrDCa81S6/S5qg="; # replace after first build + npmFlags = [ "--legacy-peer-deps" ]; + makeCacheWritable = true; + + cargoDeps = rustPlatform.fetchCargoVendor { + inherit src; + sourceRoot = "${src.name}/libs/libthreema"; + hash = "sha256-SQ33LcCYlJ3W69TmpH1AkOKaREZ0p3KotJPuKZtc6yI="; + }; + + nativeBuildInputs = [ + rustPlatform.bindgenHook + wasm-bindgen-cli + binaryen + pkg-config + protobuf + lld + ]; + + buildInputs = [ + openssl + ]; + + postPatch = '' + patchShebangs --build ./tools + patchShebangs --build ./libs/libthreema/tools + sed -i '/"engines":/,/},/d' package.json + ''; + + buildPhase = '' + runHook preBuild + npm run libthreema:build + npm run package binary consumer-live + runHook postBuild + ''; + + installPhase = '' + mkdir -p $out/opt/threema-desktop + cp -r build/out/* $out/opt/threema-desktop + ''; + + meta = with lib; { + description = "Threema App for Desktop (Windows/macOS/Linux)"; + longDescription = "A standalone Threema client for the desktop with end-to-end encryption"; + homepage = "https://threema.ch/"; + license = licenses.agpl3Plus; + maintainers = [ ]; + platforms = platforms.linux; + }; +} diff --git a/wasm-bindgen-cli.nix b/wasm-bindgen-cli.nix new file mode 100644 index 0000000..98d0da4 --- /dev/null +++ b/wasm-bindgen-cli.nix @@ -0,0 +1,19 @@ +{ + buildWasmBindgenCli, + fetchCrate, + rustPlatform, +}: + +buildWasmBindgenCli rec { + src = fetchCrate { + pname = "wasm-bindgen-cli"; + version = "0.2.101"; + hash = "sha256-txpbTzlrPSEktyT9kSpw4RXQoiSZHm9t3VxeRn//9JI="; + }; + + cargoDeps = rustPlatform.fetchCargoVendor { + inherit src; + inherit (src) pname version; + hash = "sha256-J+F9SqTpH3T0MbvlNKVyKnMachgn8UXeoTF0Pk3Xtnc="; + }; +}