diff --git a/pkgs/by-name/ma/mattermost-desktop/package.nix b/pkgs/by-name/ma/mattermost-desktop/package.nix index c6f9c2dec4c8..d907d627dda2 100644 --- a/pkgs/by-name/ma/mattermost-desktop/package.nix +++ b/pkgs/by-name/ma/mattermost-desktop/package.nix @@ -1,59 +1,72 @@ { lib, - stdenv, - fetchurl, + fetchFromGitHub, + buildNpmPackage, electron, makeWrapper, testers, mattermost-desktop, + nix-update-script, }: -let - +buildNpmPackage rec { pname = "mattermost-desktop"; version = "5.10.2"; - srcs = { - "x86_64-linux" = { - url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-x64.tar.gz"; - hash = "sha256-MSV5ias643eYKmJlJInCuNA2hnaDRv+3c7x4xxZI7Z4="; - }; - - "aarch64-linux" = { - url = "https://releases.mattermost.com/desktop/${version}/${pname}-${version}-linux-arm64.tar.gz"; - hash = "sha256-vuUn7LWs970o1S1CmW3uMiE0Y8XpP0eVtoC2NP13R8w="; - }; + src = fetchFromGitHub { + owner = "mattermost"; + repo = "desktop"; + tag = "v${version}"; + hash = "sha256-LHjVmrsOdk8vfsqvNEWkzpusm6jbz3SOb3bEaIb7rb4="; }; - inherit (stdenv.hostPlatform) system; - -in - -stdenv.mkDerivation { - inherit pname version; - - src = fetchurl (srcs."${system}" or (throw "Unsupported system ${system}")); + npmDepsHash = "sha256-LAbqsMdMmmHGgvg2ilz6neQxMOK3jtCKt8K0M8BWifs="; + npmBuildScript = "build-prod"; + makeCacheWritable = true; nativeBuildInputs = [ makeWrapper ]; + env.ELECTRON_SKIP_BINARY_DOWNLOAD = "1"; + + postPatch = '' + substituteInPlace webpack.config.base.js \ + --replace-fail \ + "const VERSION = childProcess.execSync('git rev-parse --short HEAD', {cwd: __dirname}).toString();" \ + "const VERSION = process.env.version;" + ''; + + postBuild = '' + # electronDist needs to be writable + cp -r ${electron.dist} electron-dist + chmod -R u+w electron-dist + + npm exec electron-builder -- \ + --config electron-builder.json \ + --dir \ + -c.electronDist=electron-dist \ + -c.electronVersion=${electron.version} + ''; + installPhase = '' runHook preInstall - # Mattermost tarball comes with executable bit set for everything. - # We’ll apply it only to files that need it. - find . -type f -print0 | xargs -0 chmod -x - find . -type f \( -name '*.so.*' -o -name '*.s[oh]' \) -print0 | xargs -0 chmod +x - chmod +x mattermost-desktop chrome-sandbox + mkdir --parents \ + $out/bin \ + $out/share/applications \ + $out/share/icons/hicolor/512x512/apps - mkdir -p $out/bin $out/share/applications $out/share/${pname}/ - cp -r app_icon.png create_desktop_file.sh locales/ resources/* $out/share/${pname}/ + readonly dist=release/linux-unpacked - patchShebangs $out/share/${pname}/create_desktop_file.sh - $out/share/${pname}/create_desktop_file.sh - rm $out/share/${pname}/create_desktop_file.sh - mv Mattermost.desktop $out/share/applications/Mattermost.desktop + cp -a $dist/resources $out/share/${pname} + + patchShebangs $dist/create_desktop_file.sh + $dist/create_desktop_file.sh + mv Mattermost.desktop $out/share/applications/ substituteInPlace $out/share/applications/Mattermost.desktop \ - --replace /share/mattermost-desktop/mattermost-desktop /bin/mattermost-desktop + --replace-fail /build/source/$dist/app_icon.png ${pname} \ + --replace-fail /build/source/$dist/ $out/bin/ + + cp src/assets/linux/app_icon.png $out/share/icons/hicolor/512x512/apps/${pname}.png makeWrapper '${lib.getExe electron}' $out/bin/${pname} \ --set-default ELECTRON_IS_DEV 0 \ @@ -67,21 +80,18 @@ stdenv.mkDerivation { tests.version = testers.testVersion { package = mattermost-desktop; # Invoking with `--version` insists on being able to write to a log file. - command = "env HOME=/tmp ${mattermost-desktop.meta.mainProgram} --version"; + command = "env HOME=/tmp ${meta.mainProgram} --version"; }; + updateScript = nix-update-script { }; }; - meta = with lib; { + meta = { description = "Mattermost Desktop client"; mainProgram = "mattermost-desktop"; homepage = "https://about.mattermost.com/"; changelog = "https://github.com/mattermost/desktop/releases/tag/${src.tag}"; - sourceProvenance = with sourceTypes; [ binaryNativeCode ]; - license = licenses.asl20; - platforms = [ - "x86_64-linux" - "aarch64-linux" - ]; + license = lib.licenses.asl20; + platforms = electron.meta.platforms; maintainers = with lib.maintainers; [ joko liff