NixOS / nixpkgs

Nix Packages collection & NixOS
MIT License
18.08k stars 14.06k forks source link

Package request: Zen Browser #327982

Open BlueFox1616 opened 3 months ago

BlueFox1616 commented 3 months ago

Zen zen-browser

Project description

User-friendly, useful, mods that increase usability can be added from the zen-mods mod store, a customizable browser, features that can be searched for in a browser for the end user, easy to use thanks to the shortcut key assignment feature, theme-store, frequently used progressive web apps, add-on apps, websites can be easily accessed thanks to the sidebar feature, can be viewed as a mobile page. container, work spaces, zen-mods, window management by creating multiple tab sections in a window, sidebar feature.

Metadata

Lenny0939 commented 3 months ago

I've tried to write a package for it based on the package for the floorp browser, but it's not working for some reason. I get this error:

 > Running phase: patchPhase
       > applying patch /nix/store/9lx1746yy56pn3dpc35l1xr6l3lykbin-env_var_for_system_dir-ff111.patch
       > patching file toolkit/xre/nsXREDirProvider.cpp
       > applying patch /nix/store/6wsdh6246xbmlv3jr5q7qpl9ay3acq04-no-buildconfig-ffx121.patch
       > patching file docshell/base/nsAboutRedirector.cpp
       > Hunk #1 succeeded at 73 (offset -15 lines).
       > patching file toolkit/content/jar.mn
       > Hunk #1 FAILED at 41.
       > 1 out of 1 hunk FAILED -- saving rejects to file toolkit/content/jar.mn.rej

This is my first time packaging something so I don't really know how to fix it

mauro-balades commented 3 months ago

toolkit/content/jar.mn doesnt exist

Cristiandis commented 2 months ago

bumping this

chaezwav commented 2 months ago

bumping this

pective commented 2 months ago

bumping

mateowoetam commented 2 months ago

bumping

FMGordillo commented 2 months ago

This is what I got thus far

...
00:00:06 checking cargo version... 1.77.1
00:00:06 checking for rust host triplet... x86_64-unknown-linux-gnu
00:00:06 checking for rust target triplet... x86_64-unknown-linux-gnu
00:00:06 checking for rustdoc... /nix/store/p8nr5crc52shb4n5b1z266z0g674239g-rustc-wrapper-1.77.2/bin/rustdoc
00:00:06 checking for cbindgen... /nix/store/07i7asifw6pp4a4fgmmxgq8a7r78bfyh-rust-cbindgen-0.26.0/bin/cbindgen
00:00:06 checking for rustfmt... not found
00:00:06 checking for clang for bindgen... /nix/store/v78293y2wi2kyxb93hp30k0ra9r77amf-clang-wrapper-17.0.6/bin/clang++
00:00:06 checking for libclang for bindgen... not found
00:00:06 ERROR: Could not find libclang to generate rust bindings for C/C++. Please install the necessary packages, run `mach bootstrap`, or use --with-libclang-path to give the path containing it.
00:00:06 W Exception when writing resource usage file: [Errno 2] No such file or directory: '/home/me/code/desktop/engine/obj-x86_64-pc-linux-gnu/.mozbuild/profile_build_resources.json'
00:00:07  Config object not found by mach.
00:00:07 *** Fix above errors and then restart with "./mach build"
let
  pkgs = import <nixpkgs> { };
  # I don't know if it needs gcc
in pkgs.mkShell {
  nativeBuildInputs = with pkgs; [
    # TODO: Install from cargo? Or use this instead?
    rust-cbindgen
    # TODO: Install from cargo? Or use this instead?
    rust-bindgen

    alsa-lib
    cargo
    clang
    gcc
    libpulseaudio
    libclang
    llvm
    pkg-config
    python3
    rustc
  ];
}

Maybe someone with experience building with Firefox could help it out on this one

chaezwav commented 2 months ago

Isn't there a firefox builder? Just looking at the Floorp expression they didn't use mkshell

baduhai commented 2 months ago

Building this doesn't seem to be the same as building other firefox forks, since it uses surfer to automate building.

MarceColl commented 2 months ago

Meanwhile to avoid the flatpak I have this flake that uses the binary release while a proper build works: https://github.com/MarceColl/zen-browser-flake

fndov commented 2 months ago

bumping

chaezwav commented 2 months ago

Meanwhile to avoid the flatpak I have this flake that uses the binary release while a proper build works: https://github.com/MarceColl/zen-browser-flake

Is there anyway you could make it for the generic version too?

dit7ya commented 2 months ago

I spent some time tinkering with this only to later realize Firefox itself doesn't build on aarch64-darwin (my current machine) via nixpkgs.

{
  lib,
  stdenv,
  fetchFromGitHub,
  buildNpmPackage,
  vips,
  pkg-config,
  fetchurl,
  gnutar,
  git,
}: let
  firefoxVersion = "129.0.2";
  firefoxSrc = fetchurl {
    url = "mirror://mozilla/firefox/releases/${firefoxVersion}/source/firefox-${firefoxVersion}.source.tar.xz";
    hash = "sha512-9oBah+XLTkN1g5FuPsGzEtxz7sX8Bs56A4sTvXxoJ7GM84PDBkXZZiPOQWdTUfMCPsa5+J1nbxyImZTq558sEw==";
  };
in
  buildNpmPackage rec {
    pname = "zen-browser";
    version = "1.0.0-a.26";

    src = fetchFromGitHub {
      owner = "zen-browser";
      repo = "desktop";
      rev = version;
      hash = "sha256-SFLleJXchumnA28eYjSkMlFMqngoH8bp02q2WkGlYas=";
      fetchSubmodules = true;
    };

    nativeBuildInputs = [git pkg-config];
    buildInputs = [vips gnutar];
    patches = [./changes.patch];

    preBuild = ''
      patch node_modules/@zen-browser/surfer/dist/utils/version.js < ${./dist_utils_version.js.patch}
      patch node_modules/@zen-browser/surfer/dist/commands/download/firefox.js < ${./dist_commands_download_firefox.js.patch}

      # put the firefox source in the right place (.surfer/engine)
      mkdir -p .surfer/engine

      cp -r ${firefoxSrc} .surfer/engine/firefox-${firefoxVersion}.source.tar.xz

      npm run init
    '';

    makeCacheWritable = true;
    npmDepsHash = "sha256-AxGh/MC8Kw2SHw4wYOTyZjmC1q+hemPxSJZkjWNrYbo=";

    meta = with lib; {
      description = "Experience tranquillity while browsing the web without people tracking you";
      homepage = "https://github.com/zen-browser/desktop";
      license = licenses.mpl20;
      maintainers = with maintainers; [];
      mainProgram = "zen-browser";
      platforms = platforms.all;
    };
  }

The main issue with this package is that it depends on @zen-browser/surfer which does the main heavy-lifting of downloading various things via Javascript.

I think there are two approaches we can take here to build this from source.

  1. Patch aggressively inside the @zen-browser/surfer to replace all network calls with FODs, but still using their build pattern and scripts. Not sure if this can work, and how much effort it is going to be to make everything compatible with Nix.

  2. Utilizing buildMozillaMach to essentially replace what surfer does, but I am not sure how feasible this is.

MarceColl commented 2 months ago

Meanwhile to avoid the flatpak I have this flake that uses the binary release while a proper build works: https://github.com/MarceColl/zen-browser-flake

Is there anyway you could make it for the generic version too?

@chaezwav I've pushed an update that adds the generic version, you can find more information in the README. Let me know if it works for you and if not feel free to open an issue in the repo.

chaezwav commented 2 months ago

@MarceColl It built properly and works fine. Thank you!

baduhai commented 2 months ago

@dit7ya I'm trying to pickup where you left off, what are the patches that you have in your derivation?

Eveeifyeve commented 2 months ago

I will look into trying to make this work, but I won't maintain it.

timon-schelling commented 2 months ago

@Eveeifyeve I would. I'm also working on this. My biggest problem is getting it to work with the firefox wrapper for extensions etc.

Eveeifyeve commented 2 months ago

I pretty much know nixpkgs so this shouldn't be hard. The only hard part is patching some things.

baduhai commented 2 months ago

@Eveeifyeve I would be willing to maintain it too.

How are you trying to go about this? Are you trying to use buildMachMozilla, or are you compiling this using surfer as does upstream, then patching things manually?

Eveeifyeve commented 2 months ago

@Eveeifyeve I would be willing to maintain it too.

How are you trying to go about this? Are you trying to use buildMachMozilla, or are you compiling this using surfer as does upstream, then patching things manually?

Trying to use buildMachMozilla.

Eveeifyeve commented 2 months ago

I will work on this tmr as it's 1am for me.

baduhai commented 2 months ago

@Eveeifyeve Do you have your work on some public repo? I can pick this up when I have some time later today.

Suri312006 commented 2 months ago

bumping

Eveeifyeve commented 2 months ago

@Eveeifyeve Do you have your work on some public repo? I can pick this up when I have some time later today.

I can publish some changes to a repo today so you can pickup from.

Eveeifyeve commented 2 months ago

Hey I don't think it's possible to do buildMachMozilla as it contains it's own cli aka surfer to build and grab Firefox source and build it with patches applied using npm scripts. We have to patch some stuff with their surfer cli as their build proccess uses surfer to grab source of firefox, so this has to be a buildNpmPackage which also allows for the package to work on linux & darwin.

Also it doesn't include files needed to be a buildMachMozilla like take a look at librewolf and floop browser as an example it doesn't contain files like moz.config and etc.

So summary buildMachMozzila doesn't give stuff that we need for zen-browser.

I am trying to get a working on a version that hopefully should work both Darwin & Linux over here.

also @dit7ya can you please provide the patch files?

Useful Links:

Surfer CLI Github:

Eveeifyeve commented 2 months ago

Hey I don't think it's possible to do buildMachMozilla as it contains it's own cli aka surfer to build and grab Firefox source and build it with patches applied using npm scripts. We have to patch some stuff with their surfer cli as their build proccess uses surfer to grab source of firefox, so this has to be a buildNpmPackage which also allows for the package to work on linux & darwin.

Also it doesn't include files needed to be a buildMachMozilla like take a look at librewolf and floop browser as an example it doesn't contain files like moz.config and etc.

So summary buildMachMozzila doesn't give stuff that we need for zen-browser.

I am trying to get a working on a version that hopefully should work both Darwin & Linux over here.

also @dit7ya can you please provide the patch files?

Useful Links:

Surfer CLI Github:

Surfer CLI Source Code (NPM): https://www.npmjs.com/package/@zen-browser/surfer?activeTab=code

  • Look in dist/commands/download/firefox.js
  • Look in dist/utils/version.js

I mean you could do an mkdirevation and use pnpm which is what the project maintainers use.

MordragT commented 2 months ago

This is my try at the binary package: https://github.com/MordragT/nixos/blob/master/pkgs/by-name/zen-browser-bin/default.nix Dont know if this is common knowledge but the MOZ_LEGACY_PROFILES=1 environmental variable must be set so that you can declaratively change settings and install extensions like here: https://github.com/MordragT/nixos/blob/master/home/modules/programs/zen-browser.nix

Edit: Just for clarification, the firefoxAddons namespace is my own namespace so you will have to provide your own extensions and cannot just copy the homeManager module.

dit7ya commented 2 months ago

@Eveeifyeve These are the patches, but these were very much hacky just to move forward, and most likely won't be relevant in the final derivation.

pkgs/by-name/ze/zen-browser/dist_commands_download_firefox.js.patch

--- node_modules/@zen-browser/surfer/dist/commands/download/firefox.js  2024-08-22 02:42:02
+++ dist_commands_download_firefox.js   2024-08-22 03:50:55
@@ -43,14 +43,6 @@
     //
     // If BSD tar adds --transform support in the future, we can use that
     // instead
-    if (process.platform == 'darwin') {
-        // GNU Tar doesn't come preinstalled on any MacOS machines, so we need to
-        // check for it and ask for the user to install it if necessary
-        if (!(0, command_exists_1.commandExistsSync)('gtar')) {
-            throw new Error(`GNU Tar is required to extract Firefox's source on MacOS. Please install it using the command |brew install gnu-tar| and try again`);
-        }
-        tarExec = 'gtar';
-    }
     log_1.log.info(`Unpacking ${(0, node_path_1.resolve)(constants_1.MELON_TMP_DIR, name)} to ${constants_1.ENGINE_DIR}`);
     if (process.platform === 'win32') {
         log_1.log.info('Unpacking Firefox source on Windows (7z)');

pkgs/by-name/ze/zen-browser/changes.patch

diff --git a/package-lock.json b/package-lock.json
index b26661e..63bf445 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
       "version": "1.0.0",
       "license": "ISC",
       "dependencies": {
-        "@zen-browser/surfer": "^1.2.9"
+        "@zen-browser/surfer": "^1.2.14"
       }
     },
     "node_modules/@oozcitak/dom": {
@@ -264,9 +264,9 @@
       "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
     },
     "node_modules/@zen-browser/surfer": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.9.tgz",
-      "integrity": "sha512-XDEG80YOiQd0kl0PX0WzdYDwdOJ5hhrU0bcohBeK68my3nOXTIiuM26FXh3/2+feNzr/Of7Y6Qfmmdf0YCAvgw==",
+      "version": "1.2.14",
+      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.14.tgz",
+      "integrity": "sha512-v83Iig29BUsVlMfMDER+y99DMDf2lD9IXnXuWAfLEE02AAYugYpTYu1tZ5aUffpLjZqCj46GUH8xdSUmUZQxzA==",
       "dependencies": {
         "@resvg/resvg-js": "^1.4.0",
         "async-icns": "^1.0.2",
@@ -2097,9 +2097,9 @@
       "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
     },
     "@zen-browser/surfer": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.9.tgz",
-      "integrity": "sha512-XDEG80YOiQd0kl0PX0WzdYDwdOJ5hhrU0bcohBeK68my3nOXTIiuM26FXh3/2+feNzr/Of7Y6Qfmmdf0YCAvgw==",
+      "version": "1.2.14",
+      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.14.tgz",
+      "integrity": "sha512-v83Iig29BUsVlMfMDER+y99DMDf2lD9IXnXuWAfLEE02AAYugYpTYu1tZ5aUffpLjZqCj46GUH8xdSUmUZQxzA==",
       "requires": {
         "@resvg/resvg-js": "^1.4.0",
         "async-icns": "^1.0.2",

pkgs/by-name/ze/zen-browser/dist_utils_version.js.patch

--- node_modules/@zen-browser/surfer/dist/utils/version.js  2024-08-22 02:42:02
+++ dist_utils_version.js   2024-08-22 02:44:55
@@ -17,10 +17,28 @@
   "${config_1.SupportedProducts.FirefoxESR}": "FIREFOX_ESR",
   "${config_1.SupportedProducts.FirefoxNightly}": "FIREFOX_NIGHTLY"
 }`);
+const staticData = {
+    "FIREFOX_AURORA": "",
+    "FIREFOX_DEVEDITION": "130.0b8",
+    "FIREFOX_ESR": "115.14.0esr",
+    "FIREFOX_ESR_NEXT": "128.1.0esr",
+    "FIREFOX_NIGHTLY": "131.0a1",
+    "LAST_MERGE_DATE": "2024-08-05",
+    "LAST_RELEASE_DATE": "2024-08-06",
+    "LAST_SOFTFREEZE_DATE": "2024-08-01",
+    "LAST_STRINGFREEZE_DATE": "2024-08-02",
+    "LATEST_FIREFOX_DEVEL_VERSION": "130.0b8",
+    "LATEST_FIREFOX_OLDER_VERSION": "3.6.28",
+    "LATEST_FIREFOX_RELEASED_DEVEL_VERSION": "130.0b8",
+    "LATEST_FIREFOX_VERSION": "129.0.2",
+    "NEXT_MERGE_DATE": "2024-09-02",
+    "NEXT_RELEASE_DATE": "2024-09-03",
+    "NEXT_SOFTFREEZE_DATE": "2024-08-29",
+    "NEXT_STRINGFREEZE_DATE": "2024-08-30"
+};
 const getLatestFF = async (product = config_1.SupportedProducts.Firefox) => {
     try {
-        const { data } = await axios_1.default.get('https://product-details.mozilla.org/1.0/firefox_versions.json');
-        return data[firefoxTargets[product]];
+        return staticData[firefoxTargets[product]];
     }
     catch (error) {
         log_1.log.warning('Failed to get latest firefox version with error:');
Eveeifyeve commented 2 months ago

@Eveeifyeve These are the patches, but these were very much hacky just to move forward, and most likely won't be relevant in the final derivation.

pkgs/by-name/ze/zen-browser/dist_commands_download_firefox.js.patch

--- node_modules/@zen-browser/surfer/dist/commands/download/firefox.js    2024-08-22 02:42:02
+++ dist_commands_download_firefox.js 2024-08-22 03:50:55
@@ -43,14 +43,6 @@
     //
     // If BSD tar adds --transform support in the future, we can use that
     // instead
-    if (process.platform == 'darwin') {
-        // GNU Tar doesn't come preinstalled on any MacOS machines, so we need to
-        // check for it and ask for the user to install it if necessary
-        if (!(0, command_exists_1.commandExistsSync)('gtar')) {
-            throw new Error(`GNU Tar is required to extract Firefox's source on MacOS. Please install it using the command |brew install gnu-tar| and try again`);
-        }
-        tarExec = 'gtar';
-    }
     log_1.log.info(`Unpacking ${(0, node_path_1.resolve)(constants_1.MELON_TMP_DIR, name)} to ${constants_1.ENGINE_DIR}`);
     if (process.platform === 'win32') {
         log_1.log.info('Unpacking Firefox source on Windows (7z)');

pkgs/by-name/ze/zen-browser/changes.patch

diff --git a/package-lock.json b/package-lock.json
index b26661e..63bf445 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
       "version": "1.0.0",
       "license": "ISC",
       "dependencies": {
-        "@zen-browser/surfer": "^1.2.9"
+        "@zen-browser/surfer": "^1.2.14"
       }
     },
     "node_modules/@oozcitak/dom": {
@@ -264,9 +264,9 @@
       "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
     },
     "node_modules/@zen-browser/surfer": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.9.tgz",
-      "integrity": "sha512-XDEG80YOiQd0kl0PX0WzdYDwdOJ5hhrU0bcohBeK68my3nOXTIiuM26FXh3/2+feNzr/Of7Y6Qfmmdf0YCAvgw==",
+      "version": "1.2.14",
+      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.14.tgz",
+      "integrity": "sha512-v83Iig29BUsVlMfMDER+y99DMDf2lD9IXnXuWAfLEE02AAYugYpTYu1tZ5aUffpLjZqCj46GUH8xdSUmUZQxzA==",
       "dependencies": {
         "@resvg/resvg-js": "^1.4.0",
         "async-icns": "^1.0.2",
@@ -2097,9 +2097,9 @@
       "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="
     },
     "@zen-browser/surfer": {
-      "version": "1.2.9",
-      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.9.tgz",
-      "integrity": "sha512-XDEG80YOiQd0kl0PX0WzdYDwdOJ5hhrU0bcohBeK68my3nOXTIiuM26FXh3/2+feNzr/Of7Y6Qfmmdf0YCAvgw==",
+      "version": "1.2.14",
+      "resolved": "https://registry.npmjs.org/@zen-browser/surfer/-/surfer-1.2.14.tgz",
+      "integrity": "sha512-v83Iig29BUsVlMfMDER+y99DMDf2lD9IXnXuWAfLEE02AAYugYpTYu1tZ5aUffpLjZqCj46GUH8xdSUmUZQxzA==",
       "requires": {
         "@resvg/resvg-js": "^1.4.0",
         "async-icns": "^1.0.2",

pkgs/by-name/ze/zen-browser/dist_utils_version.js.patch

--- node_modules/@zen-browser/surfer/dist/utils/version.js    2024-08-22 02:42:02
+++ dist_utils_version.js 2024-08-22 02:44:55
@@ -17,10 +17,28 @@
   "${config_1.SupportedProducts.FirefoxESR}": "FIREFOX_ESR",
   "${config_1.SupportedProducts.FirefoxNightly}": "FIREFOX_NIGHTLY"
 }`);
+const staticData = {
+    "FIREFOX_AURORA": "",
+    "FIREFOX_DEVEDITION": "130.0b8",
+    "FIREFOX_ESR": "115.14.0esr",
+    "FIREFOX_ESR_NEXT": "128.1.0esr",
+    "FIREFOX_NIGHTLY": "131.0a1",
+    "LAST_MERGE_DATE": "2024-08-05",
+    "LAST_RELEASE_DATE": "2024-08-06",
+    "LAST_SOFTFREEZE_DATE": "2024-08-01",
+    "LAST_STRINGFREEZE_DATE": "2024-08-02",
+    "LATEST_FIREFOX_DEVEL_VERSION": "130.0b8",
+    "LATEST_FIREFOX_OLDER_VERSION": "3.6.28",
+    "LATEST_FIREFOX_RELEASED_DEVEL_VERSION": "130.0b8",
+    "LATEST_FIREFOX_VERSION": "129.0.2",
+    "NEXT_MERGE_DATE": "2024-09-02",
+    "NEXT_RELEASE_DATE": "2024-09-03",
+    "NEXT_SOFTFREEZE_DATE": "2024-08-29",
+    "NEXT_STRINGFREEZE_DATE": "2024-08-30"
+};
 const getLatestFF = async (product = config_1.SupportedProducts.Firefox) => {
     try {
-        const { data } = await axios_1.default.get('https://product-details.mozilla.org/1.0/firefox_versions.json');
-        return data[firefoxTargets[product]];
+        return staticData[firefoxTargets[product]];
     }
     catch (error) {
         log_1.log.warning('Failed to get latest firefox version with error:');

Well I just wanted to make sure if there is any use in the final derivation.

baduhai commented 2 months ago

Anyone else have the issue where the "add theme" button on the zen browser site does nothing when installing zen via the flake?

Go get help with the flake's author, not here.

Eveeifyeve commented 2 months ago

Hey I have ran into a problem as surfer is a required cli for zen which means 2 packages will need to be on nixpkgs. One surfer their cli, Two the browser.

Eveeifyeve commented 2 months ago

Hey I have done my best I could for now but if someone can give a package of the surfer cli then I can continue. Btw it uses pnpm instead of npm.

{lib, stdenv, pnpm, nodejs, fetchurl, fetchFromGitHub}:
let 
  firefox-version = "129.0.2";
  firefox-src = fetchurl {
    url = "mirror://mozilla/firefox/releases/${firefox-version}/source/firefox-${firefox-version}.source.tar.xz";
    hash = "sha512-9oBah+XLTkN1g5FuPsGzEtxz7sX8Bs56A4sTvXxoJ7GM84PDBkXZZiPOQWdTUfMCPsa5+J1nbxyImZTq558sEw==";
  };
in 
stdenv.mkDerivation rec { 
  pname = "zen-browser";
  version = "1.0.0-a.32";

  nativeBuildInputs = [
    pnpm.configHook
    nodejs
  ];

  src = fetchFromGitHub {
    owner = "zen-browser";
    repo = "desktop";
    rev = version;
    hash = "sha256-ryN+Ca0IIybnGWnlSCkstnYBfahvsU/XwR8V0VSB6KA=";
    fetchSubmodules = true;
  };

  pnpmDeps = pnpm.fetchDeps {
    pname = "${pname}-pnpm-deps";
    inherit src version;
    hash = "sha256-gVKWHxzCY89n2CJRCA2f5vlgmHSYgRsCK8sWKCLf5Hk=";
  };

  # Provides Firefox source required to build
  preBuild = ''
    mkdir -p .surfer/engine
    cp -r ${firefox-src} .surfer/engine/firefox-${firefox-version}.source.tar.xz
    pnpm run bootstrap && pnpm run import
  '';

  buildPhase = ''
    #TODO: Lanaguage Pack support
    # Build language Packs

    # Build Zen Browser
    pnpm build
  '';

  installPhase = ''
    #TODO: Find out where zen builds to.
  '';

  meta = with lib; {
    description = "A browser for the future";
    homepage = "";
    license = licenses.mpl20;
    platforms = platforms.all;
  };

}

just to note I just provided an example meta. When the package get's released it will be actual meta.

mattcoker commented 2 months ago

@Eveeifyeve Awesome work! Is there an open issue to reference for surfer cli?

Elias-Ainsworth commented 2 months ago

bumping this

eljamm commented 2 months ago

I was able to build surfer by itself, which we can use in the main package:

{
  lib,
  buildNpmPackage,
  fetchFromGitHub,
}:

buildNpmPackage {
  pname = "zen-surfer";
  version = "unstable-2024-08-26";

  src = fetchFromGitHub {
    owner = "zen-browser";
    repo = "surfer";
    rev = "22efae264dcba0afc36426c1b26f2be8f121848b";
    hash = "sha256-5hXOaEchXpaEu6wft/lGZPBHPYklyTQamDKUs81E3p8=";
  };

  # To fix `npm ERR! Your cache folder contains root-owned files`
  makeCacheWritable = true;

  npmDepsHash = "sha256-NGeaxU1LlrmOicL7NeeccXKvGg8pOc/W77e9lrhcx+c=";

  npmFlags = [ "--ignore-scripts" ];

  meta = {
    description = "Simplifying building firefox forks";
    homepage = "https://github.com/zen-browser/surfer";
    license = lib.licenses.mpl20;
    maintainers = [ ];
    mainProgram = "surfer";
    platforms = lib.platforms.all;
  };
}
Eveeifyeve commented 2 months ago

I was able to build surfer by itself, which we can use in the main package:

{
  lib,
  buildNpmPackage,
  fetchFromGitHub,
}:

buildNpmPackage {
  pname = "zen-surfer";
  version = "unstable-2024-08-26";

  src = fetchFromGitHub {
    owner = "zen-browser";
    repo = "surfer";
    rev = "22efae264dcba0afc36426c1b26f2be8f121848b";
    hash = "sha256-5hXOaEchXpaEu6wft/lGZPBHPYklyTQamDKUs81E3p8=";
  };

  # To fix `npm ERR! Your cache folder contains root-owned files`
  makeCacheWritable = true;

  npmDepsHash = "sha256-NGeaxU1LlrmOicL7NeeccXKvGg8pOc/W77e9lrhcx+c=";

  npmFlags = [ "--ignore-scripts" ];

  meta = {
    description = "Simplifying building firefox forks";
    homepage = "https://github.com/zen-browser/surfer";
    license = lib.licenses.mpl20;
    maintainers = [ ];
    mainProgram = "surfer";
    platforms = lib.platforms.all;
  };
}

I will try this to see if I can get it working.

Eveeifyeve commented 2 months ago

@Eveeifyeve Awesome work! Is there an open issue to reference for surfer cli?

I will open an issue in my repo to reference the cli.

Eveeifyeve commented 2 months ago

I was able to build surfer by itself, which we can use in the main package:

{
  lib,
  buildNpmPackage,
  fetchFromGitHub,
}:

buildNpmPackage {
  pname = "zen-surfer";
  version = "unstable-2024-08-26";

  src = fetchFromGitHub {
    owner = "zen-browser";
    repo = "surfer";
    rev = "22efae264dcba0afc36426c1b26f2be8f121848b";
    hash = "sha256-5hXOaEchXpaEu6wft/lGZPBHPYklyTQamDKUs81E3p8=";
  };

  # To fix `npm ERR! Your cache folder contains root-owned files`
  makeCacheWritable = true;

  npmDepsHash = "sha256-NGeaxU1LlrmOicL7NeeccXKvGg8pOc/W77e9lrhcx+c=";

  npmFlags = [ "--ignore-scripts" ];

  meta = {
    description = "Simplifying building firefox forks";
    homepage = "https://github.com/zen-browser/surfer";
    license = lib.licenses.mpl20;
    maintainers = [ ];
    mainProgram = "surfer";
    platforms = lib.platforms.all;
  };
}

I will improve the package like meta to include with lib and such and such.

Zh40Le1ZOOB commented 2 months ago

Hi, I'm working on it too. This is my drv:

{
  lib,
  buildNpmPackage,
  buildPackages,
  fetchFromGitHub,
  fetchurl,
  overrideCC,

  # build time
  autoconf,
  cargo,
  git,
  gnum4,
  nodejs,
  perl,
  pkg-config,
  pkgsBuildBuild,
  pkgsCross,
  python3,
  runCommand,
  rustc,
  rust-cbindgen,
  rustPlatform,
  unzip,
  vips,
  which,
  wrapGAppsHook3,

  # runtime
  alsa-lib,
  bzip2,
  dbus,
  dbus-glib,
  file,
  fontconfig,
  freetype,
  glib,
  gtk3,
  icu73,
  libGL,
  libGLU,
  libdrm,
  libevent,
  libffi,
  libjpeg,
  libpng,
  libpulseaudio,
  libstartup_notification,
  libvpx,
  libwebp,
  libxkbcommon,
  nasm,
  nspr,
  nss_latest,
  pango,
  xorg,
  zip,
  zlib,

  generic ? false,
}:
let
  surfer = buildNpmPackage {
    pname = "surfer";
    version = "1.3.5";

    src = fetchFromGitHub {
      owner = "zen-browser";
      repo = "surfer";
      rev = "22efae264dcba0afc36426c1b26f2be8f121848b";
      hash = "sha256-5hXOaEchXpaEu6wft/lGZPBHPYklyTQamDKUs81E3p8=";
    };

    patches = [ ./surfer-dont-check-update.patch ];

    npmDepsHash = "sha256-NGeaxU1LlrmOicL7NeeccXKvGg8pOc/W77e9lrhcx+c=";
    makeCacheWritable = true;

    SHARP_IGNORE_GLOBAL_LIBVIPS = false;
    nativeBuildInputs = [ pkg-config ];
    buildInputs = [ vips ];
  };

  llvmPackages0 = rustc.llvmPackages;
  llvmPackagesBuildBuild0 = pkgsBuildBuild.rustc.llvmPackages;

  llvmPackages = llvmPackages0.override {
    bootBintoolsNoLibc = null;
    bootBintools = null;
  };
  llvmPackagesBuildBuild = llvmPackagesBuildBuild0.override {
    bootBintoolsNoLibc = null;
    bootBintools = null;
  };

  buildStdenv = overrideCC llvmPackages.stdenv (
    llvmPackages.stdenv.cc.override { bintools = buildPackages.rustc.llvmPackages.bintools; }
  );

  wasiSysRoot = runCommand "wasi-sysroot" { } ''
    mkdir -p $out/lib/wasm32-wasi
    for lib in ${pkgsCross.wasi32.llvmPackages.libcxx}/lib/*; do
      ln -s $lib $out/lib/wasm32-wasi
    done
  '';

  mozconfig = ''
    ac_add_options --disable-bootstrap
    ac_add_options --with-libclang-path=${llvmPackagesBuildBuild.libclang.lib}/lib
    ac_add_options --with-wasi-sysroot=${wasiSysRoot}
  '';
in
buildStdenv.mkDerivation rec {
  pname = "zen-browser";
  version = "1.0.0-a.32";

  src = fetchFromGitHub {
    owner = "zen-browser";
    repo = "desktop";
    rev = version;
    leaveDotGit = true;
    hash = "sha256-4UZqJTH+HJ8UCl2FbaapTCEYMD47VjOCzEmNzrn/Q/E=";
  };

  firefoxVersion = (lib.importJSON "${src}/surfer.json").version.version;
  firefoxSrc = fetchurl {
    url = "mirror://mozilla/firefox/releases/${firefoxVersion}/source/firefox-${firefoxVersion}.source.tar.xz";
    hash = "sha256-NaHaEhr0dIM9AT7Lwfd6pVuzVnj+BtQ4hC0yDfqz80Q=";
  };

  SURFER_COMPAT = generic;
  ZEN_RELEASE = true;

  nativeBuildInputs = [
    autoconf
    cargo
    git
    gnum4
    llvmPackagesBuildBuild.bintools
    nodejs
    perl
    pkg-config
    python3
    rust-cbindgen
    rustPlatform.bindgenHook
    rustc
    surfer
    unzip
    which
    wrapGAppsHook3
  ];

  buildInputs = [
    alsa-lib
    bzip2
    dbus
    dbus-glib
    file
    fontconfig
    freetype
    glib
    gtk3
    icu73
    libGL
    libGLU
    libdrm
    libevent
    libffi
    libjpeg
    libpng
    libpulseaudio
    libstartup_notification
    libvpx
    libwebp
    libxkbcommon
    nasm
    nspr
    nss_latest
    pango
    perl
    xorg.libX11
    xorg.libXcursor
    xorg.libXdamage
    xorg.libXext
    xorg.libXft
    xorg.libXi
    xorg.libXrender
    xorg.libXt
    xorg.libXtst
    xorg.pixman
    xorg.xorgproto
    zip
    zlib
  ];

  preConfigure = ''
    export HOME=$TMPDIR
    git config --global user.email "nixbld@localhost"
    git config --global user.name "nixbld"
    install -D ${firefoxSrc} .surfer/engine/firefox-${firefoxVersion}.source.tar.xz
    surfer download
    surfer import
    rm -rf engine/obj-x86_64-pc-linux-gnu
    patchShebangs engine/mach engine/build
  '';

  configurePhase = ''
    runHook preConfigure

    export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
    export WASM_CC=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}cc
    export WASM_CXX=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}c++
    echo "${mozconfig}" > mozconfig

    runHook postConfigure
  '';

  buildPhase = ''
    runHook preBuild

    surfer build

    runHook postBuild
  '';

  preInstall = ''
    cd engine/objdir
  '';

  meta = {
    description = "Firefox based browser with a focus on privacy and customization";
    homepage = "https://www.zen-browser.app/";
    license = lib.licenses.mpl20;
    maintainers = [ ];
    mainProgram = "zen";
  };
}

surfer-dont-check-update.patch

But I keep getting a compile error:

00:22:03 21:46.07 error: failed to run custom build command for `webrender v0.62.0 (/build/source/engine/gfx/wr/webrender)`
00:22:03 21:46.07 note: To improve backtraces for build dependencies, set the CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_DEBUG=true environment variable to enable debug information generation.
00:22:03 21:46.07 Caused by:
00:22:03 21:46.07   process didn't exit successfully: `/build/source/engine/obj-x86_64-pc-linux-gnu/instrumented/release/build/webrender-b970e3a2973cd0b8/build-script-build` (signal: 4, SIGILL: illegal instruction)
Zh40Le1ZOOB commented 2 months ago

But I keep getting a compile error:

00:22:03 21:46.07 error: failed to run custom build command for `webrender v0.62.0 (/build/source/engine/gfx/wr/webrender)`
00:22:03 21:46.07 note: To improve backtraces for build dependencies, set the CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_DEBUG=true environment variable to enable debug information generation.
00:22:03 21:46.07 Caused by:
00:22:03 21:46.07   process didn't exit successfully: `/build/source/engine/obj-x86_64-pc-linux-gnu/instrumented/release/build/webrender-b970e3a2973cd0b8/build-script-build` (signal: 4, SIGILL: illegal instruction)

It seems https://github.com/zen-browser/desktop/blob/1.0.0-a.32/src/gfx/wr/webrender/src/picture-rs.patch causes build failure. I'v opened an issue in Zen Browser repo: https://github.com/zen-browser/desktop/issues/1070

MaxistheSpy commented 2 months ago

if the end result of this wound up working on macOS that would be great. there's currently no way to install zen via home-brew either.

heywoodlh commented 2 months ago

@MaxistheSpy I have a working MacOS implementation here to tide you over if desired: https://github.com/heywoodlh/flakes/tree/main/zen-browser

I plan on contributing MacOS support to the very nice Zen-Browser flake mentioned earlier in this thread but haven't added it yet.

Eveeifyeve commented 2 months ago

@MaxistheSpy I have a working MacOS implementation here to tide you over if desired: https://github.com/heywoodlh/flakes/tree/main/zen-browser

I plan on contributing MacOS support to the very nice Zen-Browser flake mentioned earlier in this thread but haven't added it yet.

Well I would say building from source will be better, as nix expects if you can build from source, then do it.

Eveeifyeve commented 2 months ago

Hi, I'm working on it too. This is my drv:

{
  lib,
  buildNpmPackage,
  buildPackages,
  fetchFromGitHub,
  fetchurl,
  overrideCC,

  # build time
  autoconf,
  cargo,
  git,
  gnum4,
  nodejs,
  perl,
  pkg-config,
  pkgsBuildBuild,
  pkgsCross,
  python3,
  runCommand,
  rustc,
  rust-cbindgen,
  rustPlatform,
  unzip,
  vips,
  which,
  wrapGAppsHook3,

  # runtime
  alsa-lib,
  bzip2,
  dbus,
  dbus-glib,
  file,
  fontconfig,
  freetype,
  glib,
  gtk3,
  icu73,
  libGL,
  libGLU,
  libdrm,
  libevent,
  libffi,
  libjpeg,
  libpng,
  libpulseaudio,
  libstartup_notification,
  libvpx,
  libwebp,
  libxkbcommon,
  nasm,
  nspr,
  nss_latest,
  pango,
  xorg,
  zip,
  zlib,

  generic ? false,
}:
let
  surfer = buildNpmPackage {
    pname = "surfer";
    version = "1.3.5";

    src = fetchFromGitHub {
      owner = "zen-browser";
      repo = "surfer";
      rev = "22efae264dcba0afc36426c1b26f2be8f121848b";
      hash = "sha256-5hXOaEchXpaEu6wft/lGZPBHPYklyTQamDKUs81E3p8=";
    };

    patches = [ ./surfer-dont-check-update.patch ];

    npmDepsHash = "sha256-NGeaxU1LlrmOicL7NeeccXKvGg8pOc/W77e9lrhcx+c=";
    makeCacheWritable = true;

    SHARP_IGNORE_GLOBAL_LIBVIPS = false;
    nativeBuildInputs = [ pkg-config ];
    buildInputs = [ vips ];
  };

  llvmPackages0 = rustc.llvmPackages;
  llvmPackagesBuildBuild0 = pkgsBuildBuild.rustc.llvmPackages;

  llvmPackages = llvmPackages0.override {
    bootBintoolsNoLibc = null;
    bootBintools = null;
  };
  llvmPackagesBuildBuild = llvmPackagesBuildBuild0.override {
    bootBintoolsNoLibc = null;
    bootBintools = null;
  };

  buildStdenv = overrideCC llvmPackages.stdenv (
    llvmPackages.stdenv.cc.override { bintools = buildPackages.rustc.llvmPackages.bintools; }
  );

  wasiSysRoot = runCommand "wasi-sysroot" { } ''
    mkdir -p $out/lib/wasm32-wasi
    for lib in ${pkgsCross.wasi32.llvmPackages.libcxx}/lib/*; do
      ln -s $lib $out/lib/wasm32-wasi
    done
  '';

  mozconfig = ''
    ac_add_options --disable-bootstrap
    ac_add_options --with-libclang-path=${llvmPackagesBuildBuild.libclang.lib}/lib
    ac_add_options --with-wasi-sysroot=${wasiSysRoot}
  '';
in
buildStdenv.mkDerivation rec {
  pname = "zen-browser";
  version = "1.0.0-a.32";

  src = fetchFromGitHub {
    owner = "zen-browser";
    repo = "desktop";
    rev = version;
    leaveDotGit = true;
    hash = "sha256-4UZqJTH+HJ8UCl2FbaapTCEYMD47VjOCzEmNzrn/Q/E=";
  };

  firefoxVersion = (lib.importJSON "${src}/surfer.json").version.version;
  firefoxSrc = fetchurl {
    url = "mirror://mozilla/firefox/releases/${firefoxVersion}/source/firefox-${firefoxVersion}.source.tar.xz";
    hash = "sha256-NaHaEhr0dIM9AT7Lwfd6pVuzVnj+BtQ4hC0yDfqz80Q=";
  };

  SURFER_COMPAT = generic;
  ZEN_RELEASE = true;

  nativeBuildInputs = [
    autoconf
    cargo
    git
    gnum4
    llvmPackagesBuildBuild.bintools
    nodejs
    perl
    pkg-config
    python3
    rust-cbindgen
    rustPlatform.bindgenHook
    rustc
    surfer
    unzip
    which
    wrapGAppsHook3
  ];

  buildInputs = [
    alsa-lib
    bzip2
    dbus
    dbus-glib
    file
    fontconfig
    freetype
    glib
    gtk3
    icu73
    libGL
    libGLU
    libdrm
    libevent
    libffi
    libjpeg
    libpng
    libpulseaudio
    libstartup_notification
    libvpx
    libwebp
    libxkbcommon
    nasm
    nspr
    nss_latest
    pango
    perl
    xorg.libX11
    xorg.libXcursor
    xorg.libXdamage
    xorg.libXext
    xorg.libXft
    xorg.libXi
    xorg.libXrender
    xorg.libXt
    xorg.libXtst
    xorg.pixman
    xorg.xorgproto
    zip
    zlib
  ];

  preConfigure = ''
    export HOME=$TMPDIR
    git config --global user.email "nixbld@localhost"
    git config --global user.name "nixbld"
    install -D ${firefoxSrc} .surfer/engine/firefox-${firefoxVersion}.source.tar.xz
    surfer download
    surfer import
    rm -rf engine/obj-x86_64-pc-linux-gnu
    patchShebangs engine/mach engine/build
  '';

  configurePhase = ''
    runHook preConfigure

    export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
    export WASM_CC=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}cc
    export WASM_CXX=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}c++
    echo "${mozconfig}" > mozconfig

    runHook postConfigure
  '';

  buildPhase = ''
    runHook preBuild

    surfer build

    runHook postBuild
  '';

  preInstall = ''
    cd engine/objdir
  '';

  meta = {
    description = "Firefox based browser with a focus on privacy and customization";
    homepage = "https://www.zen-browser.app/";
    license = lib.licenses.mpl20;
    maintainers = [ ];
    mainProgram = "zen";
  };
}

surfer-dont-check-update.patch

But I keep getting a compile error:

00:22:03 21:46.07 error: failed to run custom build command for `webrender v0.62.0 (/build/source/engine/gfx/wr/webrender)`
00:22:03 21:46.07 note: To improve backtraces for build dependencies, set the CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_DEBUG=true environment variable to enable debug information generation.
00:22:03 21:46.07 Caused by:
00:22:03 21:46.07   process didn't exit successfully: `/build/source/engine/obj-x86_64-pc-linux-gnu/instrumented/release/build/webrender-b970e3a2973cd0b8/build-script-build` (signal: 4, SIGILL: illegal instruction)

I will look into trying to solve issues with this.

mauro-balades commented 2 months ago

Hi, im zen's creator. I just wanted to say that

    runHook preConfigure

    export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE=system
    export WASM_CC=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}cc
    export WASM_CXX=${pkgsCross.wasi32.stdenv.cc}/bin/${pkgsCross.wasi32.stdenv.cc.targetPrefix}c++
    echo "${mozconfig}" > mozconfig

    runHook postConfigure

is not being applied because it's appending to mozconfig (that doesn't exist) and surfer build overrides. I suggest adding it to the common/mozconfig file... but again, I dont know anything about nix so I may be wrong

Zh40Le1ZOOB commented 2 months ago

Sorry for late.

is not being applied because it's appending to mozconfig (that doesn't exist) and surfer build overrides.

It's actually applies, mozconfig was defined at

mozconfig = ''
  ac_add_options --disable-bootstrap
  ac_add_options --with-libclang-path=${llvmPackagesBuildBuild.libclang.lib}/lib
  ac_add_options --with-wasi-sysroot=${wasiSysRoot}
'';

And there is a customConfig in Surfer's build command that reads a mozconfig in $pwd

// Allow a custom config to be placed in /mozconfig. This will not be committed
// to origin
let customConfig = existsSync(join(process.cwd(), 'mozconfig'))
  ? readFileSync(join(process.cwd(), 'mozconfig')).toString()
  : ''

https://github.com/zen-browser/surfer/blob/main/src/commands/build.ts#L70-L74

echo ${mozconfig} > mozconfig will write mozconfig to ./mozconfig, so it works fine.

Anifyuli commented 2 months ago

I love Zen browser can installed as Nixpkgs soon as possible. Bumping ...

Eveeifyeve commented 1 month ago

I love Zen browser can installed as Nixpkgs soon as possible. Bumping ...

Well unfortunately tools like this can take a long time to be available on nixpkgs. So I don't know what your insertions are.

Zh40Le1ZOOB commented 1 month ago

But I keep getting a compile error:

00:22:03 21:46.07 error: failed to run custom build command for `webrender v0.62.0 (/build/source/engine/gfx/wr/webrender)`
00:22:03 21:46.07 note: To improve backtraces for build dependencies, set the CARGO_PROFILE_RELEASE_BUILD_OVERRIDE_DEBUG=true environment variable to enable debug information generation.
00:22:03 21:46.07 Caused by:
00:22:03 21:46.07   process didn't exit successfully: `/build/source/engine/obj-x86_64-pc-linux-gnu/instrumented/release/build/webrender-b970e3a2973cd0b8/build-script-build` (signal: 4, SIGILL: illegal instruction)

It seems https://github.com/zen-browser/desktop/blob/1.0.0-a.32/src/gfx/wr/webrender/src/picture-rs.patch causes build failure. I'v opened an issue in Zen Browser repo: zen-browser/desktop#1070

Update: Error disappears once I bumped to 1.0.0-a.34. But I get into a new trouble now.

With my new drv, build will stucks with following logs:

00:26:16 console.warn: services.settings: Ignoring preference override of remote settings server
00:26:16 console.warn: services.settings: Allow by setting MOZ_REMOTE_SETTINGS_DEVTOOLS=1 in the environment
00:26:17 Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing (t=0.407796) [GFX1-]: glxtest: libEGL missing
00:26:17 Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing (t=0.407796) |[1][GFX1-]: glxtest: libGL.so.1 missing (t=0.407796) [GFX1-]: glxtest: libGL.so.1 missing
00:26:17 Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing (t=0.407796) |[1][GFX1-]: glxtest: libGL.so.1 missing (t=0.407796) |[2][GFX1-]: No GPUs detected via PCI
00:26:17  (t=0.407796) [GFX1-]: No GPUs detected via PCI
00:26:17 console.error: (new TypeError("NetworkError: Network request failed", "resource://services-settings/Utils.sys.mjs", 236))
00:26:17 console.error: (new TypeError("NetworkError: Network request failed", "resource://services-settings/Utils.sys.mjs", 236))
00:26:17 JavaScript error: resource://gre/modules/ShortcutUtils.sys.mjs, line 142: TypeError: keyAttribute is null
00:26:17 console.info: "ZenThemeImporter: Initiating Zen theme importer"
00:26:17 console.info: "ZenThemeImporter: Zen theme imported"
00:26:17 console.info: "ZenWorkspaces: Initializing ZenWorkspaces..."
00:26:17 JavaScript error: chrome://browser/content/tabbrowser/tabbrowser.js, line 6115: TypeError: this.selectedBrowser is undefined
00:26:17 JavaScript error: , line 0: uncaught exception: undefined
00:26:17 JavaScript error: , line 0: uncaught exception: undefined
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: resource:///modules/sessionstore/SessionStore.sys.mjs, line 2749: TypeError: browser is undefined
00:26:17 console.info: "ZenThemeModifier: init browser layout"
00:26:17 console.info: "Zen CKS: Initializing shortcuts"
00:26:17 console.info: "Zen CKS: Shortcut changed"
00:26:17 JavaScript error: chrome://browser/content/tabbrowser/tabbrowser.js, line 6122: TypeError: this.selectedTab is undefined
00:26:17 Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing (t=0.407796) |[1][GFX1-]: glxtest: libGL.so.1 missing (t=0.407796) |[2][GFX1-]: No GPUs detected via PCI
00:26:17  (t=0.407796) |[3][GFX1-]: Failed GL context creation for WebRender: 0 (t=0.94779) [GFX1-]: Failed GL context creation for WebRender: 0
00:26:17 Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing (t=0.407796) |[1][GFX1-]: glxtest: libGL.so.1 missing (t=0.407796) |[2][GFX1-]: No GPUs detected via PCI
00:26:17  (t=0.407796) |[3][GFX1-]: Failed GL context creation for WebRender: 0 (t=0.94779) |[4][GFX1-]: FEATURE_FAILURE_WEBRENDER_INITIALIZE_UNSPECIFIED (t=0.94779) [GFX1-]: FEATURE_FAILURE_WEBRENDER_INITIALIZE_UNSPECIFIED
00:26:17 Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing (t=0.407796) |[1][GFX1-]: glxtest: libGL.so.1 missing (t=0.407796) |[2][GFX1-]: No GPUs detected via PCI
00:26:17  (t=0.407796) |[3][GFX1-]: Failed GL context creation for WebRender: 0 (t=0.94779) |[4][GFX1-]: FEATURE_FAILURE_WEBRENDER_INITIALIZE_UNSPECIFIED (t=0.94779) |[5][GFX1-]: Failed to connect WebRenderBridgeChild. isParent=true (t=0.94779) [GFX1-]: Failed to connect WebRenderBridgeChild. isParent=true
00:26:17 Crash Annotation GraphicsCriticalError: |[0][GFX1-]: glxtest: libEGL missing (t=0.407796) |[1][GFX1-]: glxtest: libGL.so.1 missing (t=0.407796) |[2][GFX1-]: No GPUs detected via PCI
00:26:17  (t=0.407796) |[3][GFX1-]: Failed GL context creation for WebRender: 0 (t=0.94779) |[4][GFX1-]: FEATURE_FAILURE_WEBRENDER_INITIALIZE_UNSPECIFIED (t=0.94779) |[5][GFX1-]: Failed to connect WebRenderBridgeChild. isParent=true (t=0.94779) |[6][GFX1-]: Fallback WR to SW-WR (t=0.94879) [GFX1-]: Fallback WR to SW-WR
00:26:17 JavaScript error: resource:///modules/ReportBrokenSite.sys.mjs, line 389: TypeError: tabbrowser.selectedBrowser is undefined
00:26:17 JavaScript error: chrome://browser/content/tabbrowser/tabbrowser.js, line 6115: TypeError: this.selectedBrowser is undefined
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: , line 0: TypeError: NetworkError when attempting to fetch resource.
00:26:17 JavaScript error: resource:///modules/UrlbarInput.sys.mjs, line 1987: TypeError: WeakMap key undefined must be an object
00:26:18 console.info: "ZenThemeModifier: set tabs max-height to" "378px"

It just keep stuck and doing nothing, I don't know how to deal with this yet.