Merge pull request #261006 from vgskye/add-vesktop

vesktop: init at 0.3.3

authored by Azat Bahawi and committed by GitHub f492cdbc 0cfa1a73

+160
+9
maintainers/maintainer-list.nix
··· 18333 18333 githubId = 245573; 18334 18334 name = "Dmitry Kalinkin"; 18335 18335 }; 18336 + vgskye = { 18337 + name = "Skye Green"; 18338 + email = "me@skye.vg"; 18339 + github = "vgskye"; 18340 + githubId = 116078858; 18341 + keys = [{ 18342 + fingerprint = "CDEA 7E04 69E3 0885 A754 4B05 0104 BC05 F41B 77B8"; 18343 + }]; 18344 + }; 18336 18345 victormeriqui = { 18337 18346 name = "Victor Meriqui"; 18338 18347 email = "victor.meriqui@ororatech.com";
+138
pkgs/by-name/ve/vesktop/package.nix
··· 1 + { lib 2 + , stdenv 3 + , stdenvNoCC 4 + , fetchFromGitHub 5 + , substituteAll 6 + , makeWrapper 7 + , makeDesktopItem 8 + , copyDesktopItems 9 + , vencord 10 + , electron 11 + , pipewire 12 + , libicns 13 + , jq 14 + , moreutils 15 + , nodePackages 16 + }: 17 + stdenv.mkDerivation rec { 18 + pname = "vesktop"; 19 + version = "0.3.3"; 20 + 21 + src = fetchFromGitHub { 22 + owner = "Vencord"; 23 + repo = "Vesktop"; 24 + rev = "v${version}"; 25 + sha256 = "sha256-Njs3tACxUyRolYUtS/q2lITIQnUBFXVXWZEfQ66HpPM="; 26 + }; 27 + 28 + pnpm-deps = stdenvNoCC.mkDerivation { 29 + pname = "${pname}-pnpm-deps"; 30 + inherit src version patches ELECTRON_SKIP_BINARY_DOWNLOAD; 31 + 32 + nativeBuildInputs = [ 33 + jq 34 + moreutils 35 + nodePackages.pnpm 36 + ]; 37 + 38 + # https://github.com/NixOS/nixpkgs/blob/763e59ffedb5c25774387bf99bc725df5df82d10/pkgs/applications/misc/pot/default.nix#L56 39 + installPhase = '' 40 + export HOME=$(mktemp -d) 41 + 42 + pnpm config set store-dir $out 43 + pnpm install --frozen-lockfile --ignore-script 44 + 45 + rm -rf $out/v3/tmp 46 + for f in $(find $out -name "*.json"); do 47 + sed -i -E -e 's/"checkedAt":[0-9]+,//g' $f 48 + jq --sort-keys . $f | sponge $f 49 + done 50 + ''; 51 + 52 + dontFixup = true; 53 + outputHashMode = "recursive"; 54 + outputHash = "sha256-vInaSLGahRUgvwAeUcI+oV84L+tgNRCmfFpE0aUD4X4="; 55 + }; 56 + 57 + nativeBuildInputs = [ 58 + copyDesktopItems 59 + nodePackages.pnpm 60 + nodePackages.nodejs 61 + makeWrapper 62 + ]; 63 + 64 + patches = [ 65 + (substituteAll { inherit vencord; src = ./use_system_vencord.patch; }) 66 + ]; 67 + 68 + ELECTRON_SKIP_BINARY_DOWNLOAD = 1; 69 + 70 + preBuild = '' 71 + export HOME=$(mktemp -d) 72 + export STORE_PATH=$(mktemp -d) 73 + 74 + cp -r ${pnpm-deps}/* "$STORE_PATH" 75 + chmod -R +w "$STORE_PATH" 76 + 77 + pnpm config set store-dir "$STORE_PATH" 78 + pnpm install --offline --frozen-lockfile --ignore-script 79 + patchShebangs node_modules/{*,.*} 80 + ''; 81 + 82 + postBuild = '' 83 + pnpm build 84 + # using `pnpm exec` here apparently makes it ignore ELECTRON_SKIP_BINARY_DOWNLOAD 85 + ./node_modules/.bin/electron-builder \ 86 + --dir \ 87 + -c.electronDist=${electron}/libexec/electron \ 88 + -c.electronVersion=${electron.version} 89 + ''; 90 + 91 + # this is consistent with other nixpkgs electron packages and upstream, as far as I am aware 92 + # yes, upstream really packages it as "vesktop" but uses "vencorddesktop" file names 93 + installPhase = 94 + let 95 + libPath = lib.makeLibraryPath [ pipewire ]; 96 + in 97 + '' 98 + runHook preInstall 99 + 100 + mkdir -p $out/opt/Vesktop/resources 101 + cp dist/linux-unpacked/resources/app.asar $out/opt/Vesktop/resources 102 + 103 + pushd build 104 + ${libicns}/bin/icns2png -x icon.icns 105 + for file in icon_*x32.png; do 106 + file_suffix=''${file//icon_} 107 + install -Dm0644 $file $out/share/icons/hicolor/''${file_suffix//x32.png}/apps/vencorddesktop.png 108 + done 109 + 110 + makeWrapper ${electron}/bin/electron $out/bin/vencorddesktop \ 111 + --prefix LD_LIBRARY_PATH : ${libPath} \ 112 + --add-flags $out/opt/Vesktop/resources/app.asar \ 113 + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations}}" 114 + 115 + runHook postInstall 116 + ''; 117 + 118 + desktopItems = [ 119 + (makeDesktopItem { 120 + name = "vencorddesktop"; 121 + desktopName = "Vesktop"; 122 + exec = "vencorddesktop %U"; 123 + icon = "vencorddesktop"; 124 + startupWMClass = "VencordDesktop"; 125 + genericName = "Internet Messenger"; 126 + keywords = [ "discord" "vencord" "electron" "chat" ]; 127 + }) 128 + ]; 129 + 130 + meta = with lib; { 131 + description = "An alternate client for Discord with Vencord built-in"; 132 + homepage = "https://github.com/Vencord/Vesktop"; 133 + license = licenses.gpl3Only; 134 + maintainers = with maintainers; [ getchoo Scrumplex vgskye ]; 135 + platforms = platforms.linux; 136 + mainProgram = "vencorddesktop"; 137 + }; 138 + }
+13
pkgs/by-name/ve/vesktop/use_system_vencord.patch
··· 1 + diff --git a/src/main/constants.ts b/src/main/constants.ts 2 + index d5c5fa6..a1b32f1 100644 3 + --- a/src/main/constants.ts 4 + +++ b/src/main/constants.ts 5 + @@ -16,7 +16,7 @@ export const VENCORD_THEMES_DIR = join(DATA_DIR, "themes"); 6 + // needs to be inline require because of circular dependency 7 + // as otherwise "DATA_DIR" (which is used by ./settings) will be uninitialised 8 + export const VENCORD_FILES_DIR = 9 + - (require("./settings") as typeof import("./settings")).Settings.store.vencordDir || join(DATA_DIR, "vencordDist"); 10 + + (require("./settings") as typeof import("./settings")).Settings.store.vencordDir || "@vencord@"; 11 + 12 + export const USER_AGENT = `Vesktop/${app.getVersion()} (https://github.com/Vencord/Vesktop)`; 13 +