diff --git a/pkgs/applications/networking/protonvpn-gui/default.nix b/pkgs/applications/networking/protonvpn-gui/default.nix index ee92f4727c70..1bbf3d6554fc 100644 --- a/pkgs/applications/networking/protonvpn-gui/default.nix +++ b/pkgs/applications/networking/protonvpn-gui/default.nix @@ -1,90 +1,54 @@ -{ lib, fetchFromGitHub, makeDesktopItem, makeWrapper, imagemagick -, python3Packages, wrapGAppsHook, protonvpn-cli, gtk3, pango -, gobject-introspection, libnotify, libappindicator-gtk3 -, procps, openvpn }: +{ lib, fetchFromGitHub, gobject-introspection, imagemagick, +wrapGAppsHook, python3Packages, gtk3, networkmanager, webkitgtk }: -let - extraPath = lib.makeBinPath [ procps openvpn ]; - -in python3Packages.buildPythonApplication rec { +python3Packages.buildPythonApplication rec { pname = "protonvpn-linux-gui"; - version = "2.1.1"; + version = "1.4.1"; src = fetchFromGitHub { - owner = "protonvpn"; - repo = "linux-gui"; - rev = "v${version}"; - sha256 = "avo5/2eq53HSHCnnjtxrsmpURtHvxmLZn2BxActImGY="; + owner = "ProtonVPN"; + repo = "linux-app"; + rev = version; + sha256 = "sha256-08gXEKm8udgNltRdqvAMFL0pDCWZu/kfl1xGQtZPBCc="; }; - desktopItem = makeDesktopItem { - name = "ProtonVPN"; - desktopName = "ProtonVPN GUI"; - type = "Application"; - exec = "protonvpn-gui"; - icon = "protonvpn"; - categories = "Network;"; - terminal = "false"; - }; + strictDeps = false; - trayDesktopItem = makeDesktopItem { - name = "ProtonVPN Tray"; - desktopName = "ProtonVPN Tray"; - type = "Application"; - exec = "protonvpn-tray"; - icon = "protonvpn"; - categories = "Network;"; - terminal = "false"; - }; + nativeBuildInputs = [ + gobject-introspection imagemagick wrapGAppsHook + ]; - nativeBuildInputs = [ wrapGAppsHook makeWrapper imagemagick ]; + propagatedBuildInputs = with python3Packages; [ + protonvpn-nm-lib + psutil + ]; - propagatedBuildInputs = (with python3Packages; [ - pygobject3 - pycairo - requests - configparser - ]) ++ [ - protonvpn-cli - gtk3 - gobject-introspection - libnotify - libappindicator-gtk3 - ]; + buildInputs = [ + gtk3 networkmanager webkitgtk + ]; - prePatch = '' - # if pkexec is used, we want to have more time to enter password - substituteInPlace linux_gui/services/login_service.py --replace 'timeout=8' 'timeout=30' - ''; - - postInstall = '' - # wrap binaries with extra required path - wrapProgram "$out/bin/protonvpn-tray" --prefix PATH ":" ${extraPath} - wrapProgram "$out/bin/protonvpn-gui" --prefix PATH ":" ${extraPath} - - # install desktop files - mkdir -p $out/share/applications - cp "$desktopItem/share/applications/ProtonVPN.desktop" $out/share/applications/protonvpn-gui.desktop - cp "$trayDesktopItem/share/applications/ProtonVPN Tray.desktop" $out/share/applications/protonvpn-tray.desktop - - # create icons + postFixup = '' + # Setting icons for size in 16 32 48 64 72 96 128 192 512 1024; do mkdir -p $out/share/icons/hicolor/"$size"x"$size"/apps - convert -resize "$size"x"$size" \ - linux_gui/resources/img/logo/protonvpn_logo.png \ - $out/share/icons/hicolor/"$size"x"$size"/apps/protonvpn.png + convert -resize $size'x'$size \ + protonvpn_gui/assets/icons/protonvpn-logo.png \ + $out/share/icons/hicolor/$size'x'$size/apps/protonvpn.png done + + install -Dm644 protonvpn.desktop -t $out/share/applications/ + substituteInPlace $out/share/applications/protonvpn.desktop \ + --replace 'protonvpn-logo' protonvpn ''; - # no tests + # Project has a dummy test doCheck = false; meta = with lib; { description = "Linux GUI for ProtonVPN, written in Python"; - homepage = "https://github.com/ProtonVPN/linux-gui"; - maintainers = with maintainers; [ offline ]; + homepage = "https://github.com/ProtonVPN/linux-app"; + maintainers = with maintainers; [ offline wolfangaukang ]; license = licenses.gpl3Plus; platforms = platforms.linux; - mainProgram = "protonvpn-gui"; }; } diff --git a/pkgs/development/python-modules/proton-client/default.nix b/pkgs/development/python-modules/proton-client/default.nix new file mode 100644 index 000000000000..c5560b3ef97c --- /dev/null +++ b/pkgs/development/python-modules/proton-client/default.nix @@ -0,0 +1,50 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +, pythonOlder +, bcrypt +, pyopenssl +, python-gnupg +, requests +, openssl +}: + +buildPythonPackage rec { + pname = "proton-client"; + version = "0.7.0"; + disabled = pythonOlder "3.7"; + + src = fetchFromGitHub { + owner = "ProtonMail"; + repo = "proton-python-client"; + rev = version; + sha256 = "sha256-98tEL3DUYtx27JcI6pPFS2iDJXS8K3yyvCU9UVrg1EM="; + }; + + propagatedBuildInputs = [ + bcrypt + pyopenssl + python-gnupg + requests + ]; + + buildInputs = [ openssl ]; + + # This patch is supposed to indicate where to load OpenSSL library, + # but it is not working as intended. + #patchPhase = '' + # substituteInPlace proton/srp/_ctsrp.py --replace \ + # "ctypes.cdll.LoadLibrary('libssl.so.10')" "'${openssl.out}/lib/libssl.so'" + #''; + # Regarding the issue above, I'm disabling tests for now + doCheck = false; + + pythonImportsCheck = [ "proton" ]; + + meta = with lib; { + description = "Python Proton client module"; + homepage = "https://github.com/ProtonMail/proton-python-client"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ wolfangaukang ]; + }; +} diff --git a/pkgs/development/python-modules/protonvpn-nm-lib/default.nix b/pkgs/development/python-modules/protonvpn-nm-lib/default.nix new file mode 100644 index 000000000000..3a5a7695c8e6 --- /dev/null +++ b/pkgs/development/python-modules/protonvpn-nm-lib/default.nix @@ -0,0 +1,47 @@ +{ lib +, buildPythonPackage +, fetchFromGitHub +, pythonOlder +, distro +, jinja2 +, keyring +, proton-client +, pygobject3 +, pyxdg +, systemd +}: + +buildPythonPackage rec { + pname = "protonvpn-nm-lib"; + version = "3.5.0"; + disabled = pythonOlder "3.7"; + + src = fetchFromGitHub { + owner = "ProtonVPN"; + repo = pname; + rev = version; + sha256 = "sha256-E75toza++l5UFdOLGgolH8pL5xvoUkLE7u+8L5RDFbI="; + }; + + propagatedBuildInputs = [ + distro + jinja2 + keyring + proton-client + pygobject3 + pyxdg + systemd + ]; + + # Project has a dummy test. + doCheck = false; + + pythonImportsCheck = [ "protonvpn_nm_lib" ]; + + meta = with lib; { + description = "ProtonVPN NetworkManager Library intended for every ProtonVPN service user"; + homepage = "https://github.com/ProtonVPN/protonvpn-nm-lib"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ wolfangaukang ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 22ad1d220a72..8ca34ed5d976 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -5948,8 +5948,12 @@ in { protobuf3-to-dict = callPackage ../development/python-modules/protobuf3-to-dict { }; + proton-client = callPackage ../development/python-modules/proton-client { }; + protonup = callPackage ../development/python-modules/protonup { }; + protonvpn-nm-lib = callPackage ../development/python-modules/protonvpn-nm-lib { }; + prov = callPackage ../development/python-modules/prov { }; prox-tv = callPackage ../development/python-modules/prox-tv { };