From 562641408e819ee87d5faf6f2b403b274790595a Mon Sep 17 00:00:00 2001 From: blenderfreaky Date: Thu, 4 Dec 2025 23:26:11 +0100 Subject: [PATCH 1/4] ivpn{,-service}: 3.14.34 -> 3.15.0 --- pkgs/tools/networking/ivpn/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/networking/ivpn/default.nix b/pkgs/tools/networking/ivpn/default.nix index 39299da1a681..7062967d0ad0 100644 --- a/pkgs/tools/networking/ivpn/default.nix +++ b/pkgs/tools/networking/ivpn/default.nix @@ -22,7 +22,7 @@ builtins.mapAttrs attrs // rec { inherit pname; - version = "3.14.34"; + version = "3.15.0"; buildInputs = [ wirelesstools @@ -32,7 +32,7 @@ builtins.mapAttrs owner = "ivpn"; repo = "desktop-app"; tag = "v${version}"; - hash = "sha256-Q96G5mJahJnXxpqJ8IF0oFie7l0Nd1p8drHH9NSpwEw="; + hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; }; proxyVendor = true; # .c file From d49f0ca80aad475076a54a921767bebd95502f35 Mon Sep 17 00:00:00 2001 From: blenderfreaky Date: Fri, 5 Dec 2025 00:17:38 +0100 Subject: [PATCH 2/4] ivpn-ui: 3.14.34 -> 3.15.0 --- pkgs/by-name/iv/ivpn-ui/package.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkgs/by-name/iv/ivpn-ui/package.nix b/pkgs/by-name/iv/ivpn-ui/package.nix index f55e3b12d323..f7d6444e82a8 100644 --- a/pkgs/by-name/iv/ivpn-ui/package.nix +++ b/pkgs/by-name/iv/ivpn-ui/package.nix @@ -10,7 +10,7 @@ ivpn-service, }: let - version = "3.14.34"; + version = "3.15.0"; in buildNpmPackage { pname = "ivpn-ui"; @@ -20,12 +20,12 @@ buildNpmPackage { owner = "ivpn"; repo = "desktop-app"; tag = "v${version}"; - hash = "sha256-Q96G5mJahJnXxpqJ8IF0oFie7l0Nd1p8drHH9NSpwEw="; + hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; }; sourceRoot = "source/ui"; - npmDepsHash = "sha256-y/VxvSZUvcIuckJF87639i5pcVJLg8SDAbWmg5bO3/s="; + npmDepsHash = "sha256-OOBBUDJwTP2T/KqzJPRV+A9ncRmb14KBoAXqa0T6c58="; nativeBuildInputs = [ copyDesktopItems From 49a6f76ff4dc0a5fc230464fd3a67029f661c405 Mon Sep 17 00:00:00 2001 From: blenderfreaky Date: Thu, 4 Dec 2025 23:35:33 +0100 Subject: [PATCH 3/4] ivpn{,-service}: migrate to by-name --- pkgs/by-name/iv/ivpn-service/package.nix | 106 ++++++++++++++++ .../iv/ivpn-service}/permissions.patch | 0 pkgs/by-name/iv/ivpn/package.nix | 54 ++++++++ pkgs/tools/networking/ivpn/default.nix | 118 ------------------ pkgs/top-level/all-packages.nix | 5 - 5 files changed, 160 insertions(+), 123 deletions(-) create mode 100644 pkgs/by-name/iv/ivpn-service/package.nix rename pkgs/{tools/networking/ivpn => by-name/iv/ivpn-service}/permissions.patch (100%) create mode 100644 pkgs/by-name/iv/ivpn/package.nix delete mode 100644 pkgs/tools/networking/ivpn/default.nix diff --git a/pkgs/by-name/iv/ivpn-service/package.nix b/pkgs/by-name/iv/ivpn-service/package.nix new file mode 100644 index 000000000000..ef53b966ade9 --- /dev/null +++ b/pkgs/by-name/iv/ivpn-service/package.nix @@ -0,0 +1,106 @@ +{ + buildGoModule, + fetchFromGitHub, + lib, + wirelesstools, + makeWrapper, + wireguard-tools, + openvpn, + obfs4, + iproute2, + dnscrypt-proxy, + iptables, + gawk, + util-linux, + nix-update-script, +}: + +let + version = "3.15.0"; +in +buildGoModule rec { + pname = "ivpn-service"; + inherit version; + + buildInputs = [ wirelesstools ]; + nativeBuildInputs = [ makeWrapper ]; + + src = fetchFromGitHub { + owner = "ivpn"; + repo = "desktop-app"; + tag = "v${version}"; + hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; + }; + + modRoot = "daemon"; + vendorHash = "sha256-DVKSCcEeE7vI8aOYuEwk22n0wtF7MMDOyAgYoXYadwI="; + + proxyVendor = true; # .c file + + patches = [ ./permissions.patch ]; + + postPatch = '' + substituteInPlace daemon/service/platform/platform_linux.go \ + --replace 'openVpnBinaryPath = "/usr/sbin/openvpn"' \ + 'openVpnBinaryPath = "${openvpn}/bin/openvpn"' \ + --replace 'routeCommand = "/sbin/ip route"' \ + 'routeCommand = "${iproute2}/bin/ip route"' + + substituteInPlace daemon/netinfo/netinfo_linux.go \ + --replace 'retErr := shell.ExecAndProcessOutput(log, outParse, "", "/sbin/ip", "route")' \ + 'retErr := shell.ExecAndProcessOutput(log, outParse, "", "${iproute2}/bin/ip", "route")' + + substituteInPlace daemon/service/platform/platform_linux_release.go \ + --replace 'installDir := "/opt/ivpn"' "installDir := \"$out\"" \ + --replace 'obfsproxyStartScript = path.Join(installDir, "obfsproxy/obfs4proxy")' \ + 'obfsproxyStartScript = "${lib.getExe obfs4}"' \ + --replace 'wgBinaryPath = path.Join(installDir, "wireguard-tools/wg-quick")' \ + 'wgBinaryPath = "${wireguard-tools}/bin/wg-quick"' \ + --replace 'wgToolBinaryPath = path.Join(installDir, "wireguard-tools/wg")' \ + 'wgToolBinaryPath = "${wireguard-tools}/bin/wg"' \ + --replace 'dnscryptproxyBinPath = path.Join(installDir, "dnscrypt-proxy/dnscrypt-proxy")' \ + 'dnscryptproxyBinPath = "${dnscrypt-proxy}/bin/dnscrypt-proxy"' + ''; + + ldflags = [ + "-s" + "-w" + "-X github.com/ivpn/desktop-app/daemon/version._version=${version}" + "-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01" + ]; + + postInstall = '' + mv $out/bin/{daemon,ivpn-service} + ''; + + postFixup = '' + mkdir -p $out/etc + cp -r $src/daemon/References/Linux/etc/* $out/etc/ + cp -r $src/daemon/References/common/etc/* $out/etc/ + + patchShebangs --build $out/etc/firewall.sh $out/etc/splittun.sh $out/etc/client.down $out/etc/client.up + + wrapProgram "$out/bin/ivpn-service" \ + --suffix PATH : ${ + lib.makeBinPath [ + iptables + gawk + util-linux + ] + } + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Official IVPN Desktop app service daemon"; + homepage = "https://www.ivpn.net/apps"; + changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ + urandom + blenderfreaky + ]; + mainProgram = "ivpn-service"; + }; +} diff --git a/pkgs/tools/networking/ivpn/permissions.patch b/pkgs/by-name/iv/ivpn-service/permissions.patch similarity index 100% rename from pkgs/tools/networking/ivpn/permissions.patch rename to pkgs/by-name/iv/ivpn-service/permissions.patch diff --git a/pkgs/by-name/iv/ivpn/package.nix b/pkgs/by-name/iv/ivpn/package.nix new file mode 100644 index 000000000000..77588419d9be --- /dev/null +++ b/pkgs/by-name/iv/ivpn/package.nix @@ -0,0 +1,54 @@ +{ + buildGoModule, + fetchFromGitHub, + lib, + wirelesstools, + nix-update-script, +}: + +let + version = "3.15.0"; +in +buildGoModule rec { + pname = "ivpn"; + inherit version; + + buildInputs = [ wirelesstools ]; + + src = fetchFromGitHub { + owner = "ivpn"; + repo = "desktop-app"; + tag = "v${version}"; + hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; + }; + + modRoot = "cli"; + vendorHash = "sha256-xZ1tMiv06fE2wtpDagKjHiVTPYWpj32hM6n/v9ZcgrE="; + + proxyVendor = true; # .c file + + ldflags = [ + "-s" + "-w" + "-X github.com/ivpn/desktop-app/daemon/version._version=${version}" + "-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01" + ]; + + postInstall = '' + mv $out/bin/{cli,ivpn} + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Official IVPN Desktop app"; + homepage = "https://www.ivpn.net/apps"; + changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ + urandom + blenderfreaky + ]; + mainProgram = "ivpn"; + }; +} diff --git a/pkgs/tools/networking/ivpn/default.nix b/pkgs/tools/networking/ivpn/default.nix deleted file mode 100644 index 7062967d0ad0..000000000000 --- a/pkgs/tools/networking/ivpn/default.nix +++ /dev/null @@ -1,118 +0,0 @@ -{ - buildGoModule, - fetchFromGitHub, - lib, - wirelesstools, - makeWrapper, - wireguard-tools, - openvpn, - obfs4, - iproute2, - dnscrypt-proxy, - iptables, - gawk, - util-linux, - nix-update-script, -}: - -builtins.mapAttrs - ( - pname: attrs: - buildGoModule ( - attrs - // rec { - inherit pname; - version = "3.15.0"; - - buildInputs = [ - wirelesstools - ]; - - src = fetchFromGitHub { - owner = "ivpn"; - repo = "desktop-app"; - tag = "v${version}"; - hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; - }; - - proxyVendor = true; # .c file - - ldflags = [ - "-s" - "-w" - "-X github.com/ivpn/desktop-app/daemon/version._version=${version}" - "-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01" - ]; - - postInstall = '' - mv $out/bin/{${attrs.modRoot},${pname}} - ''; - - passthru.updateScript = nix-update-script { }; - - meta = { - description = "Official IVPN Desktop app"; - homepage = "https://www.ivpn.net/apps"; - changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}"; - license = lib.licenses.gpl3Only; - maintainers = with lib.maintainers; [ - urandom - blenderfreaky - ]; - mainProgram = "ivpn"; - }; - } - ) - ) - { - ivpn = { - modRoot = "cli"; - vendorHash = "sha256-xZ1tMiv06fE2wtpDagKjHiVTPYWpj32hM6n/v9ZcgrE="; - }; - ivpn-service = { - modRoot = "daemon"; - vendorHash = "sha256-DVKSCcEeE7vI8aOYuEwk22n0wtF7MMDOyAgYoXYadwI="; - nativeBuildInputs = [ makeWrapper ]; - - patches = [ ./permissions.patch ]; - postPatch = '' - substituteInPlace daemon/service/platform/platform_linux.go \ - --replace 'openVpnBinaryPath = "/usr/sbin/openvpn"' \ - 'openVpnBinaryPath = "${openvpn}/bin/openvpn"' \ - --replace 'routeCommand = "/sbin/ip route"' \ - 'routeCommand = "${iproute2}/bin/ip route"' - - substituteInPlace daemon/netinfo/netinfo_linux.go \ - --replace 'retErr := shell.ExecAndProcessOutput(log, outParse, "", "/sbin/ip", "route")' \ - 'retErr := shell.ExecAndProcessOutput(log, outParse, "", "${iproute2}/bin/ip", "route")' - - substituteInPlace daemon/service/platform/platform_linux_release.go \ - --replace 'installDir := "/opt/ivpn"' "installDir := \"$out\"" \ - --replace 'obfsproxyStartScript = path.Join(installDir, "obfsproxy/obfs4proxy")' \ - 'obfsproxyStartScript = "${lib.getExe obfs4}"' \ - --replace 'wgBinaryPath = path.Join(installDir, "wireguard-tools/wg-quick")' \ - 'wgBinaryPath = "${wireguard-tools}/bin/wg-quick"' \ - --replace 'wgToolBinaryPath = path.Join(installDir, "wireguard-tools/wg")' \ - 'wgToolBinaryPath = "${wireguard-tools}/bin/wg"' \ - --replace 'dnscryptproxyBinPath = path.Join(installDir, "dnscrypt-proxy/dnscrypt-proxy")' \ - 'dnscryptproxyBinPath = "${dnscrypt-proxy}/bin/dnscrypt-proxy"' - ''; - - postFixup = '' - mkdir -p $out/etc - cp -r $src/daemon/References/Linux/etc/* $out/etc/ - cp -r $src/daemon/References/common/etc/* $out/etc/ - - patchShebangs --build $out/etc/firewall.sh $out/etc/splittun.sh $out/etc/client.down $out/etc/client.up - - wrapProgram "$out/bin/ivpn-service" \ - --suffix PATH : ${ - lib.makeBinPath [ - iptables - gawk - util-linux - ] - } - ''; - }; - } diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index b44a41637980..9ad2eac151b3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -1066,11 +1066,6 @@ with pkgs; iroh-dns-server ; - inherit (callPackages ../tools/networking/ivpn/default.nix { }) - ivpn - ivpn-service - ; - kanata-with-cmd = kanata.override { withCmd = true; }; linux-router-without-wifi = linux-router.override { useWifiDependencies = false; }; From c958628e418f624c47257a3f1dbb4d85205dc206 Mon Sep 17 00:00:00 2001 From: blenderfreaky Date: Sun, 14 Dec 2025 22:54:15 +0100 Subject: [PATCH 4/4] ivpn{,-service,-ui}: apply suggestions --- pkgs/by-name/iv/ivpn-service/package.nix | 16 ++++++---------- pkgs/by-name/iv/ivpn-ui/package.nix | 13 +++++-------- pkgs/by-name/iv/ivpn/package.nix | 16 ++++++---------- 3 files changed, 17 insertions(+), 28 deletions(-) diff --git a/pkgs/by-name/iv/ivpn-service/package.nix b/pkgs/by-name/iv/ivpn-service/package.nix index ef53b966ade9..98db81a7c214 100644 --- a/pkgs/by-name/iv/ivpn-service/package.nix +++ b/pkgs/by-name/iv/ivpn-service/package.nix @@ -14,13 +14,9 @@ util-linux, nix-update-script, }: - -let - version = "3.15.0"; -in -buildGoModule rec { +buildGoModule (finalAttrs: { pname = "ivpn-service"; - inherit version; + version = "3.15.0"; buildInputs = [ wirelesstools ]; nativeBuildInputs = [ makeWrapper ]; @@ -28,7 +24,7 @@ buildGoModule rec { src = fetchFromGitHub { owner = "ivpn"; repo = "desktop-app"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; }; @@ -65,7 +61,7 @@ buildGoModule rec { ldflags = [ "-s" "-w" - "-X github.com/ivpn/desktop-app/daemon/version._version=${version}" + "-X github.com/ivpn/desktop-app/daemon/version._version=${finalAttrs.version}" "-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01" ]; @@ -95,7 +91,7 @@ buildGoModule rec { meta = { description = "Official IVPN Desktop app service daemon"; homepage = "https://www.ivpn.net/apps"; - changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}"; + changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${finalAttrs.version}"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ urandom @@ -103,4 +99,4 @@ buildGoModule rec { ]; mainProgram = "ivpn-service"; }; -} +}) diff --git a/pkgs/by-name/iv/ivpn-ui/package.nix b/pkgs/by-name/iv/ivpn-ui/package.nix index f7d6444e82a8..8c5a79d4b851 100644 --- a/pkgs/by-name/iv/ivpn-ui/package.nix +++ b/pkgs/by-name/iv/ivpn-ui/package.nix @@ -9,17 +9,14 @@ makeWrapper, ivpn-service, }: -let - version = "3.15.0"; -in -buildNpmPackage { +buildNpmPackage (finalAttrs: { pname = "ivpn-ui"; - inherit version; + version = "3.15.0"; src = fetchFromGitHub { owner = "ivpn"; repo = "desktop-app"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; }; @@ -85,9 +82,9 @@ buildNpmPackage { mainProgram = "ivpn-ui"; homepage = "https://www.ivpn.net"; downloadPage = "https://github.com/ivpn/desktop-app"; - changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}"; + changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${finalAttrs.version}"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ blenderfreaky ]; platforms = [ "x86_64-linux" ]; }; -} +}) diff --git a/pkgs/by-name/iv/ivpn/package.nix b/pkgs/by-name/iv/ivpn/package.nix index 77588419d9be..76c74c08932a 100644 --- a/pkgs/by-name/iv/ivpn/package.nix +++ b/pkgs/by-name/iv/ivpn/package.nix @@ -5,20 +5,16 @@ wirelesstools, nix-update-script, }: - -let - version = "3.15.0"; -in -buildGoModule rec { +buildGoModule (finalAttrs: { pname = "ivpn"; - inherit version; + version = "3.15.0"; buildInputs = [ wirelesstools ]; src = fetchFromGitHub { owner = "ivpn"; repo = "desktop-app"; - tag = "v${version}"; + tag = "v${finalAttrs.version}"; hash = "sha256-Y+oW/2WDkH/YydR+xSzEHPdCNKTmmsV4yEsju+OmDYE="; }; @@ -30,7 +26,7 @@ buildGoModule rec { ldflags = [ "-s" "-w" - "-X github.com/ivpn/desktop-app/daemon/version._version=${version}" + "-X github.com/ivpn/desktop-app/daemon/version._version=${finalAttrs.version}" "-X github.com/ivpn/desktop-app/daemon/version._time=1970-01-01" ]; @@ -43,7 +39,7 @@ buildGoModule rec { meta = { description = "Official IVPN Desktop app"; homepage = "https://www.ivpn.net/apps"; - changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${version}"; + changelog = "https://github.com/ivpn/desktop-app/releases/tag/v${finalAttrs.version}"; license = lib.licenses.gpl3Only; maintainers = with lib.maintainers; [ urandom @@ -51,4 +47,4 @@ buildGoModule rec { ]; mainProgram = "ivpn"; }; -} +})