From db036a80d7db679b220ef445a40f227d45117304 Mon Sep 17 00:00:00 2001 From: sund3RRR Date: Tue, 24 Dec 2024 20:18:32 +0300 Subject: [PATCH] amneziaVPN: init at 4.8.2.3; nixos/programs/amneziaVPN: init --- nixos/modules/module-list.nix | 1 + nixos/modules/programs/amnezia-vpn.nix | 37 +++++++++ pkgs/by-name/am/amnezia-vpn/package.nix | 104 ++++++++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100644 nixos/modules/programs/amnezia-vpn.nix create mode 100644 pkgs/by-name/am/amnezia-vpn/package.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 9fe8e3be6477d3..467a25decb72df 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -149,6 +149,7 @@ ./programs/_1password.nix ./programs/adb.nix ./programs/alvr.nix + ./programs/amnezia-vpn.nix ./programs/appgate-sdp.nix ./programs/appimage.nix ./programs/arp-scan.nix diff --git a/nixos/modules/programs/amnezia-vpn.nix b/nixos/modules/programs/amnezia-vpn.nix new file mode 100644 index 00000000000000..a3da8c624d1e60 --- /dev/null +++ b/nixos/modules/programs/amnezia-vpn.nix @@ -0,0 +1,37 @@ +{ + config, + lib, + pkgs, + ... +}: +let + cfg = config.programs.amnezia-vpn; +in +{ + options.programs.amnezia-vpn = { + enable = lib.mkEnableOption "The AmneziaVPN client"; + }; + + config = lib.mkIf cfg.enable { + environment.systemPackages = [ pkgs.amnezia-vpn ]; + + services.dbus.packages = [ pkgs.amnezia-vpn ]; + + systemd = { + services.amnezia-vpn = { + description = "AmneziaVPN Service"; + after = [ "network.target" ]; + startLimitIntervalSec = 0; + serviceConfig = { + Type = "simple"; + Restart = "always"; + RestartSec = 1; + ExecStart = "${pkgs.amnezia-vpn}/bin/AmneziaVPN-service"; + }; + wantedBy = [ "multi-user.target" ]; + }; + }; + }; + + meta.maintainers = with lib.maintainers; [ sund3RRR ]; +} diff --git a/pkgs/by-name/am/amnezia-vpn/package.nix b/pkgs/by-name/am/amnezia-vpn/package.nix new file mode 100644 index 00000000000000..c568bad2e2e4aa --- /dev/null +++ b/pkgs/by-name/am/amnezia-vpn/package.nix @@ -0,0 +1,104 @@ +{ + lib, + stdenv, + fetchFromGitHub, + cmake, + pkg-config, + kdePackages, + qt6, + libsecret, + xdg-utils, + amneziawg-go, + tun2socks, + xray, + openvpn, + shadowsocks-rust, + cloak-pt, + wireguard-tools, +}: +let + amneziaEnv = [ + amneziawg-go + tun2socks + xray + shadowsocks-rust + openvpn + cloak-pt + wireguard-tools + ]; +in +stdenv.mkDerivation (finalAttrs: { + pname = "amnezia-vpn"; + version = "4.8.2.3"; + + src = fetchFromGitHub { + owner = "amnezia-vpn"; + repo = "amnezia-client"; + rev = "refs/tags/${finalAttrs.version}"; + hash = "sha256-bCWPyRW2xnnopcwfPHgQrdP85Ct0CDufJRQ1PvCAiDE="; + fetchSubmodules = true; + }; + + postPatch = '' + substituteInPlace client/platforms/linux/daemon/wireguardutilslinux.cpp \ + --replace-fail 'm_tunnel.start(appPath.filePath("../../client/bin/wireguard-go"), wgArgs);' 'm_tunnel.start("${amneziawg-go}/bin/amneziawg-go", wgArgs);' + + substituteInPlace service/server/router_linux.cpp \ + --replace-fail '|| QFileInfo::exists("/usr/lib/systemd/system/nscd.service"))' '|| QFileInfo::exists("/run/systemd/propagate/nscd.service"))' + + substituteInPlace client/utilities.cpp \ + --replace-fail 'return Utils::executable("../../client/bin/openvpn", true);' 'return Utils::executable("${openvpn}/bin/openvpn", false);' \ + --replace-fail 'return Utils::executable("../../client/bin/tun2socks", true);' 'return Utils::executable("${tun2socks}/bin/tun2socks", false);' + + substituteInPlace client/ui/qautostart.cpp \ + --replace-fail "/usr/share/pixmaps/AmneziaVPN.png" "$out/share/pixmaps/AmneziaVPN.png" + + substituteInPlace deploy/installer/config/AmneziaVPN.desktop.in \ + --replace-fail "#!/usr/bin/env xdg-open" "#!${xdg-utils}/bin/xdg-open" \ + --replace-fail "/usr/share/pixmaps/AmneziaVPN.png" "$out/share/pixmaps/AmneziaVPN.png" + ''; + + strictDeps = true; + + nativeBuildInputs = [ + cmake + pkg-config + qt6.wrapQtAppsHook + ]; + + buildInputs = [ + libsecret + qt6.qtbase + qt6.qttools + kdePackages.qtremoteobjects + kdePackages.qtsvg + kdePackages.qt5compat + ]; + + qtWrapperArgs = [ "--prefix PATH : ${lib.makeBinPath amneziaEnv}" ]; + + postInstall = '' + # install AmneziaVPN and AmneziaVPN-service + mkdir -p $out/bin + cp client/AmneziaVPN $out/bin/ + cp service/server/AmneziaVPN-service $out/bin/ + + # install .desktop item + mkdir -p $out/share/applications + cp ../AppDir/AmneziaVPN.desktop $out/share/applications/ + + # install icon + mkdir -p $out/share/pixmaps/ + cp ../deploy/data/linux/AmneziaVPN.png $out/share/pixmaps/ + ''; + + meta = with lib; { + description = "Amnezia VPN Client"; + downloadPage = "https://amnezia.org/en/downloads"; + homepage = "https://amnezia.org/en"; + license = licenses.gpl3; + mainProgram = "AmneziaVPN"; + maintainers = with maintainers; [ sund3RRR ]; + platforms = platforms.unix; + }; +})