From 1cd69c928534324a2a9bdb35316824ad07fe5d39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Fri, 20 Dec 2024 15:08:06 -0300 Subject: [PATCH 01/10] chore(rustfmt): always force edition 2024 --- rustfmt.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rustfmt.toml b/rustfmt.toml index 819554b6..2b211b0d 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -1,3 +1,5 @@ +edition = "2024" + reorder_imports = true imports_granularity = "Crate" imports_layout = "HorizontalVertical" From c8d215579dab382e1b24a378ac07d67db35f4975 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Fri, 20 Dec 2024 13:27:00 -0300 Subject: [PATCH 02/10] chore: formatting fixes --- providers/src/chat/client.rs | 8 ++++---- providers/src/chat/mod.rs | 2 +- ui/src/components/features/chat/Chat.tsx | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/providers/src/chat/client.rs b/providers/src/chat/client.rs index 51ca5793..8b45ce9d 100644 --- a/providers/src/chat/client.rs +++ b/providers/src/chat/client.rs @@ -1,27 +1,27 @@ use std::{ sync::{ - atomic::{AtomicU16, Ordering}, Arc, + atomic::{AtomicU16, Ordering}, }, time::Duration, }; use async_stream::try_stream; use futures::{ - stream::{SplitSink, SplitStream}, Future, SinkExt, Stream, StreamExt, + stream::{SplitSink, SplitStream}, }; use tokio::{ net::TcpStream, sync::{ - mpsc::{self, Receiver, Sender}, Mutex, + mpsc::{self, Receiver, Sender}, }, }; -use tokio_tungstenite::{connect_async, tungstenite::Message, MaybeTlsStream, WebSocketStream}; +use tokio_tungstenite::{MaybeTlsStream, WebSocketStream, connect_async, tungstenite::Message}; use super::{ commands::{CommandData, CommandPayload, ComposedMessage}, diff --git a/providers/src/chat/mod.rs b/providers/src/chat/mod.rs index 323a92f3..259967a3 100644 --- a/providers/src/chat/mod.rs +++ b/providers/src/chat/mod.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use client::{ChatClient, StreamMessage}; use commands::ChatCommand; use error::TransportError; -use futures::{pin_mut, Stream, StreamExt}; +use futures::{Stream, StreamExt, pin_mut}; use response::{ChatInfo, ChatInfoType, ChatResponse, DirectionType}; use tokio::{ self, diff --git a/ui/src/components/features/chat/Chat.tsx b/ui/src/components/features/chat/Chat.tsx index 16ffe90a..7ef559a9 100644 --- a/ui/src/components/features/chat/Chat.tsx +++ b/ui/src/components/features/chat/Chat.tsx @@ -49,7 +49,7 @@ const Chat = () => {
{msg.content.type === "rcvMsgContent" && ( From 07d0c6b02ba5a1ba8b659d9f2193164c1dc74472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Fri, 20 Dec 2024 13:27:00 -0300 Subject: [PATCH 03/10] chore(pre-commit): make prettier ignore pnpm-lock.yaml --- flake.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 54015fd5..5dab23f1 100644 --- a/flake.nix +++ b/flake.nix @@ -59,7 +59,11 @@ packageOverrides.cargo = rust; }; - prettier.enable = true; + prettier = { + enable = true; + + excludes = [ "pnpm-lock.yaml" ]; + }; }; }; From 4b6f2595bd10edcb430df94310ab0ba7489ce2b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Wed, 18 Dec 2024 18:23:48 -0300 Subject: [PATCH 04/10] feat(nix): add muchat package --- flake.nix | 71 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/flake.nix b/flake.nix index 5dab23f1..9d7765c5 100644 --- a/flake.nix +++ b/flake.nix @@ -23,28 +23,18 @@ flake-utils.lib.eachDefaultSystem ( system: let - inherit (builtins) attrValues; - pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay) ]; config.allowUnfree = true; }; - inherit (pkgs) mkShell rust-bin writeShellApplication; + inherit (pkgs) makeRustPlatform mkShell rust-bin; rust = rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; - - scripts.muchat-watch = writeShellApplication { - name = "muchat-watch"; - runtimeInputs = with pkgs; [ - cargo-nextest - cargo-watch - rust - ]; - text = '' - exec cargo watch -s 'cargo fmt && cargo clippy --all && cargo nextest run' - ''; + rustPlatform = makeRustPlatform { + rustc = rust; + cargo = rust; }; checks.pre-commit-check = pre-commit-hooks.lib.${system}.run { @@ -67,7 +57,42 @@ }; }; - packages.simplex-chat = pkgs.callPackage ./nix/simplex-chat.nix { }; + dependencies = + with pkgs; + { + x86_64-linux = [ + openssl + webkitgtk + gtk3 + cairo + gdk-pixbuf + glib + dbus + openssl + librsvg + webkitgtk_4_1 + ]; + + aarch64-darwin = [ + + ]; + } + .${system}; + + packages = { + default = rustPlatform.buildRustPackage { + buildInputs = dependencies; + nativeBuildInputs = with pkgs; [ pkg-config ]; + + name = "muchat"; + src = ./.; + buildFeatures = [ ]; + cargoLock.lockFile = ./Cargo.lock; + useNextest = true; + }; + + simplex-chat = pkgs.callPackage ./nix/simplex-chat.nix { }; + }; in { inherit checks packages; @@ -78,8 +103,8 @@ name = "muchat"; buildInputs = with pkgs; [ - (attrValues scripts) - (attrValues packages) + dependencies + packages.simplex-chat rust @@ -88,18 +113,6 @@ cargo-watch nodePackages.pnpm nodejs - openssl - pkg-config - - webkitgtk - gtk3 - cairo - gdk-pixbuf - glib - dbus - openssl - librsvg - webkitgtk_4_1 ]; }; } From d03c8c30af7382584007bff9134608ad0d4c69cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Thu, 19 Dec 2024 16:26:03 -0300 Subject: [PATCH 05/10] chore: change generated binary name --- ui/src-tauri/Cargo.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/src-tauri/Cargo.toml b/ui/src-tauri/Cargo.toml index 519913a8..90db81ad 100644 --- a/ui/src-tauri/Cargo.toml +++ b/ui/src-tauri/Cargo.toml @@ -10,6 +10,10 @@ authors = ["CainĂ£ Costa "] name = "app_lib" crate-type = ["staticlib", "cdylib", "rlib"] +[[bin]] +name = "muchat" +path = "src/main.rs" + [build-dependencies] tauri-build = { version = "2.0.3", features = [] } From e223c227ac6e125e075af26e03ba5057728ddf59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Thu, 19 Dec 2024 16:37:59 -0300 Subject: [PATCH 06/10] chore(nix): merge simplex-chat and muchat ui inside the same package --- flake.nix | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/flake.nix b/flake.nix index 9d7765c5..272d1e0a 100644 --- a/flake.nix +++ b/flake.nix @@ -79,12 +79,31 @@ } .${system}; - packages = { - default = rustPlatform.buildRustPackage { + packages = rec { + default = pkgs.stdenv.mkDerivation { + name = "muchat"; + + nativeBuildInputs = [ pkgs.makeWrapper ]; + + dontBuild = true; + dontUnpack = true; + + installPhase = '' + mkdir -p $out/{share/muchat/bin,bin} + + install -m 0755 ${muchat}/bin/muchat $out/bin/.muchat-unwrapped + install -m 0755 ${simplex-chat}/bin/simplex-chat $out/share/muchat/bin/simplex-chat + + makeWrapper $out/bin/.muchat-unwrapped $out/bin/muchat \ + --prefix PATH : $out/share/muchat/bin + ''; + }; + + muchat = rustPlatform.buildRustPackage { buildInputs = dependencies; nativeBuildInputs = with pkgs; [ pkg-config ]; - name = "muchat"; + name = "muchat-ui"; src = ./.; buildFeatures = [ ]; cargoLock.lockFile = ./Cargo.lock; From f12ab74deffe759d48ad55fa62e8c21b3f1b3112 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Fri, 20 Dec 2024 11:54:44 -0300 Subject: [PATCH 07/10] feat(nix): build javascript frontend --- flake.nix | 2 ++ ui/default.nix | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 ui/default.nix diff --git a/flake.nix b/flake.nix index 272d1e0a..2a34e4a4 100644 --- a/flake.nix +++ b/flake.nix @@ -99,6 +99,8 @@ ''; }; + frontend = pkgs.callPackage ./ui { }; + muchat = rustPlatform.buildRustPackage { buildInputs = dependencies; nativeBuildInputs = with pkgs; [ pkg-config ]; diff --git a/ui/default.nix b/ui/default.nix new file mode 100644 index 00000000..e32ffb74 --- /dev/null +++ b/ui/default.nix @@ -0,0 +1,40 @@ +{ + nodejs, + pnpm, + stdenv, +}: +let + inherit (builtins) fromJSON readFile; + inherit (stdenv) mkDerivation; + + package-json = fromJSON (readFile ./package.json); +in +mkDerivation (final: { + inherit (package-json) version; + pname = package-json.name; + + src = ./.; + + nativeBuildInputs = [ + nodejs + pnpm.configHook + ]; + + buildPhase = '' + runHook preBuild + + pnpm build + + runHook postBuild + ''; + + installPhase = '' + mkdir -p $out + cp -r dist/* $out/ + ''; + + pnpmDeps = pnpm.fetchDeps { + inherit (final) pname version src; + hash = "sha256-YIy2dICdyQj+v0lqOZGS95oPKdGmNHUSY4e4WzK/xSw="; + }; +}) From 8cadf20f1897d64fe99128f6e4a31e8de6db2655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Fri, 20 Dec 2024 12:13:54 -0300 Subject: [PATCH 08/10] feat(nix): build UI --- flake.nix | 57 +++++++++++++++------------------------- ui/src-tauri/default.nix | 49 ++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 ui/src-tauri/default.nix diff --git a/flake.nix b/flake.nix index 2a34e4a4..a93069fd 100644 --- a/flake.nix +++ b/flake.nix @@ -23,13 +23,22 @@ flake-utils.lib.eachDefaultSystem ( system: let + inherit (builtins) attrValues; + pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay) ]; config.allowUnfree = true; }; - inherit (pkgs) makeRustPlatform mkShell rust-bin; + inherit (pkgs) + callPackage + makeRustPlatform + makeWrapper + mkShell + rust-bin + stdenv + ; rust = rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; rustPlatform = makeRustPlatform { @@ -57,33 +66,11 @@ }; }; - dependencies = - with pkgs; - { - x86_64-linux = [ - openssl - webkitgtk - gtk3 - cairo - gdk-pixbuf - glib - dbus - openssl - librsvg - webkitgtk_4_1 - ]; - - aarch64-darwin = [ - - ]; - } - .${system}; - packages = rec { - default = pkgs.stdenv.mkDerivation { + default = stdenv.mkDerivation { name = "muchat"; - nativeBuildInputs = [ pkgs.makeWrapper ]; + nativeBuildInputs = [ makeWrapper ]; dontBuild = true; dontUnpack = true; @@ -91,7 +78,7 @@ installPhase = '' mkdir -p $out/{share/muchat/bin,bin} - install -m 0755 ${muchat}/bin/muchat $out/bin/.muchat-unwrapped + install -m 0755 ${ui}/bin/muchat $out/bin/.muchat-unwrapped install -m 0755 ${simplex-chat}/bin/simplex-chat $out/share/muchat/bin/simplex-chat makeWrapper $out/bin/.muchat-unwrapped $out/bin/muchat \ @@ -99,17 +86,15 @@ ''; }; - frontend = pkgs.callPackage ./ui { }; + frontend = callPackage ./ui { }; - muchat = rustPlatform.buildRustPackage { - buildInputs = dependencies; - nativeBuildInputs = with pkgs; [ pkg-config ]; + ui = callPackage ./ui/src-tauri { + muchat = { + inherit packages rust rustPlatform; - name = "muchat-ui"; - src = ./.; - buildFeatures = [ ]; - cargoLock.lockFile = ./Cargo.lock; - useNextest = true; + src = ./.; + cargoLock.lockFile = ./Cargo.lock; + }; }; simplex-chat = pkgs.callPackage ./nix/simplex-chat.nix { }; @@ -122,9 +107,9 @@ inherit (checks.pre-commit-check) shellHook; name = "muchat"; + inputsFrom = attrValues packages; buildInputs = with pkgs; [ - dependencies packages.simplex-chat rust diff --git a/ui/src-tauri/default.nix b/ui/src-tauri/default.nix new file mode 100644 index 00000000..91ccd027 --- /dev/null +++ b/ui/src-tauri/default.nix @@ -0,0 +1,49 @@ +{ + stdenv, + pkg-config, + openssl, + webkitgtk, + gtk3, + cairo, + gdk-pixbuf, + glib, + dbus, + librsvg, + webkitgtk_4_1, + muchat, + lib, +}: +let + inherit (muchat) rustPlatform; + inherit (lib) optionals; + inherit (stdenv) isDarwin isLinux; + + dependencies = + [ ] + ++ optionals isLinux [ + openssl + webkitgtk + gtk3 + cairo + gdk-pixbuf + glib + dbus + librsvg + webkitgtk_4_1 + ] + ++ optionals isDarwin [ ]; +in +rustPlatform.buildRustPackage { + inherit (muchat) cargoLock src; + + buildInputs = dependencies; + nativeBuildInputs = [ pkg-config ]; + + name = "muchat-ui"; + cargoBuildFlags = [ "-p muchat-ui" ]; + useNextest = true; + + postPatch = '' + cp -rf ${muchat.packages.frontend} ui/dist + ''; +} From c642c58fde5509d63637d3a83818b8d5aa069576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Fri, 20 Dec 2024 14:40:41 -0300 Subject: [PATCH 09/10] feat(ci): add a new workflow to build things with nix --- .github/workflows/nix.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 .github/workflows/nix.yml diff --git a/.github/workflows/nix.yml b/.github/workflows/nix.yml new file mode 100644 index 00000000..27dc5ae9 --- /dev/null +++ b/.github/workflows/nix.yml @@ -0,0 +1,27 @@ +name: Build (Nix) + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + - run: nix flake check + build-node: + needs: check + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + steps: + - uses: actions/checkout@v3 + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + - run: nix build .# From 4d43b7eb449dc9f803fca1b31213ebaeccdba955 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cain=C3=A3=20Costa?= Date: Fri, 20 Dec 2024 12:55:58 -0300 Subject: [PATCH 10/10] chore(nix): reduce invalidations by building only what's needed --- flake.nix | 92 +++++++++++----------------------------- lib.nix | 53 +++++++++++++++++++++++ ui/default.nix | 6 ++- ui/package.json | 2 +- ui/src-tauri/Cargo.toml | 10 ++--- ui/src-tauri/default.nix | 70 +++++++++++++++++++++--------- 6 files changed, 135 insertions(+), 98 deletions(-) create mode 100644 lib.nix diff --git a/flake.nix b/flake.nix index a93069fd..f17fe62c 100644 --- a/flake.nix +++ b/flake.nix @@ -31,20 +31,7 @@ config.allowUnfree = true; }; - inherit (pkgs) - callPackage - makeRustPlatform - makeWrapper - mkShell - rust-bin - stdenv - ; - - rust = rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; - rustPlatform = makeRustPlatform { - rustc = rust; - cargo = rust; - }; + muchat = import ./lib.nix pkgs; checks.pre-commit-check = pre-commit-hooks.lib.${system}.run { src = ./.; @@ -55,7 +42,7 @@ rustfmt = { enable = true; - packageOverrides.cargo = rust; + packageOverrides.cargo = muchat.packages.rust; }; prettier = { @@ -66,61 +53,30 @@ }; }; - packages = rec { - default = stdenv.mkDerivation { - name = "muchat"; - - nativeBuildInputs = [ makeWrapper ]; - - dontBuild = true; - dontUnpack = true; - - installPhase = '' - mkdir -p $out/{share/muchat/bin,bin} - - install -m 0755 ${ui}/bin/muchat $out/bin/.muchat-unwrapped - install -m 0755 ${simplex-chat}/bin/simplex-chat $out/share/muchat/bin/simplex-chat - - makeWrapper $out/bin/.muchat-unwrapped $out/bin/muchat \ - --prefix PATH : $out/share/muchat/bin - ''; - }; - - frontend = callPackage ./ui { }; - - ui = callPackage ./ui/src-tauri { - muchat = { - inherit packages rust rustPlatform; - - src = ./.; - cargoLock.lockFile = ./Cargo.lock; - }; - }; - - simplex-chat = pkgs.callPackage ./nix/simplex-chat.nix { }; - }; in { - inherit checks packages; - - devShells.default = mkShell { - inherit (checks.pre-commit-check) shellHook; - - name = "muchat"; - inputsFrom = attrValues packages; - - buildInputs = with pkgs; [ - packages.simplex-chat - - rust - - cargo-edit - cargo-tauri - cargo-watch - nodePackages.pnpm - nodejs - ]; - }; + inherit checks; + inherit (muchat) packages; + + devShells.default = + with pkgs; + mkShell { + inherit (checks.pre-commit-check) shellHook; + + name = "muchat-shell"; + inputsFrom = attrValues muchat.packages; + + buildInputs = with pkgs; [ + muchat.packages.simplex-chat + muchat.packages.rust + + cargo-edit + cargo-tauri + cargo-watch + nodePackages.pnpm + nodejs + ]; + }; } ); } diff --git a/lib.nix b/lib.nix new file mode 100644 index 00000000..5969fc6f --- /dev/null +++ b/lib.nix @@ -0,0 +1,53 @@ +{ + callPackage, + makeRustPlatform, + makeWrapper, + rust-bin, + stdenv, + ... +}: +let + inherit (builtins) readFile; + + lib = { + src = ./.; + + rustPlatform = makeRustPlatform { + rustc = rust; + cargo = rust; + }; + + baseName = name: baseNameOf (toString name); + loadTOML = path: fromTOML (readFile path); + }; + + rust = rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; + + packages = { + inherit rust; + + default = stdenv.mkDerivation { + name = "muchat"; + + nativeBuildInputs = [ makeWrapper ]; + + dontBuild = true; + dontUnpack = true; + + installPhase = with packages; '' + mkdir -p $out/{share/muchat/bin,bin} + + install -m 0755 ${ui}/bin/muchat-ui $out/bin/.muchat-unwrapped + makeWrapper $out/bin/.muchat-unwrapped $out/bin/muchat \ + --prefix PATH : ${simplex-chat}/bin + ''; + }; + + frontend = callPackage ./ui { muchat = { inherit lib; }; }; + simplex-chat = callPackage ./nix/simplex-chat.nix { }; + ui = callPackage ./ui/src-tauri { muchat = { inherit lib packages; }; }; + }; +in +{ + inherit lib packages; +} diff --git a/ui/default.nix b/ui/default.nix index e32ffb74..10677663 100644 --- a/ui/default.nix +++ b/ui/default.nix @@ -2,9 +2,11 @@ nodejs, pnpm, stdenv, + muchat, }: let - inherit (builtins) fromJSON readFile; + inherit (builtins) filterSource fromJSON readFile; + inherit (muchat.lib) baseName; inherit (stdenv) mkDerivation; package-json = fromJSON (readFile ./package.json); @@ -13,7 +15,7 @@ mkDerivation (final: { inherit (package-json) version; pname = package-json.name; - src = ./.; + src = filterSource (name: _: !(baseName name == "src-tauri")) ./.; nativeBuildInputs = [ nodejs diff --git a/ui/package.json b/ui/package.json index 38cdb4dd..a7550b2f 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,5 +1,5 @@ { - "name": "muchat-ui", + "name": "muchat-ui-frontend", "private": true, "version": "0.0.0", "type": "module", diff --git a/ui/src-tauri/Cargo.toml b/ui/src-tauri/Cargo.toml index 90db81ad..1667db6e 100644 --- a/ui/src-tauri/Cargo.toml +++ b/ui/src-tauri/Cargo.toml @@ -10,20 +10,16 @@ authors = ["CainĂ£ Costa "] name = "app_lib" crate-type = ["staticlib", "cdylib", "rlib"] -[[bin]] -name = "muchat" -path = "src/main.rs" - [build-dependencies] tauri-build = { version = "2.0.3", features = [] } [dependencies] log = "0.4.22" -serde = { workspace = true } -serde_json = { workspace = true } +serde = { version = "1.0.216", features = ["derive"] } +serde_json = "1.0.133" tauri = "2.1.1" tauri-plugin-fs = "2.2.0" tauri-plugin-log = "2.2.0" tauri-plugin-shell = "2.2.0" tauri-plugin-websocket = "2.2.0" -tokio = { workspace = true } +tokio = { version = "1.42.0", features = ["full"] } diff --git a/ui/src-tauri/default.nix b/ui/src-tauri/default.nix index 91ccd027..f06299f4 100644 --- a/ui/src-tauri/default.nix +++ b/ui/src-tauri/default.nix @@ -1,24 +1,55 @@ { - stdenv, - pkg-config, - openssl, - webkitgtk, - gtk3, cairo, + dbus, gdk-pixbuf, glib, - dbus, + gnused, + gtk3, + lib, librsvg, - webkitgtk_4_1, muchat, - lib, + openssl, + pkg-config, + pnpm, + stdenv, + webkitgtk, + webkitgtk_4_1, }: let - inherit (muchat) rustPlatform; - inherit (lib) optionals; + inherit (lib) optionals splitString; + inherit (muchat.lib) loadTOML rustPlatform src; inherit (stdenv) isDarwin isLinux; - dependencies = + cargoTOML = loadTOML ./Cargo.toml; + + toPatch = + with builtins; + path: target: + let + content = readFile path; + lines = splitString "\n" content; + additions = map (line: "+" + line) lines; + diffBody = concatStringsSep "\n" additions; + lineCount = length lines; + in + toFile "${target}.patch" '' + diff --git a/${target} b/${target} + new file mode 100644 + index 0000000..e69de29 + --- /dev/null + +++ b/${target} + @@ -0,0 +1,${toString lineCount} @@ + ${diffBody} + ''; + +in +rustPlatform.buildRustPackage { + inherit (cargoTOML.package) name version; + + src = "${src}/ui/src-tauri"; + cargoLock.lockFile = "${src}/Cargo.lock"; + + buildInputs = [ ] ++ optionals isLinux [ openssl @@ -32,18 +63,17 @@ let webkitgtk_4_1 ] ++ optionals isDarwin [ ]; -in -rustPlatform.buildRustPackage { - inherit (muchat) cargoLock src; - buildInputs = dependencies; - nativeBuildInputs = [ pkg-config ]; + nativeBuildInputs = [ + gnused + pkg-config + ]; - name = "muchat-ui"; - cargoBuildFlags = [ "-p muchat-ui" ]; useNextest = true; - postPatch = '' - cp -rf ${muchat.packages.frontend} ui/dist + patches = [ (toPatch "${src}/Cargo.lock" "Cargo.lock") ]; + + patchPhase = '' + sed -i -e "s;../dist;${muchat.packages.frontend};g" tauri.conf.json ''; }