From 74ac6f0e3b0ac7409bb8ed357d6cb5181e98247a Mon Sep 17 00:00:00 2001 From: Kristof Vandam Date: Sun, 4 Jan 2026 21:14:13 +0100 Subject: [PATCH] fixes missing dependencies for the nix builds * Adds `iproute2` to the wrapped `defguard-service` * Adds `update-desktop-database` to the wrapped `defguard-client` * Tauri Builds on the GTK3/WebKitGTK4.1, there was a mismatch with GTK4/WebKitGTK4.1, (GTK4 should use WebKitGTK6.0, but that isn't supported [yet](https://github.com/tauri-apps/tauri/pull/14684) for tauri. * No `Makefile` so we can overwrite/rename `postInstall` with `installPhase`. * Formatting With these changes in place, it fixes issue [#728](https://github.com/DefGuard/client/issues/728). --- flake.lock | 12 ++-- nix/package.nix | 151 +++++++++++++++++++++++++++++------------------- 2 files changed, 96 insertions(+), 67 deletions(-) diff --git a/flake.lock b/flake.lock index 3582629c..5284c259 100644 --- a/flake.lock +++ b/flake.lock @@ -44,11 +44,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1765644376, - "narHash": "sha256-yqHBL2wYGwjGL2GUF2w3tofWl8qO9tZEuI4wSqbCrtE=", + "lastModified": 1767364772, + "narHash": "sha256-fFUnEYMla8b7UKjijLnMe+oVFOz6HjijGGNS1l7dYaQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "23735a82a828372c4ef92c660864e82fbe2f5fbe", + "rev": "16c7794d0a28b5a37904d55bcca36003b9109aaa", "type": "github" }, "original": { @@ -99,11 +99,11 @@ "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1765766816, - "narHash": "sha256-m2au5a2x9L3ikyBi0g3/NRJSjmHVDvT42mn+O6FlyPs=", + "lastModified": 1767495280, + "narHash": "sha256-hEEgtE/RSRigw8xscchGymf/t1nluZwTfru4QF6O1CQ=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "4f53a635709d82652567f51ef7af4365fbc0c88b", + "rev": "cb24c5cc207ba8e9a4ce245eedd2d37c3a988bc1", "type": "github" }, "original": { diff --git a/nix/package.nix b/nix/package.nix index da00eaae..5e076f42 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -6,7 +6,8 @@ rustc, cargo, makeDesktopItem, -}: let +}: +let pname = "defguard-client"; version = "1.6.2"; # TODO: Get this from Cargo.toml or git @@ -16,7 +17,10 @@ icon = pname; desktopName = "Defguard"; genericName = "Defguard VPN Client"; - categories = ["Network" "Security"]; + categories = [ + "Network" + "Security" + ]; }; pnpm = pkgs.pnpm_10; @@ -29,7 +33,7 @@ gdk-pixbuf glib glib-networking - gtk4 + gtk3 harfbuzz librsvg libsoup_3 @@ -38,6 +42,7 @@ openssl libayatana-appindicator desktop-file-utils + iproute2 ]; nativeBuildInputs = [ @@ -55,63 +60,87 @@ rustPlatform.cargoSetupHook # helper to add dynamic library paths pkgs.makeWrapper + pkgs.wrapGAppsHook3 ]; in - stdenv.mkDerivation (finalAttrs: rec { - inherit pname version buildInputs nativeBuildInputs; - - src = ../.; - - # prefetch cargo dependencies - cargoRoot = "src-tauri"; - buildAndTestSubdir = "src-tauri"; - - cargoDeps = rustPlatform.importCargoLock { - lockFile = ../src-tauri/Cargo.lock; - }; - - # prefetch pnpm dependencies - pnpmDeps = pkgs.pnpm.fetchDeps { - inherit - (finalAttrs) - pname - version - src - ; - - fetcherVersion = 2; - hash = "sha256-v47yaNnt7vLDPR7WVLSonmZBBOkYWnmTUqMiPZ/WCGo="; - }; - - buildPhase = '' - pnpm tauri build - ''; - - postInstall = '' - mkdir -p $out/bin - - # copy client binary - cp src-tauri/target/release/${pname} $out/bin/ - - # copy background service binary - cp src-tauri/target/release/defguard-service $out/bin/ - - # copy CLI binary - cp src-tauri/target/release/dg $out/bin/ - - # add required library to client binary RPATH - wrapProgram $out/bin/${pname} \ - --prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [pkgs.libayatana-appindicator pkgs.desktop-file-utils]} - - mkdir -p $out/share/applications - cp ${desktopItem}/share/applications/* $out/share/applications/ - ''; - - meta = with lib; { - description = "Defguard VPN Client"; - homepage = "https://defguard.net"; - # license = licenses.gpl3Only; - maintainers = with maintainers; []; - platforms = platforms.linux; - }; - }) +stdenv.mkDerivation (finalAttrs: rec { + inherit + pname + version + buildInputs + nativeBuildInputs + ; + + src = ../.; + + # prefetch cargo dependencies + cargoRoot = "src-tauri"; + buildAndTestSubdir = "src-tauri"; + + cargoDeps = rustPlatform.importCargoLock { + lockFile = ../src-tauri/Cargo.lock; + }; + + # prefetch pnpm dependencies + pnpmDeps = pnpm.fetchDeps { + inherit (finalAttrs) + pname + version + src + ; + + fetcherVersion = 2; + hash = "sha256-Xtn0FIq097sLEl/iodLeVVOYxVLx1ePJ8UjJUmgB2f0="; + }; + + buildPhase = '' + pnpm tauri build + ''; + + installPhase = '' + mkdir -p $out/bin + + # copy client binary + cp src-tauri/target/release/${pname} $out/bin/ + + # copy background service binary + cp src-tauri/target/release/defguard-service $out/bin/ + + # copy CLI binary + cp src-tauri/target/release/dg $out/bin/ + + # copy Tauri resources (icons for system tray, etc.) + mkdir -p $out/lib/${pname} + cp -r src-tauri/resources/* $out/lib/${pname}/ + + mkdir -p $out/share/applications + cp ${desktopItem}/share/applications/* $out/share/applications/ + ''; + + # add extra args to wrapGAppsHook3 wrapper + preFixup = '' + gappsWrapperArgs+=( + --prefix PATH : ${ + lib.makeBinPath [ + # `defguard-service` needs `ip` to manage wireguard + pkgs.iproute2 + # `defguard-client` needs `update-desktop-database` + pkgs.desktop-file-utils + ] + } + --prefix LD_LIBRARY_PATH : ${ + lib.makeLibraryPath [ + pkgs.libayatana-appindicator + ] + } + ) + ''; + + meta = with lib; { + description = "Defguard VPN Client"; + homepage = "https://defguard.net"; + # license = licenses.gpl3Only; + maintainers = with maintainers; [ ]; + platforms = platforms.linux; + }; +})