Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions flake.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

151 changes: 90 additions & 61 deletions nix/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@
rustc,
cargo,
makeDesktopItem,
}: let
}:
let
pname = "defguard-client";
version = "1.6.2"; # TODO: Get this from Cargo.toml or git

Expand All @@ -16,7 +17,10 @@
icon = pname;
desktopName = "Defguard";
genericName = "Defguard VPN Client";
categories = ["Network" "Security"];
categories = [
"Network"
"Security"
];
};

pnpm = pkgs.pnpm_10;
Expand All @@ -29,7 +33,7 @@
gdk-pixbuf
glib
glib-networking
gtk4
gtk3
harfbuzz
librsvg
libsoup_3
Expand All @@ -38,6 +42,7 @@
openssl
libayatana-appindicator
desktop-file-utils
iproute2
];

nativeBuildInputs = [
Expand All @@ -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;
};
})