lock: 1.3.0 -> 1.3.4 (#364295)
[NixPkgs.git] / pkgs / by-name / ve / vesktop / package.nix
blob9c3fedbf3ad6393f41e03aaa0006d458daf56ef6
2   lib,
3   stdenv,
4   fetchFromGitHub,
5   substituteAll,
6   makeBinaryWrapper,
7   makeWrapper,
8   makeDesktopItem,
9   copyDesktopItems,
10   vencord,
11   electron,
12   libicns,
13   pipewire,
14   libpulseaudio,
15   autoPatchelfHook,
16   pnpm_9,
17   nodejs,
18   nix-update-script,
19   withTTS ? true,
20   withMiddleClickScroll ? false,
21   # Enables the use of vencord from nixpkgs instead of
22   # letting vesktop manage it's own version
23   withSystemVencord ? false,
25 stdenv.mkDerivation (finalAttrs: {
26   pname = "vesktop";
27   version = "1.5.4";
29   src = fetchFromGitHub {
30     owner = "Vencord";
31     repo = "Vesktop";
32     rev = "v${finalAttrs.version}";
33     hash = "sha256-zvyDKgNTRha7Z7KGAA7x9LRJrL+1zyb5TZEFFK8Ffrc=";
34   };
36   pnpmDeps = pnpm_9.fetchDeps {
37     inherit (finalAttrs)
38       pname
39       version
40       src
41       patches
42       ;
43     hash = "sha256-GSAOdvd8X4dQNTDZMnzc4oMY54TKvdPuAOMb6DRzCEM=";
44   };
46   nativeBuildInputs =
47     [
48       nodejs
49       pnpm_9.configHook
50     ]
51     ++ lib.optionals stdenv.hostPlatform.isLinux [
52       # vesktop uses venmic, which is a shipped as a prebuilt node module
53       # and needs to be patched
54       autoPatchelfHook
55       copyDesktopItems
56       # we use a script wrapper here for environment variable expansion at runtime
57       # https://github.com/NixOS/nixpkgs/issues/172583
58       makeWrapper
59     ]
60     ++ lib.optionals stdenv.hostPlatform.isDarwin [
61       # on macos we don't need to expand variables, so we can use the faster binary wrapper
62       makeBinaryWrapper
63     ];
65   buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
66     libpulseaudio
67     pipewire
68     (lib.getLib stdenv.cc.cc)
69   ];
71   patches =
72     [ ./disable_update_checking.patch ]
73     ++ lib.optional withSystemVencord (substituteAll {
74       inherit vencord;
75       src = ./use_system_vencord.patch;
76     });
78   env = {
79     ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
80   };
82   # disable code signing on macos
83   # https://github.com/electron-userland/electron-builder/blob/77f977435c99247d5db395895618b150f5006e8f/docs/code-signing.md#how-to-disable-code-signing-during-the-build-process-on-macos
84   postConfigure = lib.optionalString stdenv.hostPlatform.isDarwin ''
85     export CSC_IDENTITY_AUTO_DISCOVERY=false
86   '';
88   # electron builds must be writable on darwin
89   preBuild = lib.optionalString stdenv.hostPlatform.isDarwin ''
90     cp -r ${electron.dist}/Electron.app .
91     chmod -R u+w Electron.app
92   '';
94   buildPhase = ''
95     runHook preBuild
97     pnpm build
98     pnpm exec electron-builder \
99       --dir \
100       -c.asarUnpack="**/*.node" \
101       -c.electronDist=${if stdenv.hostPlatform.isDarwin then "." else electron.dist} \
102       -c.electronVersion=${electron.version}
104     runHook postBuild
105   '';
107   postBuild = lib.optionalString stdenv.hostPlatform.isLinux ''
108     pushd build
109     ${libicns}/bin/icns2png -x icon.icns
110     popd
111   '';
113   installPhase =
114     ''
115       runHook preInstall
116     ''
117     + lib.optionalString stdenv.hostPlatform.isLinux ''
118       mkdir -p $out/opt/Vesktop
119       cp -r dist/*unpacked/resources $out/opt/Vesktop/
121       for file in build/icon_*x32.png; do
122         file_suffix=''${file//build\/icon_}
123         install -Dm0644 $file $out/share/icons/hicolor/''${file_suffix//x32.png}/apps/vesktop.png
124       done
125     ''
126     + lib.optionalString stdenv.hostPlatform.isDarwin ''
127       mkdir -p $out/{Applications,bin}
128       mv dist/mac*/Vesktop.app $out/Applications/Vesktop.app
129     ''
130     + ''
131       runHook postInstall
132     '';
134   postFixup =
135     lib.optionalString stdenv.hostPlatform.isLinux ''
136       makeWrapper ${electron}/bin/electron $out/bin/vesktop \
137         --add-flags $out/opt/Vesktop/resources/app.asar \
138         ${lib.optionalString withTTS "--add-flags \"--enable-speech-dispatcher\""} \
139         ${lib.optionalString withMiddleClickScroll "--add-flags \"--enable-blink-features=MiddleClickAutoscroll\""} \
140         --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}"
141     ''
142     + lib.optionalString stdenv.hostPlatform.isDarwin ''
143       makeWrapper $out/Applications/Vesktop.app/Contents/MacOS/Vesktop $out/bin/vesktop
144     '';
146   desktopItems = lib.optional stdenv.hostPlatform.isLinux (makeDesktopItem {
147     name = "vesktop";
148     desktopName = "Vesktop";
149     exec = "vesktop %U";
150     icon = "vesktop";
151     startupWMClass = "Vesktop";
152     genericName = "Internet Messenger";
153     keywords = [
154       "discord"
155       "vencord"
156       "electron"
157       "chat"
158     ];
159     categories = [
160       "Network"
161       "InstantMessaging"
162       "Chat"
163     ];
164   });
166   passthru = {
167     inherit (finalAttrs) pnpmDeps;
168     updateScript = nix-update-script { };
169   };
171   meta = {
172     description = "Alternate client for Discord with Vencord built-in";
173     homepage = "https://github.com/Vencord/Vesktop";
174     changelog = "https://github.com/Vencord/Vesktop/releases/tag/${finalAttrs.src.rev}";
175     license = lib.licenses.gpl3Only;
176     maintainers = with lib.maintainers; [
177       getchoo
178       Scrumplex
179       vgskye
180       pluiedev
181     ];
182     mainProgram = "vesktop";
183     platforms = [
184       "x86_64-linux"
185       "aarch64-linux"
186       "x86_64-darwin"
187       "aarch64-darwin"
188     ];
189   };