{ lib , fetchFromGitHub , mkYarnPackage , buildGoModule , makeWrapper , v2ray , v2ray-geoip , v2ray-domain-list-community , symlinkJoin }: let pname = "v2raya"; version = "2.0.0"; src = fetchFromGitHub { owner = "v2rayA"; repo = "v2rayA"; rev = "v${version}"; sha256 = "sha256-1fWcrMd+TSrlS1H0z7XwVCQzZAa8DAFtlekEZNRMAPA="; }; web = mkYarnPackage { inherit pname version; src = "${src}/gui"; yarnNix = ./yarn.nix; packageJSON = ./package.json; yarnLock = ./yarn.lock; buildPhase = '' export NODE_OPTIONS=--openssl-legacy-provider ln -s $src/postcss.config.js postcss.config.js OUTPUT_DIR=$out yarn --offline build ''; distPhase = "true"; dontInstall = true; dontFixup = true; }; in buildGoModule { inherit pname version; src = "${src}/service"; vendorSha256 = "sha256-Ud4pwS0lz7zSTowg3gXNllfDyj8fu33H1L20szxPcOA="; ldflags = [ "-s" "-w" "-X github.com/v2rayA/v2rayA/conf.Version=${version}" ]; subPackages = [ "." ]; nativeBuildInputs = [ makeWrapper ]; preBuild = '' cp -a ${web} server/router/web ''; postInstall = '' install -Dm 444 ${src}/install/universal/v2raya.desktop -t $out/share/applications install -Dm 444 ${src}/install/universal/v2raya.png -t $out/share/icons/hicolor/512x512/apps substituteInPlace $out/share/applications/v2raya.desktop \ --replace 'Icon=/usr/share/icons/hicolor/512x512/apps/v2raya.png' 'Icon=v2raya' wrapProgram $out/bin/v2rayA \ --prefix PATH ":" "${lib.makeBinPath [ v2ray ]}" \ --prefix XDG_DATA_DIRS ":" ${symlinkJoin { name = "assets"; paths = [ v2ray-geoip v2ray-domain-list-community ]; }}/share ''; meta = with lib; { description = "A Linux web GUI client of Project V which supports V2Ray, Xray, SS, SSR, Trojan and Pingtunnel"; homepage = "https://github.com/v2rayA/v2rayA"; mainProgram = "v2rayA"; license = licenses.agpl3Only; platforms = platforms.linux; maintainers = with maintainers; [ elliot ]; }; }