From a600641cdc6e0eeb853185e38b8fff5b8f18049b Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 19:40:50 +0100 Subject: [PATCH 1/9] python3Packages.proton-vpn-daemon: init at 0.13.4 https://github.com/ProtonVPN/proton-vpn-daemon --- .../proton-vpn-daemon/default.nix | 69 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 71 insertions(+) create mode 100644 pkgs/development/python-modules/proton-vpn-daemon/default.nix diff --git a/pkgs/development/python-modules/proton-vpn-daemon/default.nix b/pkgs/development/python-modules/proton-vpn-daemon/default.nix new file mode 100644 index 000000000000..cf33b61f2bcc --- /dev/null +++ b/pkgs/development/python-modules/proton-vpn-daemon/default.nix @@ -0,0 +1,69 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + bcc, + dbus-fast, + packaging, + proton-core, + proton-vpn-api-core, + psutil, + pytest-asyncio, + pytest-cov-stub, + pytestCheckHook, + setuptools, + systemd-python, +}: + +buildPythonPackage rec { + pname = "proton-vpn-daemon"; + version = "0.13.4"; + pyproject = true; + + src = fetchFromGitHub { + owner = "ProtonVPN"; + repo = "proton-vpn-daemon"; + tag = "v${version}"; + hash = "sha256-0CqMGyaHjMktM3N1MfrELprZQZqJD1w/mFaOJvJApZQ="; + }; + + build-system = [ + setuptools + ]; + + dependencies = [ + bcc + dbus-fast + packaging + proton-core + proton-vpn-api-core + psutil + systemd-python + ]; + + # Needed for `pythonImportsCheck`, `postBuild` happens between `pythonImportsCheckPhase` and `pytestCheckPhase`. + postBuild = '' + # Needed for Permission denied: '/homeless-shelter' + export HOME=$(mktemp -d) + export XDG_RUNTIME_DIR=$(mktemp -d) + ''; + + nativeCheckInputs = [ + pytestCheckHook + pytest-asyncio + pytest-cov-stub + ]; + + pythonImportsCheck = [ + "proton.vpn.daemon" + "proton.vpn.daemon.split_tunneling" + ]; + + meta = { + description = "Daemons for Proton VPN Linux client"; + homepage = "https://github.com/ProtonVPN/proton-vpn-daemon"; + license = lib.licenses.gpl3Only; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ anthonyroussel ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 34075115837f..e3ce72065c29 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -12589,6 +12589,8 @@ self: super: with self; { proton-vpn-api-core = callPackage ../development/python-modules/proton-vpn-api-core { }; + proton-vpn-daemon = callPackage ../development/python-modules/proton-vpn-daemon { }; + proton-vpn-local-agent = callPackage ../development/python-modules/proton-vpn-local-agent { }; proton-vpn-network-manager = From 6723ba23b1cd217c492e5ec0acecb8d9fe9b9575 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 19:34:05 +0100 Subject: [PATCH 2/9] protonvpn-gui: 4.13.0 -> 4.13.1 Diff: https://github.com/ProtonVPN/proton-vpn-gtk-app/compare/v4.13.0...v4.13.1 --- pkgs/by-name/pr/protonvpn-gui/package.nix | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/pkgs/by-name/pr/protonvpn-gui/package.nix b/pkgs/by-name/pr/protonvpn-gui/package.nix index fc4b54a9cf62..961ae4f48c3d 100644 --- a/pkgs/by-name/pr/protonvpn-gui/package.nix +++ b/pkgs/by-name/pr/protonvpn-gui/package.nix @@ -3,23 +3,23 @@ python3Packages, fetchFromGitHub, gobject-introspection, - wrapGAppsHook3, - libnotify, - withIndicator ? true, libappindicator-gtk3, libayatana-appindicator, + libnotify, + wrapGAppsHook3, + withIndicator ? true, }: python3Packages.buildPythonApplication rec { pname = "protonvpn-gui"; - version = "4.13.0"; + version = "4.13.1"; pyproject = true; src = fetchFromGitHub { owner = "ProtonVPN"; repo = "proton-vpn-gtk-app"; tag = "v${version}"; - hash = "sha256-1T8gh0aKYiVnkr4SLg2a5Hcc8FQn8llofCXxeZGwd8I="; + hash = "sha256-pfk7ttQp7nWpGWqBWny9VdSktpB7RoBJIcF/pF6gAfA="; }; nativeBuildInputs = [ @@ -72,10 +72,18 @@ python3Packages.buildPythonApplication rec { preCheck = '' # Needed for Permission denied: '/homeless-shelter' export HOME=$(mktemp -d) + export XDG_RUNTIME_DIR=$(mktemp -d) ''; - # Gets a segmentation fault after the widgets test - doCheck = false; + nativeCheckInputs = with python3Packages; [ + pytestCheckHook + pytest-cov-stub + ]; + + disabledTestPaths = [ + # Segmentation fault during widgets tests + "tests/unit/widgets" + ]; meta = { description = "Proton VPN GTK app for Linux"; From 5e49b1f7d039bab0c568e45fcde1d3c20950739f Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 20:25:38 +0100 Subject: [PATCH 3/9] protonvpn-gui: add anthonyroussel to maintainers --- pkgs/by-name/pr/protonvpn-gui/package.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/by-name/pr/protonvpn-gui/package.nix b/pkgs/by-name/pr/protonvpn-gui/package.nix index 961ae4f48c3d..f3133188f256 100644 --- a/pkgs/by-name/pr/protonvpn-gui/package.nix +++ b/pkgs/by-name/pr/protonvpn-gui/package.nix @@ -92,6 +92,7 @@ python3Packages.buildPythonApplication rec { platforms = lib.platforms.linux; mainProgram = "protonvpn-app"; maintainers = with lib.maintainers; [ + anthonyroussel sebtm rapiteanu ]; From b1fd3a6c512f6d687f113f6d0cbbda0658d072c7 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 19:35:05 +0100 Subject: [PATCH 4/9] python3Packages.proton-vpn-network-manager: remove Code was moved to `proton-vpn-api-core` Python package upstream. --- pkgs/by-name/pr/protonvpn-gui/package.nix | 1 - .../proton-vpn-network-manager/default.nix | 89 ------------------- pkgs/top-level/python-packages.nix | 4 - 3 files changed, 94 deletions(-) delete mode 100644 pkgs/development/python-modules/proton-vpn-network-manager/default.nix diff --git a/pkgs/by-name/pr/protonvpn-gui/package.nix b/pkgs/by-name/pr/protonvpn-gui/package.nix index f3133188f256..bc28c29302b9 100644 --- a/pkgs/by-name/pr/protonvpn-gui/package.nix +++ b/pkgs/by-name/pr/protonvpn-gui/package.nix @@ -49,7 +49,6 @@ python3Packages.buildPythonApplication rec { proton-keyring-linux proton-vpn-api-core proton-vpn-local-agent - proton-vpn-network-manager pycairo pygobject3 ]; diff --git a/pkgs/development/python-modules/proton-vpn-network-manager/default.nix b/pkgs/development/python-modules/proton-vpn-network-manager/default.nix deleted file mode 100644 index 1a87e16f3265..000000000000 --- a/pkgs/development/python-modules/proton-vpn-network-manager/default.nix +++ /dev/null @@ -1,89 +0,0 @@ -{ - lib, - buildPythonPackage, - fetchFromGitHub, - gobject-introspection, - apt, - iproute2, - setuptools, - networkmanager, - proton-core, - proton-vpn-api-core, - proton-vpn-local-agent, - pycairo, - pygobject3, - pyxdg, - pytest-asyncio, - pytestCheckHook, - pytest-cov-stub, -}: - -buildPythonPackage rec { - pname = "proton-vpn-network-manager"; - version = "0.13.4"; - pyproject = true; - - src = fetchFromGitHub { - owner = "ProtonVPN"; - repo = "python-proton-vpn-network-manager"; - tag = "v${version}"; - hash = "sha256-VMaj85oFxLkloR6hdeRHwVTBl44Mx5WEjOl9FnLf8+w="; - }; - - nativeBuildInputs = [ - # Needed to recognize the NM namespace - gobject-introspection - ]; - - build-system = [ - setuptools - ]; - - dependencies = [ - # Needed here for the NM namespace - networkmanager - proton-core - proton-vpn-api-core - proton-vpn-local-agent - pycairo - pygobject3 - pyxdg - ]; - - postPatch = '' - substituteInPlace proton/vpn/backend/linux/networkmanager/killswitch/wireguard/killswitch_connection_handler.py \ - --replace '/usr/sbin/ip' '${iproute2}/bin/ip' - substituteInPlace proton/vpn/backend/linux/networkmanager/killswitch/wireguard/wgkillswitch.py \ - --replace '/usr/bin/apt' '${apt}/bin/apt' - ''; - - pythonImportsCheck = [ - "proton.vpn.backend.linux.networkmanager" - "proton.vpn.backend.linux.networkmanager.killswitch.default" - "proton.vpn.backend.linux.networkmanager.killswitch.wireguard" - ]; - - nativeCheckInputs = [ - pytestCheckHook - pytest-cov-stub - pytest-asyncio - ]; - - # Needed for `pythonImportsCheck`, `preCheck` happens between `pythonImportsCheckPhase` and `pytestCheckPhase`. - preCheck = '' - # Needed for Permission denied: '/homeless-shelter' - export HOME=$(mktemp -d) - export XDG_RUNTIME_DIR=$(mktemp -d) - ''; - - meta = { - description = "Provides the necessary functionality for other ProtonVPN components to interact with NetworkManager"; - homepage = "https://github.com/ProtonVPN/python-proton-vpn-network-manager"; - license = lib.licenses.gpl3Only; - platforms = lib.platforms.linux; - maintainers = with lib.maintainers; [ - sebtm - rapiteanu - ]; - }; -} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e3ce72065c29..9f073bd4d8cf 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -12593,10 +12593,6 @@ self: super: with self; { proton-vpn-local-agent = callPackage ../development/python-modules/proton-vpn-local-agent { }; - proton-vpn-network-manager = - callPackage ../development/python-modules/proton-vpn-network-manager - { }; - protonup-ng = callPackage ../development/python-modules/protonup-ng { }; prov = callPackage ../development/python-modules/prov { }; From c0bede6ca6ad54b54925a18082b6d808a76cab37 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 19:41:12 +0100 Subject: [PATCH 5/9] python3Packages.proton-vpn-api-core: 0.13.2 -> 0.14.1 Diff: https://github.com/ProtonVPN/python-proton-vpn-api-core/compare/v4.13.2...v4.14.1 --- .../proton-vpn-api-core/default.nix | 62 ++++++++++++++----- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/pkgs/development/python-modules/proton-vpn-api-core/default.nix b/pkgs/development/python-modules/proton-vpn-api-core/default.nix index d0581567acf0..0f2ad12ae28b 100644 --- a/pkgs/development/python-modules/proton-vpn-api-core/default.nix +++ b/pkgs/development/python-modules/proton-vpn-api-core/default.nix @@ -2,35 +2,56 @@ lib, buildPythonPackage, fetchFromGitHub, - cryptography, - fido2, - setuptools, - jinja2, - proton-core, - pynacl, aiohttp, + cryptography, + distro, + fido2, + gobject-introspection, + iproute2, + jinja2, + networkmanager, + proton-core, + proton-vpn-local-agent, + pycairo, + pygobject3, + pynacl, pyopenssl, pytest-asyncio, + pytest-cov-stub, + pytestCheckHook, + pyxdg, requests, sentry-sdk, - pyxdg, - distro, - pytestCheckHook, - pytest-cov-stub, + setuptools, }: buildPythonPackage rec { pname = "proton-vpn-api-core"; - version = "4.13.2"; + version = "4.14.1"; pyproject = true; src = fetchFromGitHub { owner = "ProtonVPN"; repo = "python-proton-vpn-api-core"; rev = "v${version}"; - hash = "sha256-oFTlN/mi4TACmqbebKirYdqDEYzUejK4SKbKgFWONDo="; + hash = "sha256-xyCjzcSasLGm2DMMViI1wpzcLd0mmaBvIyI1HrtW+Gg="; }; + postPatch = '' + substituteInPlace proton/vpn/backend/networkmanager/killswitch/wireguard/killswitch_connection_handler.py \ + --replace-fail '["/usr/sbin/ip", "route"]' '["${iproute2}/bin/ip", "route"]' + ''; + + nativeBuildInputs = [ + # Needed to recognize the NM namespace + gobject-introspection + ]; + + propagatedBuildInputs = [ + # Needed here for the NM namespace + networkmanager + ]; + build-system = [ setuptools ]; @@ -40,18 +61,27 @@ buildPythonPackage rec { distro fido2 jinja2 - pynacl proton-core - sentry-sdk + proton-vpn-local-agent + pycairo + pygobject3 + pynacl pyxdg + sentry-sdk ]; pythonImportsCheck = [ - "proton.vpn.core" + "proton.vpn.backend.networkmanager.core" + "proton.vpn.backend.networkmanager.killswitch.default" + "proton.vpn.backend.networkmanager.killswitch.wireguard" + "proton.vpn.backend.networkmanager.protocol.openvpn" + "proton.vpn.backend.networkmanager.protocol.wireguard" "proton.vpn.connection" + "proton.vpn.core" "proton.vpn.killswitch.interface" "proton.vpn.logging" "proton.vpn.session" + "proton.vpn.split_tunneling" ]; nativeCheckInputs = [ @@ -63,7 +93,7 @@ buildPythonPackage rec { pytest-cov-stub ]; - # Needed for `pythonImportsCheck`, `preCheck` happens between `pythonImportsCheckPhase` and `pytestCheckPhase`. + # Needed for `pythonImportsCheck`, `postInstall` happens between `pythonImportsCheckPhase` and `pytestCheckPhase`. postInstall = '' # Needed for Permission denied: '/homeless-shelter' export HOME=$(mktemp -d) From ba25661abdfac56bb0d9a6190f72907c745f0353 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 20:26:08 +0100 Subject: [PATCH 6/9] python3Packages.proton-vpn-api-core: add anthonyroussel to maintainers --- pkgs/development/python-modules/proton-vpn-api-core/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/python-modules/proton-vpn-api-core/default.nix b/pkgs/development/python-modules/proton-vpn-api-core/default.nix index 0f2ad12ae28b..43584ef7e16f 100644 --- a/pkgs/development/python-modules/proton-vpn-api-core/default.nix +++ b/pkgs/development/python-modules/proton-vpn-api-core/default.nix @@ -118,6 +118,7 @@ buildPythonPackage rec { license = lib.licenses.gpl3Only; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ + anthonyroussel sebtm rapiteanu ]; From 60f25b3c1b5b2e5d402d0de1c047108be1e1bee9 Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 19:38:39 +0100 Subject: [PATCH 7/9] python3Packages.python-vpn-local-agent: update src.repo, meta.homepage --- .../python-modules/proton-vpn-local-agent/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/proton-vpn-local-agent/default.nix b/pkgs/development/python-modules/proton-vpn-local-agent/default.nix index 8fcc2f597627..c18d54b155d2 100644 --- a/pkgs/development/python-modules/proton-vpn-local-agent/default.nix +++ b/pkgs/development/python-modules/proton-vpn-local-agent/default.nix @@ -17,7 +17,7 @@ buildPythonPackage rec { src = fetchFromGitHub { owner = "ProtonVPN"; - repo = "python-proton-vpn-local-agent"; + repo = "local-agent-rs"; rev = version; hash = "sha256-rk3wi6q0UDuwh5yhLBqdLYsJxVqhlI+Yc7HZsiAU1Y8="; }; @@ -65,7 +65,7 @@ buildPythonPackage rec { meta = { description = "Proton VPN local agent written in Rust with Python bindings"; - homepage = "https://github.com/ProtonVPN/python-proton-vpn-local-agent"; + homepage = "https://github.com/ProtonVPN/local-agent-rs"; license = lib.licenses.gpl3Only; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ From 6634627558a4b65e184f01e8e59b13f83e9d619b Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 20:26:35 +0100 Subject: [PATCH 8/9] python3Packages.proton-vpn-local-agent: add anthonyroussel to maintainers --- .../python-modules/proton-vpn-local-agent/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/development/python-modules/proton-vpn-local-agent/default.nix b/pkgs/development/python-modules/proton-vpn-local-agent/default.nix index c18d54b155d2..37d9fa67959f 100644 --- a/pkgs/development/python-modules/proton-vpn-local-agent/default.nix +++ b/pkgs/development/python-modules/proton-vpn-local-agent/default.nix @@ -69,6 +69,7 @@ buildPythonPackage rec { license = lib.licenses.gpl3Only; platforms = lib.platforms.linux; maintainers = with lib.maintainers; [ + anthonyroussel sebtm rapiteanu ]; From 32433fc6c958de688770092a5adada94898876ca Mon Sep 17 00:00:00 2001 From: Anthony Roussel Date: Mon, 22 Dec 2025 19:40:35 +0100 Subject: [PATCH 9/9] proton-vpn-cli: init at 0.1.2 https://github.com/ProtonVPN/proton-vpn-cli --- pkgs/by-name/pr/proton-vpn-cli/package.nix | 71 ++++++++++++++++++++++ pkgs/top-level/aliases.nix | 4 +- 2 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 pkgs/by-name/pr/proton-vpn-cli/package.nix diff --git a/pkgs/by-name/pr/proton-vpn-cli/package.nix b/pkgs/by-name/pr/proton-vpn-cli/package.nix new file mode 100644 index 000000000000..8d8e5cf7ac73 --- /dev/null +++ b/pkgs/by-name/pr/proton-vpn-cli/package.nix @@ -0,0 +1,71 @@ +{ + lib, + fetchFromGitHub, + python3Packages, + gobject-introspection, + libnotify, + wrapGAppsNoGuiHook, +}: + +python3Packages.buildPythonApplication rec { + pname = "proton-vpn-cli"; + version = "0.1.3"; + pyproject = true; + + src = fetchFromGitHub { + owner = "ProtonVPN"; + repo = "proton-vpn-cli"; + tag = "v${version}"; + hash = "sha256-Hn7xLb7VWa2dlsrQnjnRgv+8UntOwDak9+rV1HF7k80="; + }; + + nativeBuildInputs = [ + # Needed for the NM namespace + gobject-introspection + wrapGAppsNoGuiHook + ]; + + buildInputs = [ + libnotify # gir typelib is used + ]; + + build-system = with python3Packages; [ + setuptools + ]; + + dependencies = with python3Packages; [ + click + dbus-fast + packaging + proton-core + proton-keyring-linux + proton-vpn-api-core + proton-vpn-local-agent + ]; + + dontWrapGApps = true; + + preFixup = '' + makeWrapperArgs+=("''${gappsWrapperArgs[@]}") + ''; + + preCheck = '' + # Needed for Permission denied: '/homeless-shelter' + export HOME=$(mktemp -d) + export XDG_RUNTIME_DIR=$(mktemp -d) + ''; + + nativeCheckInputs = with python3Packages; [ + pytestCheckHook + pytest-asyncio + pytest-cov-stub + ]; + + meta = { + description = "Official ProtonVPN CLI Linux app"; + homepage = "https://github.com/ProtonVPN/proton-vpn-cli"; + license = lib.licenses.gpl3Plus; + mainProgram = "protonvpn"; + maintainers = with lib.maintainers; [ anthonyroussel ]; + }; +} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index 6523629fb850..31cae32935a5 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -1350,8 +1350,8 @@ mapAliases { proton-caller = throw "'proton-caller' has been removed from nixpkgs due to being unmaintained and lack of upstream maintenance."; # Added 2025-09-25 proton-vpn-local-agent = throw "'proton-vpn-local-agent' has been renamed to 'python3Packages.proton-vpn-local-agent'"; # Converted to throw 2025-10-26 protonup = throw "'protonup' has been renamed to/replaced by 'protonup-ng'"; # Converted to throw 2025-10-27 - protonvpn-cli = throw "protonvpn-cli source code was removed from upstream. Use protonvpn-gui instead."; # Added 2025-10-16 - protonvpn-cli_2 = throw "protonvpn-cli_2 has been removed due to being deprecated. Use protonvpn-gui instead."; # Added 2025-10-16 + protonvpn-cli = throw "protonvpn-cli source code was removed from upstream. Use proton-vpn-cli instead."; # Added 2025-10-16 + protonvpn-cli_2 = throw "protonvpn-cli_2 has been removed due to being deprecated. Use proton-vpn-cli instead."; # Added 2025-10-16 proxmark3-rrg = throw "'proxmark3-rrg' has been renamed to/replaced by 'proxmark3'"; # Converted to throw 2025-10-27 pscid = throw "'pscid' has been removed because it was unmaintained upstream"; # Added 2025-12-12 pulp = throw "'pulp' has been removed because it was unmaintained upstream"; # Added 2025-12-12