freetube: build from source

pluie.me 13faeaf2 c4435d0b

verified
+98 -33
+85 -33
pkgs/by-name/fr/freetube/package.nix
··· 1 1 { 2 - stdenv, 3 2 lib, 4 - fetchurl, 5 - appimageTools, 6 - makeWrapper, 3 + stdenvNoCC, 4 + fetchFromGitHub, 5 + fetchYarnDeps, 6 + replaceVars, 7 + makeDesktopItem, 8 + 9 + nodejs, 10 + yarnConfigHook, 11 + yarnBuildHook, 12 + makeShellWrapper, 13 + copyDesktopItems, 7 14 electron, 15 + 8 16 nixosTests, 9 17 }: 10 - 11 - stdenv.mkDerivation rec { 18 + let 19 + description = "Open Source YouTube app for privacy"; 20 + in 21 + stdenvNoCC.mkDerivation (finalAttrs: { 12 22 pname = "freetube"; 13 23 version = "0.22.1"; 14 24 15 - src = fetchurl { 16 - url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${version}-beta/freetube_${version}_amd64.AppImage"; 17 - hash = "sha256-HbU5yRSP5Gk473ZoQL3HD2Bph/U/sq1Dd0eFpxyKc9s="; 25 + src = fetchFromGitHub { 26 + owner = "FreeTubeApp"; 27 + repo = "FreeTube"; 28 + tag = "v${finalAttrs.version}-beta"; 29 + hash = "sha256-FND4jYnNeqsyCXkVB+DKr8hu720+XEjOZJ/iRZGI3y8="; 18 30 }; 19 31 20 - passthru.tests = nixosTests.freetube; 32 + # Darwin requires writable Electron dist 33 + postUnpack = 34 + if stdenvNoCC.hostPlatform.isDarwin then 35 + '' 36 + cp -r ${electron.dist} electron-dist 37 + chmod -R u+w electron-dist 38 + '' 39 + else 40 + '' 41 + ln -s ${electron.dist} electron-dist 42 + ''; 21 43 22 - appimageContents = appimageTools.extractType2 { inherit pname version src; }; 23 - 24 - dontUnpack = true; 25 - dontConfigure = true; 26 - dontBuild = true; 44 + patches = [ 45 + (replaceVars ./patch-build-script.patch { 46 + electron-version = electron.version; 47 + }) 48 + ]; 27 49 28 - nativeBuildInputs = [ makeWrapper ]; 50 + yarnOfflineCache = fetchYarnDeps { 51 + yarnLock = "${finalAttrs.src}/yarn.lock"; 52 + hash = "sha256-cvRnPxRy3oawZUu97qYu+IgbXLYej/kykrCDJ4qLvIg="; 53 + }; 29 54 30 - installPhase = '' 31 - runHook preInstall 55 + nativeBuildInputs = [ 56 + nodejs 57 + yarnConfigHook 58 + yarnBuildHook 59 + makeShellWrapper 60 + copyDesktopItems 61 + ]; 32 62 33 - mkdir -p $out/bin $out/share/${pname} $out/share/applications $out/share/icons/hicolor/scalable/apps 63 + installPhase = 64 + '' 65 + runHook preInstall 66 + '' 67 + + lib.optionalString stdenvNoCC.hostPlatform.isLinux '' 68 + mkdir -p $out/share/freetube 69 + cp -r build/*-unpacked/{locales,resources{,.pak}} -t $out/share/freetube 34 70 35 - cp -a ${appimageContents}/{locales,resources} $out/share/${pname} 36 - cp -a ${appimageContents}/freetube.desktop $out/share/applications/${pname}.desktop 37 - cp -a ${appimageContents}/usr/share/icons/hicolor/scalable/freetube.svg $out/share/icons/hicolor/scalable/apps 71 + makeWrapper ${lib.getExe electron} $out/bin/freetube \ 72 + --add-flags "$out/share/freetube/resources/app.asar" \ 73 + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" 38 74 39 - substituteInPlace $out/share/applications/${pname}.desktop \ 40 - --replace 'Exec=AppRun' 'Exec=${pname}' 75 + install -D _icons/icon.svg $out/share/icons/hicolor/scalable/apps/freetube.svg 76 + '' 77 + + lib.optionalString stdenvNoCC.hostPlatform.isDarwin '' 78 + mkdir -p $out/Applications 79 + cp -r build/mac*/FreeTube.app $out/Applications 80 + ln -s "$out/Applications/FreeTube.app/Contents/MacOS/FreeTube" $out/bin/freetube 81 + '' 82 + + '' 83 + runHook postInstall 84 + ''; 41 85 42 - runHook postInstall 43 - ''; 86 + desktopItems = [ 87 + (makeDesktopItem { 88 + name = "freetube"; 89 + desktopName = "FreeTube"; 90 + comment = description; 91 + exec = "freetube %U"; 92 + terminal = false; 93 + type = "Application"; 94 + icon = "freetube"; 95 + startupWMClass = "FreeTube"; 96 + mimeTypes = [ "x-scheme-handler/freetube" ]; 97 + categories = [ "Network" ]; 98 + }) 99 + ]; 44 100 45 - postFixup = '' 46 - makeWrapper ${electron}/bin/electron $out/bin/${pname} \ 47 - --add-flags $out/share/${pname}/resources/app.asar \ 48 - --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-wayland-ime=true}}" 49 - ''; 101 + passthru.tests = nixosTests.freetube; 50 102 51 103 meta = { 52 - description = "Open Source YouTube app for privacy"; 104 + inherit description; 53 105 homepage = "https://freetubeapp.io/"; 54 106 license = lib.licenses.agpl3Only; 55 107 maintainers = with lib.maintainers; [ ··· 61 113 inherit (electron.meta) platforms; 62 114 mainProgram = "freetube"; 63 115 }; 64 - } 116 + })
+13
pkgs/by-name/fr/freetube/patch-build-script.patch
··· 1 + diff --git a/_scripts/ebuilder.config.js b/_scripts/ebuilder.config.js 2 + index 5b79d961..9f5945d2 100644 3 + --- a/_scripts/ebuilder.config.js 4 + +++ b/_scripts/ebuilder.config.js 5 + @@ -1,6 +1,8 @@ 6 + const { name, productName } = require('../package.json') 7 + 8 + const config = { 9 + + electronVersion: "@electron-version@", 10 + + electronDist: "electron-dist", 11 + appId: `io.freetubeapp.${name}`, 12 + copyright: 'Copyleft © 2020-2024 freetubeapp@protonmail.com', 13 + // asar: false,