Compare commits

...

116 Commits

Author SHA1 Message Date
Mauro Balades
2d72365dbd chore: Update ZenUIManager and Zen browser theme 2024-08-05 01:06:01 +02:00
Mauro Balades
d61186a042 chore: Update StartupWMClass to zen-alpha in zen.desktop 2024-08-05 00:45:23 +02:00
Mauro Balades
33ba2f25cd chore: Update flatpak release process 2024-08-05 00:15:59 +02:00
Mauro Balades
3e4d69a012 chore: Update flatpak release process 2024-08-05 00:10:53 +02:00
Mauro Balades
c27f4767db chore: Update Python version to 3.x 2024-08-04 23:39:18 +02:00
Mauro Balades
6740a7a610 chore: Update flatpak release process 2024-08-04 23:10:24 +02:00
Mauro Balades
c00eb07484 test 2024-08-04 23:03:59 +02:00
Mauro Balades
1b72b68a47 test 2024-08-04 22:46:40 +02:00
Mauro Balades
0ac10f2c03 chore: Update flatpak release process 2024-08-04 22:45:05 +02:00
Mauro Balades
0b824acd20 test 2024-08-04 22:31:11 +02:00
Mauro Balades
b37b2e656a Fixed flatpak 2024-08-04 22:30:16 +02:00
Mauro Balades
36d6abda0d chore: Update flatpak release process 2024-08-04 21:50:36 +02:00
Mauro Balades
07893e79fe test 2024-08-04 21:47:50 +02:00
Mauro Balades
d8a9cabb2b chore: Update flatpak release process 2024-08-04 21:46:52 +02:00
Mauro Balades
9729f8d84e test 2024-08-04 21:37:04 +02:00
Mauro Balades
641c709f5d test 4 2024-08-04 21:34:09 +02:00
Mauro Balades
be45bdb83f test 3 2024-08-04 21:14:09 +02:00
Mauro Balades
2773bd4850 Merge branch 'main' of https://github.com/zen-browser/core 2024-08-04 21:12:03 +02:00
Mauro Balades
a0e95e7748 chore: Update flatpak release process
```
2024-08-04 21:11:58 +02:00
mauro 🤙
b90e50ed87 Merge pull request #159 from Veriiix/patch-2
Update performance.md
2024-08-04 21:00:23 +02:00
Jannik
9c8b0081c0 Update performance.md 2024-08-04 20:59:22 +02:00
Mauro Balades
bb1cd6097b test 3 2024-08-04 20:49:30 +02:00
Mauro Balades
1496f3addc test 2 2024-08-04 20:46:37 +02:00
Mauro Balades
a2bd16a210 test build 2024-08-04 20:42:53 +02:00
Mauro Balades
26e158072e chore: Created automatic flatpak releases 2024-08-04 20:40:28 +02:00
Mauro Balades
84a5f05eb6 Merge branch 'main' of https://github.com/zen-browser/core 2024-08-04 20:10:02 +02:00
Mauro Balades
79967edb22 Fixed customize mode 2024-08-04 20:09:57 +02:00
mauro 🤙
53644a4ba0 Merge pull request #153 from NOCanoa/main
👀 v2 xD
2024-08-04 18:34:25 +02:00
NOCanoa
01df43fdc5 Update performance.md 2024-08-04 17:08:14 +01:00
NOCanoa
b524ec7569 Update performance.md 2024-08-04 17:05:53 +01:00
NOCanoa
eea0a8aee7 Merge branch 'main' of https://github.com/NOCanoa/desktop-zen 2024-08-04 16:52:14 +01:00
Mauro Balades
498c909756 Improved performance 2024-08-04 14:09:36 +02:00
Mauro Balades
661dcbb9f9 Update welcome dialog thanks message 2024-08-04 13:34:57 +02:00
mauro-balades
c2e8b2790c 🔖 Update version to 1.0.0-a.12 2024-08-04 11:03:20 +00:00
Mauro Balades
14da8cd9e7 chore: Update sidebar close-on-blur preference handling 2024-08-04 13:02:25 +02:00
Mauro Balades
741cfd7af4 chore: Update mozconfig to allow loading unsigned extensions 2024-08-04 12:46:52 +02:00
Mauro Balades
fa6911df5e chore: Update backdrop-filter blur value in zen-browser-shared.css 2024-08-04 12:41:23 +02:00
Mauro Balades
4e61ab5e98 chore: Update ZenSidebarManager to fix panel handling and data persistence 2024-08-04 12:27:44 +02:00
Mauro Balades
3900908ed7 Fixed pinned tabs 2024-08-04 12:01:13 +02:00
Mauro Balades
3cd21f5516 Reworked on compact mode 2024-08-04 11:53:47 +02:00
Mauro Balades
29411d02d5 chore: Update padding for searchList cards in welcome.css 2024-08-04 11:21:37 +02:00
Mauro Balades
ab5cf96bf1 Merge branch 'main' of https://github.com/zen-browser/core 2024-08-04 11:04:41 +02:00
Mauro Balades
d60d4e888a chore: Update Windows build configuration with WebAssembly optimizations, also added persistent storage for sidebar 2024-08-04 11:04:34 +02:00
mauro 🤙
9998f93942 Update zenThemeModifier.js 2024-08-04 00:34:27 +02:00
Mauro Balades
76b2b55eda chore: Update padding for searchList cards in welcome.css 2024-08-03 22:48:14 +02:00
Mauro Balades
b224616b43 chore: Update macOS build configuration with optimized flags 2024-08-03 22:02:20 +02:00
Mauro Balades
236c4160fc chore: Update performance test results with latest version 2024-08-03 21:40:15 +02:00
Mauro Balades
7e3c44846d chore: Update performance test results with latest version 2024-08-03 20:33:50 +02:00
Mauro Balades
b1709c757a chore: Update arrow panel menu item margin in panelUI-shared.css 2024-08-03 19:57:54 +02:00
Mauro Balades
65841d2085 chore: Update artifact names and paths in build workflows 2024-08-03 19:46:08 +02:00
NOCanoa
58f18098f7 Update Performance.md 2024-08-03 18:41:48 +01:00
NOCanoa
e31d49ec36 Update Performance.md 2024-08-03 18:39:43 +01:00
Mauro Balades
3454ca6336 chore: Update artifact names and paths in build workflows 2024-08-03 15:29:52 +02:00
Mauro Balades
bd5c242c8c chore: Update welcome page with gradient background and noise effect 2024-08-03 14:00:55 +02:00
Mauro Balades
86f8b91fdb chore: Update macOS options in bug report template 2024-08-03 12:05:58 +02:00
Mauro Balades
3d57cff39b chore: Update landing page with Flathub badge 2024-08-03 10:34:38 +02:00
Mauro Balades
7b40eba9b7 chore: Remove swap space configuration from macOS alpha build workflow 2024-08-03 10:25:52 +02:00
Mauro Balades
57ac6c1b37 chore: Set swap space for macOS alpha build workflow 2024-08-03 10:17:05 +02:00
Mauro Balades
d7630b258a Refactor build workflows to improve artifact naming and paths 2024-08-03 10:15:57 +02:00
Mauro Balades
0883536f75 feat: Add overflow hidden and transition to navbar container 2024-08-03 07:46:26 +02:00
Mauro Balades
6e2b4b17e6 chore: Update artifact names and paths in build workflows 2024-08-03 07:40:32 +02:00
Mauro Balades
38e4a7150c chore: Update mozconfig to disable profile generation and use cross profile for Windows builds 2024-08-03 00:40:45 +02:00
mauro 🤙
052774c5c3 Merge pull request #137 from NOCanoa/main
emty line removed
2024-08-02 20:46:20 +02:00
NOCanoa
18055e09d9 emty line removed 2024-08-02 19:44:55 +01:00
mauro-balades
e24dcdb6ac 🔖 Update version to 1.0.0-a.11 2024-08-02 15:16:29 +00:00
Mauro Balades
e3774d666f chore: Update mozconfig to disable profile generation and use cross profile for Windows builds 2024-08-02 17:14:11 +02:00
Mauro Balades
ec1eef6159 chore: Disable deleteMenuItem for default workspaces in ZenWorkspaces.mjs 2024-08-02 17:07:52 +02:00
Mauro Balades
6862e6cbc6 chore: Update sidebar-expanded max-width preference and UI styling 2024-08-02 17:05:43 +02:00
Mauro Balades
639806e13f chore: Update workflows to include check-release job in alpha.yml 2024-08-02 16:36:18 +02:00
Mauro Balades
ef01c86d7c chore: Update CSS class name for titlebar button container 2024-08-02 15:10:18 +02:00
Mauro Balades
e32d9cad92 chore: Update workflows to include check-release job in alpha.yml 2024-08-02 15:07:14 +02:00
mauro 🤙
3b5e401899 Merge pull request #133 from bdbch/bdbch/fix-issue-template
Remove broken labels key in bug_report issue template
2024-08-02 14:25:40 +02:00
bdbch
3bfdb7e3db Remove broken labels key in bug_report issue template 2024-08-02 14:18:54 +02:00
Mauro Balades
e567dee12f Fixed windows alpha workflow 2024-08-02 13:28:29 +02:00
Mauro Balades
c55fadc889 chore: Update build configurations to enable AVX optimization for different architectures 2024-08-02 13:27:02 +02:00
Mauro Balades
33d2954e93 chore: Remove multiple option from platform label in feature request template 2024-08-02 11:28:58 +02:00
Mauro Balades
9304b51391 chore: Update feature request template 2024-08-02 11:23:49 +02:00
Mauro Balades
0347ead8a1 chore: Remove unused focus ring preferences in zen-browser.js 2024-08-02 11:13:28 +02:00
Mauro Balades
9fd9883c8f chore: Update .github/ISSUE_TEMPLATE/bug_report.yml to remove labels 2024-08-02 11:12:22 +02:00
Mauro Balades
01e99f6f3d chore: Update .github/ISSUE_TEMPLATE/config.yml to disable blank issues 2024-08-02 11:11:43 +02:00
Mauro Balades
259072a5e5 chore: Add workflow to clear cache 2024-08-02 10:58:35 +02:00
Mauro Balades
5079bb6364 chore: Remove unused include statement in zen-browser.js 2024-08-02 10:55:17 +02:00
Mauro Balades
37bc8f5f65 chore: Update macOS build configuration to enable install strip and strip debug symbols 2024-08-02 10:47:01 +02:00
Mauro Balades
4f97d66443 chore: Update welcome page CSS and build configurations 2024-08-02 09:19:32 +02:00
Mauro Balades
8e19e74894 chore: Update build configurations to enable AVX optimization for different architectures 2024-08-02 09:11:57 +02:00
Mauro Balades
babc34cc90 chore: Remove .DirIcon file from AppDir in alpha.yml workflow 2024-08-02 08:38:27 +02:00
Mauro Balades
c2f97454ac chore: Update macOS build configuration to enable install strip and strip debug symbols 2024-08-02 08:36:48 +02:00
Mauro Balades
7de872b4dd chore: Disable LTO in macOS build configuration 2024-08-02 00:51:59 +02:00
Mauro Balades
dc5992bdc7 chore: Update Linux build artifact name to include generic or specific based on matrix value 2024-08-02 00:28:12 +02:00
Mauro Balades
453c9fef53 chore: Update CSS and build configurations for welcome page 2024-08-02 00:23:13 +02:00
Mauro Balades
5d946db186 chore: Update welcome page CSS and build configurations 2024-08-01 22:10:58 +02:00
Mauro Balades
406f11dd9a chore: Update dependencies and build configurations for compatibility with x32 architecture 2024-08-01 22:04:34 +02:00
Mauro Balades
be1efb2ac5 chore: Separated mac icons to windows/linux 2024-08-01 20:32:03 +02:00
Mauro Balades
6c4b3aa6f9 chore: Update build configurations to enable install strip and strip debug symbols 2024-08-01 19:51:37 +02:00
Mauro Balades
2975d5c645 chore: Update Windows build configuration to support x32 architecture 2024-08-01 18:48:16 +02:00
Mauro Balades
97ce6bae00 chore: Update Windows build configuration to install dos2unix 2024-08-01 18:29:10 +02:00
Mauro Balades
b659bfd5e6 chore: Update Windows build configuration to fix dos2unix issue 2024-08-01 18:12:02 +02:00
Mauro Balades
81f88c2c21 chore: Update Windows build configuration for compatibility with x32 architecture 2024-08-01 18:10:47 +02:00
Mauro Balades
5bbbefb2a7 chore: Update Windows build configuration for compatibility with x32 architecture 2024-08-01 17:08:46 +02:00
Mauro Balades
ea5c42674e chore: Update bug report and feature request templates 2024-08-01 16:25:44 +02:00
Mauro Balades
ad2e2f6b24 chore: Add compatibility install step for x32 architecture 2024-08-01 16:10:53 +02:00
Mauro Balades
3333fe22d2 chore: Update build configurations for Linux, macOS, and Windows 2024-08-01 15:44:41 +02:00
Mauro Balades
349b33c115 chore: Update build configurations for Linux, macOS, and Windows 2024-08-01 15:08:54 +02:00
Mauro Balades
2c0b34e666 chore: Update macOS build matrix to include different architectures and OS versions 2024-08-01 14:17:25 +02:00
Mauro Balades
84bc2c3c89 Merge branch 'main' of https://github.com/zen-browser/core 2024-08-01 14:15:48 +02:00
Mauro Balades
2927b58924 Here we go! 2024-08-01 14:15:43 +02:00
mauro 🤙
a6aa7e3eae Merge pull request #118 from NOCanoa/main
Another update xD
2024-07-31 23:04:50 +02:00
mauro 🤙
d67e1e5b3e Merge pull request #119 from Veriiix/patch-1
Added Speedometer3.0 scores
2024-07-31 23:04:25 +02:00
Jannik
09b808b18a Added Speedometer3.0 scores 2024-07-31 21:04:18 +02:00
NOCanoa
deaa0e2781 Merge branch 'zen-browser:main' into main 2024-07-31 19:57:40 +01:00
NOCanoa
3140931cdb Update Performance.md 2024-07-31 19:56:37 +01:00
mauro 🤙
084d70e68d Merge pull request #117 from NOCanoa/main
Aded the performance.md
2024-07-31 20:11:49 +02:00
NOCanoa
ac3df15a57 Merge branch 'zen-browser:main' into main 2024-07-31 19:08:52 +01:00
NOCanoa
6688fff000 Create Performance.md 2024-07-31 19:08:27 +01:00
mauro 🤙
33ff028509 Merge pull request #116 from Samueru-sama/patch-1
`alpha.yml` fix missing .DirIcon in AppImage
2024-07-31 20:03:23 +02:00
Samuel
e2ca345dea alpha.yml fix missing .DirIcon in AppImage 2024-07-31 13:27:15 -04:00
70 changed files with 1300 additions and 1331 deletions

View File

@@ -1,6 +1,5 @@
name: Bug Report
name: Bug Report Or Feature Request
description: File a bug report
labels: [bug]
body:
- type: markdown
attributes:
@@ -51,7 +50,8 @@ body:
multiple: true
options:
- Linux
- macOS
- macOS - aarch64
- macOS - Intel
- Windows
validations:
required: true

View File

@@ -1 +1 @@
blank_issues_enabled: true
blank_issues_enabled: false

View File

@@ -1,20 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: feature_request
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -0,0 +1,32 @@
name: Feature Request
description: File a feature request
labels:
- "kind: enhancement"
body:
- type: markdown
attributes:
value: |
Thank you for filing a feature request.
- type: textarea
id: what-happened
attributes:
label: What feature would you like to see?
description: Please describe the feature you would like to see.
placeholder: Tell us what you would like to see!
validations:
required: true
- type: dropdown
id: platform
attributes:
label: What platform are you seeing the problem on?
options:
- Linux
- macOS
- Windows
validations:
required: true
- type: textarea
id: logs
attributes:
label: Additional context
description: Add any other context about the feature request here.

View File

@@ -128,7 +128,7 @@ jobs:
permissions:
contents: write
runs-on: ubuntu-latest
needs: [build-data]
needs: [build-data, check-release]
steps:
- name: Install Node.js
@@ -229,10 +229,13 @@ jobs:
build-version: ${{ needs.build-data.outputs.version }}
appimage:
name: AppImage build
name: AppImage build - Linux ${{ matrix.generic == true && 'generic' || 'specific' }}
permissions:
contents: write
runs-on: ubuntu-latest
strategy:
matrix:
generic: [true, false]
needs: [linux]
steps:
- name: Install Node.js
@@ -251,13 +254,14 @@ jobs:
- name: Download linux build
uses: actions/download-artifact@v4
with:
name: zen.linux.tar.bz2
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
- name: Execute AppImage build
run: |
set -eux
rm AppDir/.DirIcon || true
cp configs/branding/alpha/logo128.png AppDir/usr/share/icons/hicolor/128x128/apps/zen.png
cp configs/branding/alpha/logo128.png AppDir/zen.png
cp configs/branding/alpha/logo128.png AppDir/zen.png && ln -s zen.png AppDir/.DirIcon
APPDIR=AppDir
tar -xvf *.tar.* && rm -rf *.tar.*
@@ -272,12 +276,13 @@ jobs:
ARCH=x86_64 ./appimagetool-x86_64.AppImage --comp gzip "$APPDIR" zen.AppImage
mkdir dist
mv zen.AppImage* dist/.
mv ./dist/zen.AppImage ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: zen.AppImage
path: ./dist/zen.AppImage
name: zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
path: ./dist/zen-${{ matrix.generic == true && 'generic' || 'specific' }}.AppImage
release:
if: ${{ github.event.inputs.create_release == 'true' }}
@@ -309,9 +314,14 @@ jobs:
run: |
cd updates-server
mkdir -p updates
cp -a ../linux_update_manifest/. updates/
cp -a ../windows_update_manifest/. updates/
cp -a ../macos_update_manifest/. updates/
cp -a ../linux_update_manifest_generic/. updates/
cp -a ../linux_update_manifest_specific/. updates/
cp -a ../windows_update_manifest_generic/. updates/
cp -a ../windows_update_manifest_specific/. updates/
cp -a ../macos_update_manifest_aarch64/. updates/
cp -a ../macos_update_manifest_x64/. updates/
- uses: stefanzweifel/git-auto-commit-action@v4
with:
@@ -328,13 +338,100 @@ jobs:
prerelease: false
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
files: |
zen.linux.tar.bz2
zen.win64.zip
zen.source.tar.gz
zen.linux-generic.tar.bz2
zen.linux-specific.tar.bz2
zen-generic.AppImage
zen-specific.AppImage
zen.win-generic.zip
zen.win-specific.zip
linux.mar
linux-generic.mar
windows.mar
macos.mar
windows-generic.mar
macos-x64.mar
macos-aarch64.mar
zen.installer.exe
zen.installer.pretty.exe
zen.macos.dmg
zen.AppImage
zen.installer-generic.exe
zen.macos-x64.dmg
zen.macos-aarch64.dmg
release-flatpak:
if: ${{ github.event.inputs.create_release == 'true' }}
permissions: write-all
name: Release Flatpak
needs: [release, linux, build-data]
runs-on: ubuntu-latest
steps:
- name: Clone flatpak repo
uses: actions/checkout@v4
with:
repository: flathub/io.github.zen_browser.zen
token: ${{ secrets.DEPLOY_KEY }}
- name: Download linux generic build
uses: actions/download-artifact@v4
with:
name: zen.linux-generic.tar.bz2
- name: Update repo
uses: actions/checkout@v4
with:
path: zen-browser
token: ${{ secrets.DEPLOY_KEY }}
- name: Download flatpak archive
run: |
wget https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar -O archive.tar
- name: Setup git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
- name: Prepare flatpak manifest
run: |
python3 ./zen-browser/scripts/prepare-flatpak-release.py \
--flatpak-archive archive.tar \
--version ${{ needs.build-data.outputs.version }} \
--linux-archive zen.linux-generic.tar.bz2 \
--output io.github.zen_browser.zen.yml \
--template-root ./zen-browser/flatpak
- name: Commit changes
run: |
git add io.github.zen_browser.zen.yml
git commit -m "Update to version ${{ needs.build-data.outputs.version }}"
- name: Clean up
run: |
rm -rf zen-browser
rm -rf archive.tar
rm -rf zen.linux-generic.tar.bz2
- name: Upload flatpak manifest
uses: actions/upload-artifact@v4
with:
name: io.github.zen_browser.zen.yml
path: ./io.github.zen_browser.zen.yml
- name: Create pull request
uses: peter-evans/create-pull-request@v6
env:
GIT_TRACE: 1
GIT_CURL_VERBOSE: 1
with:
token: ${{ secrets.DEPLOY_KEY }}
commit-message: 🚀 Update to version ${{ needs.build-data.outputs.version }}
title: 🚀 Update to version ${{ needs.build-data.outputs.version }}
body: |
This PR updates the Zen Browser Flatpak package to version ${{ needs.build-data.outputs.version }}.
@mauro-balades
branch: update-to-${{ needs.build-data.outputs.version }}
base: master
git-token: ${{ secrets.DEPLOY_KEY }}
delete-branch: true

30
.github/workflows/clear-cache.yml vendored Normal file
View File

@@ -0,0 +1,30 @@
name: Clear cache
on:
workflow_dispatch:
permissions:
actions: write
jobs:
clear-cache:
runs-on: ubuntu-latest
steps:
- name: Clear cache
uses: actions/github-script@v6
with:
script: |
console.log("About to clear")
const caches = await github.rest.actions.getActionsCacheList({
owner: context.repo.owner,
repo: context.repo.repo,
})
for (const cache of caches.data.actions_caches) {
console.log(cache)
github.rest.actions.deleteActionsCacheById({
owner: context.repo.owner,
repo: context.repo.repo,
cache_id: cache.id,
})
}
console.log("Clear completed")

View File

@@ -12,6 +12,11 @@ jobs:
permissions:
contents: write
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
generic: [true, false]
name: Build Linux - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
steps:
- name: Install Node.js
@@ -86,6 +91,8 @@ jobs:
run: pnpm surfer download
- name: Import
env:
SURFER_COMPAT: ${{ matrix.generic == true }}
run: pnpm surfer import
- name: Bootstrap
@@ -95,35 +102,42 @@ jobs:
cd ..
- name: Build
env:
SURFER_COMPAT: ${{ matrix.generic == true }}
continue-on-error: true
run: sh .github/workflows/src/alpha-build.sh
- name: Build again if it failed
if: failure()
env:
SURFER_COMPAT: ${{ matrix.generic == true }}
run: sh .github/workflows/src/alpha-build.sh
- name: Package
env:
SURFER_COMPAT: ${{ matrix.generic == true }}
run: pnpm package
- name: Rename artifacts
run: |
mv dist/zen-*.tar.bz2 "zen.linux.tar.bz2"
mv dist/output.mar linux.mar
mv dist/zen-*.tar.bz2 "zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2"
mv dist/output.mar linux${{ matrix.generic == true && '-generic' || '' }}.mar
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: zen.linux.tar.bz2
path: ./zen.linux.tar.bz2
name: zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
path: ./zen.linux-${{ matrix.generic == true && 'generic' || 'specific' }}.tar.bz2
- name: Upload mar
uses: actions/upload-artifact@v4
with:
name: linux.mar
path: ./linux.mar
name: linux${{ matrix.generic == true && '-generic' || '' }}.mar
path: ./linux${{ matrix.generic == true && '-generic' || '' }}.mar
- name: Upload update manifests
uses: actions/upload-artifact@v4
with:
name: linux_update_manifest
name: linux_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
path: ./dist/update

View File

@@ -9,7 +9,16 @@ on:
jobs:
mac-build:
runs-on: macos-14
name: Build macOS - ${{ matrix.arch }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- arch: aarch64
os: macos-14
- arch: x64
os: macos-13
steps:
- name: Install Node.js
@@ -60,7 +69,10 @@ jobs:
run: pnpm surfer download
- name: Import
run: pnpm surfer import
env:
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
run: |
pnpm surfer import
- name: Bootstrap
run: |
@@ -69,34 +81,42 @@ jobs:
cd ..
- name: build Zen
run: sh .github/workflows/src/alpha-build.sh
env:
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
run: |
if test "${{ matrix.arch }}" = "x64"; then
export ZEN_DISABLE_LTO=1
fi
sh .github/workflows/src/alpha-build.sh
- name: Rebuild Zen if failed
if: failure()
run: sh .github/workflows/src/alpha-build.sh
- name: Package
env:
SURFER_COMPAT: ${{ matrix.arch == 'x64' }}
run: pnpm package
- name: Rename artifacts
run: |
mv ./dist/*.dmg "zen.macos.dmg"
mv ./dist/output.mar macos.mar
mv ./dist/*.dmg "zen.macos-${{ matrix.arch }}.dmg"
mv ./dist/output.mar macos-${{ matrix.arch }}.mar
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: zen.macos.dmg
path: ./zen.macos.dmg
name: zen.macos-${{ matrix.arch }}.dmg
path: ./zen.macos-${{ matrix.arch }}.dmg
- name: Upload mar
uses: actions/upload-artifact@v4
with:
name: macos.mar
path: ./macos.mar
name: macos-${{ matrix.arch }}.mar
path: ./macos-${{ matrix.arch }}.mar
- name: Upload update manifests
uses: actions/upload-artifact@v4
with:
name: macos_update_manifest
name: macos_update_manifest_${{ matrix.arch }}
path: ./dist/update

View File

@@ -1,40 +0,0 @@
export WINSYSROOT="$(echo ~)/win-cross/vs2022"
export MIDL="$(echo ~)/win-cross/wine/bin/widl"
export WINE="$(echo ~)/win-cross/wine/bin/wine64"
export WINEDEBUG=-all
#? https://bugzilla.mozilla.org/show_bug.cgi?id=1617793
#? https://phabricator.services.mozilla.com/D170170
ac_add_options --target=x86_64-pc-windows-msvc
export MOZ_STUB_INSTALLER=1
export MOZ_PKG_FORMAT=TAR
export CROSS_BUILD=1
CROSS_COMPILE=1
TOOLS=$(echo ~)/win-cross
export MIDL="$TOOLS/wine/bin/widl"
export MOZ_INCLUDE_SOURCE_INFO=1
export MOZ_STUB_INSTALLER=1
export WINEDEBUG=-all
export WINE="$TOOLS/wine/bin/wine64"
#export WIN32_REDIST_DIR="$TOOLS"/vs2022/VC/Redist/MSVC/14.34.31931/x64/Microsoft.VC143.CRT
#export WIN_UCRT_REDIST_DIR="$TOOLS/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
ac_add_options --disable-maintenance-service
ac_add_options --disable-bits-download
#if test "$ZEN_GA_GENERATE_PROFILE"; then
# mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
# ac_add_options --enable-profile-generate=cross
#else
# ac_add_options --disable-profiling
# ac_add_options --enable-profile-use=cross
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged.profdata
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US.log
#fi
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE

View File

@@ -16,7 +16,12 @@ on:
jobs:
windows-build:
name: Build Windows - ${{ matrix.generic == true && 'Generic' || 'Specific' }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
generic: [true, false]
steps:
- name: Install Node.js and pnpm
@@ -92,8 +97,6 @@ jobs:
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
cat ../.github/workflows/src/windows_mozconfig >> ../configs/common/mozconfig
cd ..
npm install -g pnpm
export SURFER_PLATFORM="win32"
@@ -104,6 +107,9 @@ jobs:
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
cat ../configs/common/mozconfig
sudo apt-get update
sudo apt-get install dos2unix
ls ~/win-cross/wine || true
ls ~/win-cross/vs2022 || true
@@ -119,6 +125,8 @@ jobs:
cargo download -x windows=0.52.0
#? https://github.com/mozilla/sccache#known-caveats
export CARGO_INCREMENTAL=0
echo "" >> ../configs/common/mozconfig
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
- uses: actions/download-artifact@v4
@@ -128,24 +136,30 @@ jobs:
path: ~/artifact
- name: Import
env:
SURFER_COMPAT: ${{ matrix.generic == true }}
run: pnpm surfer import --verbose
- name: Build
env:
SURFER_COMPAT: ${{ matrix.generic == true }}
run: |
set -x
dos2unix configs/windows/mozconfig
export SURFER_PLATFORM="win32"
export ZEN_CROSS_COMPILING=1
# if test ${{ inputs.generate-gpo }}; then
# export ZEN_GA_GENERATE_PROFILE=1
# fi
if test ${{ inputs.generate-gpo }} = true; then
export ZEN_GA_GENERATE_PROFILE=1
fi
sh .github/workflows/src/alpha-build.sh
- name: Package
env:
SURFER_COMPAT: ${{ matrix.generic == true }}
run: |
set -x
export SURFER_PLATFORM="win32"
pnpm package
mv ./dist/output.mar windows.mar
mv ./dist/zen-$(pnpm surfer get version | xargs).en-US.win64.zip zen.win64.zip
ls ./dist
ls .
@@ -156,37 +170,44 @@ jobs:
set -x
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
- name: Rename artifacts
if: ${{ !inputs.generate-gpo }}
run: |
mv ./zen.win64.zip zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
mv ./dist/output.mar windows${{ matrix.generic == true && '-generic' || '' }}.mar
mv ./dist/zen.installer.exe ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
- name: Upload artifact
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: zen.win64.zip
path: ./zen.win64.zip
name: zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
path: ./zen.win-${{ matrix.generic == true && 'generic' || 'specific' }}.zip
- name: Upload PGO build
uses: actions/upload-artifact@v4
if: ${{ inputs.generate-gpo }}
with:
name: ${{ inputs.profile-data-path-archive }}
name: ${{ matrix.generic == true && 'generic' || 'specific' }}-${{ inputs.profile-data-path-archive }}
path: ./zen.win64-pgo-stage-1.zip
- name: Upload mar
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: windows.mar
path: ./windows.mar
name: windows${{ matrix.generic == true && '-generic' || '' }}.mar
path: ./windows${{ matrix.generic == true && '-generic' || '' }}.mar
- name: Upload installer
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: zen.installer.exe
path: ./dist/zen.installer.exe
name: zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
path: ./zen.installer${{ matrix.generic == true && '-generic' || '' }}.exe
- name: Upload installer stub
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
if: ${{ !inputs.generate-gpo && false }}
with:
name: zen.installer.pretty.exe
path: ./dist/zen.installer.pretty.exe
@@ -195,5 +216,5 @@ jobs:
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: windows_update_manifest
name: windows_update_manifest_${{ matrix.generic == true && 'generic' || 'specific' }}
path: ./dist/update

View File

@@ -13,6 +13,11 @@ on:
jobs:
windows-profile-build:
name: Windows Profile Build - ${{ matrix.generic == true && 'generic' || 'specific' }}
strategy:
fail-fast: false
matrix:
generic: [true, false]
runs-on: windows-latest
# Script edited from https://github.com/Floorp-Projects/Floorp/blob/ESR115/.github/workflows/window-generate-profile-data-and-jarlog.yml
steps:
@@ -40,14 +45,14 @@ jobs:
name: Download artifact
with:
path: C:\artifact
name: zen-windows-x86_64-profile-data-and-jarlog.zip
name: ${{ matrix.generic == true && 'generic' || 'specific' }}-zen-windows-x86_64-profile-data-and-jarlog.zip
- name: Unpack artifact
run: |
cd C:\artifact
ls
7z x ${{ inputs.profile-data-path-archive }}
ls
zstd -d ${{ inputs.profile-data-path-archive }}
7z x zen-*.tar
- name: Setup
run: |
@@ -69,6 +74,7 @@ jobs:
echo $workspace_dir
echo "cd $workspace_dir" '' >> mozilla-build-run.sh
echo 'export PATH=/c/mozilla-build/msys2/usr/bin:$PATH' '' >> mozilla-build-run.sh
echo './mach --no-interactive bootstrap --application-choice browser' '' >> mozilla-build-run.sh
echo 'ls /c/Users/runneradmin/.mozbuild/clang/bin' '' >> mozilla-build-run.sh
echo 'LLVM_PROFDATA=/c/Users/runneradmin/.mozbuild/clang/bin/llvm-profdata.exe JARLOG_FILE=en-US.log ./mach python build/pgo/profileserver.py --binary /c/artifact/zen/zen.exe' '' >> mozilla-build-run.sh
@@ -82,10 +88,10 @@ jobs:
- name: Publish merged.profdata
uses: actions/upload-artifact@v4
with:
path: merged.profdata
path: merged-${{ matrix.generic == true && 'generic' || 'specific' }}.profdata
- name: Publish en-US.log
uses: actions/upload-artifact@v4
with:
path: en-US.log
path: en-US-${{ matrix.generic == true && 'generic' || 'specific' }}.log

View File

View File

@@ -4,7 +4,7 @@ Exec=zen %u
Icon=zen
Type=Application
MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json;
StartupWMClass=LibreWolf
StartupWMClass=zen-alpha
Categories=Network;WebBrowser;
StartupNotify=true
Terminal=false

View File

@@ -3,12 +3,22 @@
Experience tranquillity while browsing the web without people tracking you!
<a href='https://flathub.org/apps/io.github.zen_browser.zen'>
<img width='240' alt='Get it on Flathub' src='https://flathub.org/api/badge?locale=en'/>
</a>
# Compatibility
Zen is currently built using firefox version `128.0.3`!
* Checkout the latest [releases notes](https://get-zen.vercel.app/release-notes)!
# Performance
Zen is built with performance in mind, and we have optimized the browser to be as fast as possible!
* Checkout the latest [performance benchmarks](./docs/performance.md)!
## 🚀 Run Locally
Clone the project

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 483 KiB

After

Width:  |  Height:  |  Size: 889 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 872 B

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 483 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 483 KiB

After

Width:  |  Height:  |  Size: 889 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 872 B

After

Width:  |  Height:  |  Size: 890 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -1,9 +1,7 @@
# Browser branding
ac_add_options --enable-update-channel=release
ac_add_options --with-app-name=${binName}
ac_add_options --with-app-basename=Zen
ac_add_options --enable-official-branding
export MOZ_USER_DIR="${name}"
export MOZ_APP_VENDOR="${vendor}"
@@ -24,26 +22,20 @@ export MOZ_SOURCE_REPO=https://github.com/zen-browser/desktop
export MOZ_SOURCE_CHANGESET=${changeset}
export MOZ_INCLUDE_SOURCE_INFO=1
ac_add_options --enable-bootstrap
ac_add_options --enable-application=browser
if test "$ZEN_RELEASE"; then
ac_add_options --enable-bootstrap
ac_add_options --enable-release
ac_add_options --disable-debug
ac_add_options --disable-debug-symbols
ac_add_options --disable-debug-js-modules
ac_add_options --disable-tests
ac_add_options --enable-strip
ac_add_options --enable-install-strip
ac_add_options --disable-jprof
ac_add_options --enable-rust-simd
mk_add_options MOZ_PARALLEL_COMPILE=1
mk_add_options MOZ_CRASHREPORTER=0
mk_add_options MOZ_DATA_REPORTING=0
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
mk_add_options MOZ_TELEMETRY_REPORTING=0
ac_add_options --enable-proxy-bypass-protection
ac_add_options --enable-hardening
@@ -54,9 +46,13 @@ if test "$ZEN_RELEASE"; then
ac_add_options --disable-rust-tests
ac_add_options --disable-default-browser-agent
ac_add_options --disable-vtune
if ! test "$ZEN_DISABLE_LTO"; then
export MOZ_LTO=1
ac_add_options MOZ_LTO=1
ac_add_options --enable-lto=full,cross
fi
ac_add_options --enable-jemalloc
@@ -64,25 +60,22 @@ if test "$ZEN_RELEASE"; then
MOZILLA_OFFICIAL=1
export MOZILLA_OFFICIAL=1
mk_add_options MOZ_OPTIMIZE=1
MOZ_OPTIMIZE=1
export MOZ_OPTIMIZE=1
mk_add_options MOZ_OPTIMIZE=2
MOZ_OPTIMIZE=2
export MOZ_OPTIMIZE=2
export OPT_LEVEL="3"
ac_add_options OPT_LEVEL="3"
export RUSTC_OPT_LEVEL="3"
ac_add_options RUSTC_OPT_LEVEL="3"
mk_add_options AUTOCLOBBER=1
export AUTOCLOBBER=1
if ! test "$ZEN_CROSS_COMPILING"; then
# It causes link errors on windows
ac_add_options --disable-dmd
fi
ac_add_options --enable-updater
export MOZ_PACKAGE_JSSHELL=1
fi
ac_add_options --enable-unverified-updates
@@ -96,18 +89,13 @@ ac_add_options --enable-eme=widevine
ac_add_options --allow-addon-sideload
ac_add_options --with-unsigned-addon-scopes=app,system
export MOZ_REQUIRE_SIGNING=
export MOZ_TELEMETRY_REPORTING=
mk_add_options MOZ_CRASHREPORTER=0
mk_add_options MOZ_DATA_REPORTING=0
mk_add_options MOZ_SERVICES_HEALTHREPORT=0
mk_add_options MOZ_TELEMETRY_REPORTING=0
if test "$ZEN_CROSS_COMPILING"; then
ac_add_options --target=x86_64-pc-linux-gnu
fi
export MOZ_APP_UA_NAME="Firefox"
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE
# Allow loading unsigned extensions
export MOZ_REQUIRE_SIGNING=1
mk_add_options MOZ_REQUIRE_SIGNING=1

View File

@@ -1,7 +1,3 @@
ac_add_options --enable-wasm-avx
# not when cross compiling
if ! test "$ZEN_CROSS_COMPILING"; then
if test -d "$HOME/.mozbuild/clang/bin"; then
export CC="$HOME"/.mozbuild/clang/bin/clang
@@ -11,11 +7,13 @@ if ! test "$ZEN_CROSS_COMPILING"; then
export CXX=clang++
fi
if test "$ZEN_RELEASE"; then
ac_add_options --disable-dmd
ac_add_options --enable-linker=lld
ac_add_options --disable-elf-hack
fi
if test "$ZEN_RELEASE"; then
ac_add_options --enable-install-strip
ac_add_options --enable-strip
export STRIP_FLAGS="--strip-debug --strip-unneeded"
@@ -26,20 +24,28 @@ if test "$ZEN_RELEASE"; then
mk_add_options 'export SCCACHE_GHA_ENABLED=on'
fi
if ! test "$ZEN_CROSS_COMPILING"; then
# WE ARE JUST SUPPORTING PGO FOR LINUX!
export MOZ_PGO=1
ac_add_options MOZ_PGO=1
if test "$SURFER_COMPAT" = "true"; then
ac_add_options --enable-optimize="-O3 -march=x86-64"
export CFLAGS="$CFLAGS -O3 -ffp-contract=fast -march=x86-64"
export CPPFLAGS="$CPPFLAGS -O3 -ffp-contract=fast -march=x86-64"
export CXXFLAGS="$CXXFLAGS -O3 -ffp-contract=fast -march=x86-64"
export LDFLAGS="$LDFLAGS -Wl,-O3 -Wl,-mllvm,-fp-contract=fast -march=x86-64"
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64 -C codegen-units=1"
else
ac_add_options --enable-wasm-avx
ac_add_options --enable-optimize="-O3 -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export CFLAGS="$CFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export CPPFLAGS="$CPPFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export CXXFLAGS="$CXXFLAGS -O3 -ffp-contract=fast -march=x86-64-v3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export LDFLAGS="$LDFLAGS -Wl,-O3 -Wl,-mllvm,-fp-contract=fast -march=x86-64-v3"
export RUSTFLAGS="$RUSTFLAGS -C target-cpu=x86-64-v3 -C target-feature=+sse4.1 -C target-feature=+avx2 -C codegen-units=1"
fi
export VERBOSE=1
fi
export CFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export CPPFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export CXXFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export LDFLAGS="-Wl,-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
export POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
export RUSTFLAGS="$RUSTFLAGS -C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
fi
# Disable telemetry and tracking
mk_add_options MOZ_TELEMETRY_REPORTING=
mk_add_options MOZ_DATA_REPORTING=
ac_add_options --target=x86_64-pc-linux

View File

@@ -1,12 +1,35 @@
POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
# SURFER_COMPAT has a different meaning here, in macOS it means that the build is for
# x86_64, not ARM64.
unset MOZ_STDCXX_COMPAT
if test "$ZEN_RELEASE"; then
export RUSTFLAGS="$RUSTFLAGS -Ctarget-cpu=apple-m1"
fi
ac_add_options --enable-install-strip
ac_add_options --target=aarch64-apple-darwin
ac_add_options --disable-dmd
export MOZ_MACBUNDLE_ID=${appId}
export MOZ_MACBUNDLE_NAME="Zen Browser.app"
if test "$SURFER_COMPAT" = "true"; then
export MOZ_PGO=1
ac_add_options MOZ_PGO=1
ac_add_options --target=x86_64-apple-darwin
ac_add_options --enable-wasm-avx
ac_add_options --enable-optimize="-march=nehalem -mtune=haswell -O3 -w"
export CFLAGS="-O3 -march=nehalem"
export CPPFLAGS="-O3 -march=nehalem"
export CXXFLAGS="-O3 -march=nehalem"
export LDFLAGS="-Wl,-O3 -march=nehalem"
export RUSTFLAGS="-Ctarget-cpu=nehalem -C codegen-units=1"
else
ac_add_options --target=aarch64-apple-darwin
ac_add_options --enable-optimize="-O3 -mcpu=apple-m1 -march=armv8.3-a+simd"
export CFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
export CPPFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
export CXXFLAGS="-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
export LDFLAGS="-Wl,-O3 -march=armv8.3-a+simd -mcpu=apple-m1"
export RUSTFLAGS="-C target-feature=+v8.3a -C codegen-units=1 -Ctarget-cpu=apple-m1"
fi
export VERBOSE=1

View File

@@ -1,5 +1,71 @@
if test "$ZEN_CROSS_COMPILING"; then
export WINSYSROOT="$(echo ~)/win-cross/vs2022"
export MIDL="$(echo ~)/win-cross/wine/bin/widl"
export WINE="$(echo ~)/win-cross/wine/bin/wine64"
export WINEDEBUG=-all
export MOZ_STUB_INSTALLER=1
export MOZ_PKG_FORMAT=TAR
export CROSS_BUILD=1
CROSS_COMPILE=1
TOOLS=$(echo ~)/win-cross
#export WIN32_REDIST_DIR="$TOOLS"/vs2022/VC/Redist/MSVC/14.34.31931/x64/Microsoft.VC143.CRT
#export WIN_UCRT_REDIST_DIR="$TOOLS/vs2022/Windows Kits/10/Redist/10.0.22621.0/ucrt/DLLs/x64"
export MIDL="$TOOLS/wine/bin/widl"
export MOZ_INCLUDE_SOURCE_INFO=1
export MOZ_STUB_INSTALLER=1
export WINEDEBUG=-all
export WINE="$TOOLS/wine/bin/wine64"
fi
#? https://bugzilla.mozilla.org/show_bug.cgi?id=1617793
#? https://phabricator.services.mozilla.com/D170170
ac_add_options --target=x86_64-pc-windows-msvc
ac_add_options --disable-maintenance-service
ac_add_options --disable-bits-download
ac_add_options --without-wasm-sandboxed-libraries
if test "$SURFER_COMPAT" = "true"; then
ac_add_options --enable-optimize="-O3 -mavx -maes -w -ftree-vectorize"
export CFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
export CPPFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
export CXXFLAGS="-mavx -maes -mtune=haswell -march=x86-64"
export LDFLAGS="-Wl,-O3"
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64"
else
ac_add_options --enable-optimize="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -Xclang -ftree-vectorize -w"
ac_add_options --enable-wasm-avx
export CFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes /arch:AVX -march=x86-64-v3"
export CPPFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes /arch:AVX -march=x86-64-v3"
export CXXFLAGS="-O2 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes /arch:AVX -march=x86-64-v3"
export LDFLAGS="-Wl,-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes -march=x86-64-v3"
export RUSTFLAGS="-C target-feature=+avx -C codegen-units=1 -Ctarget-cpu=x86-64-v3"
fi
export POLLY="-mllvm -polly -mllvm -polly-2nd-level-tiling -mllvm -polly-loopfusion-greedy -mllvm -polly-pattern-matching-based-opts -mllvm -polly-position=before-vectorizer -mllvm -polly-vectorizer=stripmine"
export VERBOSE=1
#if test "$ZEN_GA_GENERATE_PROFILE"; then
# mk_add_options "export MOZ_AUTOMATION_PACKAGE_GENERATED_SOURCES=0"
# ac_add_options --enable-profile-generate=cross
#else
# ac_add_options --enable-profile-use=cross
# if test "$SURFER_COMPAT" = "true"; then
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged-generic.profdata
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US-generic.log
# else
# ac_add_options --with-pgo-profile-path=$(echo ~)/artifact/merged-specific.profdata
# ac_add_options --with-pgo-jarlog=$(echo ~)/artifact/en-US-specific.log
# fi
#fi
# Disable telemetry and tracking
mk_add_options MOZ_TELEMETRY_REPORTING=
mk_add_options MOZ_DATA_REPORTING=

99
docs/performance.md Normal file
View File

@@ -0,0 +1,99 @@
# 🌀 Zen Browser Performance traker
```mermaid
graph TD;
A[mauro-balades] -->B(Zen custom code)
G-->B
H(ptr1337/CachyOS)-->|AUR Pkg and Opt. flags|D
E(Fire Fox-Code)-->C
B --> C{Final code}
D-->G(Perf. Testing)
C-->D(Build)
D--> F(Release)
F-->I(mar)
F-->L(Mac)
F-->T(Linux)
F-->V(Win install)
V-->Z(Zip)
V-->Z2(Intall.exe)
I-->I1(windows.mar)
I-->I2(linux.mar)
I-->I3(macos.mar)
T-->T1(zen.linux.tar.bz2)
T-->T2(AUR)
T-->T3(Flatpak)
T-->T4(AppImage)
L-->L1(zen.macos.dmg)
```
## Scores
## 1
- [NOCanoa](https://github.com/NOCanoa)
OS: win 11; CPU: i5 13600k
## web.basemark
https://web.basemark.com/
| | score: |CSS | HTML5 | Page load and Responsiveness | Resize Cap. |
|-----------|-----|-----|-------|------------------------------|-------------|
| 1.0.0-a.12-opt | 1874.49 | 59% | 91% | 91% | 76% |
| 1.0.0-a.11-opt | 1678.49 | 59% | 91% | 91% | 76% |
| 1.0.0-a.10 | 1660.89 | 59% | 91% | 91% | 76% |
| 1.0.0-a.9 | 470 | why | why | why | why |
| 1.0.0-a.8 | 446.74 | 59% | 91% | 96% | 76% |
| 1.0.0-a.7 | 1964.43 | 59% | 91% | 91% | 76% |
| 1.0.0-a.6 | 1747.98 | 59% | 91% | 91% | 76% |
| 1.0.0-a.4 | 470.49 | 59% | 91% | 97% | 76% |
| 1.0.0-a.3 | 475.52 |59% | 91% | 97% | 76% |
| other | last | utpdate | 31/7 | 2024 | - |
| Librewolf 128.0-2 | 1953.65 | 59.66% | 89.01% | 91.72% | 76.12% |
| FF nightly 130.0a1 | 1912.77 | 59.66% | 90.91% | 91.72% | 76.12% |
```mermaid
xychart-beta
title "Performance over time (Higher is better)"
x-axis [.3, .4, .6, .7, .8, .9, .10, .11, .12]
y-axis "Benchmark Points"
bar [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49]
line [475.52, 470.49, 1747.98, 1964.43, 446.74, 470, 1660.89, 1678.49, 1874.49]
```
## Speedometer3.0
https://browserbench.org/Speedometer3.0/
| | score: |
|-----------|-----|
| 1.0.0-a.12-opt | 21.5 |
| 1.0.0-a.11-opt | 20.8 |
| 1.0.0-a.10 | 21.2 |
| others| - |
| Vivaldi 6.7.3329.39| 27.8 |
| FF nightly 130.0a1 | 27.0 |
| Librewolf 128.0-2 | 20.2 |
## 2
- [Verix](https://github.com/Veriiix)
OS: Win 11
CPU: i7-13700KF
GPU: AMD RX 7900 XTX
https://www.tablesgenerator.com/
| Version | Score: |
|------------|--------|
| 1.0.0-a.12-opt | 23 |
| 1.0.0-a.11-opt | 22.1 |
| 1.0.0-a.10 | 21.7 |
| 1.0.0-a.9 | 3.7 |
| others| - |
| Default FF | 28 |
https://browserbench.org/Speedometer3.0/

31
docs/requirements.md Normal file
View File

@@ -0,0 +1,31 @@
# Supported CPUs for optimized builds (Windows and Linux)
> If you CPU is not listed, you should use the "Generic" build.
* AMD Family 15h (Excavator)
* AMD Family 17h (Zen)
* AMD Family 17h (Zen+)
* AMD Family 17h (Zen 2)
* AMD Family 19h (Zen 3)
* Intel 4th Gen Core (Haswell)
* Intel 5th Gen Core (Broadwell)
* Intel 6th Gen Core (Skylake)
* Intel 7th Gen Core (Kaby Lake)
* Intel 8/9th Gen Core (Coffee Lake)
* Intel 10th Gen Core (Comet Lake)
* Intel 12th Gen (Alder Lake)
* Intel 13th Gen (Raptor Lake)
* Intel 14th Gen (Raptor Lake Refresh)
* Intel 15th Gen (Lunar / Arrow Lake)
* AMD Family 19h (Zen 4 / Zen 4c)
* AMD Family 1Ah (Zen 5 / Zen 5c)
* Intel 6th Gen Core (Skylake X)
* Intel 8th Gen Core i3 (Cannon Lake)
* Intel Xeon / 10th Gen Core (Ice Lake)
* Intel Xeon (Cascade Lake)
* Intel Xeon (Cooper Lake)
* Intel 3rd Gen 10nm++ (Tiger Lake)
* Intel 4th Gen 10nm++ (Sapphire Rapids)
* Intel 5th Gen 10nm++ (Emerald Rapids)
* Intel 11th Gen (Rocket Lake)

View File

@@ -0,0 +1,46 @@
app-id: io.github.zen_browser.zen
runtime: org.freedesktop.Platform
runtime-version: '23.08'
sdk: org.freedesktop.Sdk
base: org.mozilla.firefox.BaseApp
base-version: '23.08'
command: launch-script.sh
finish-args:
- --share=ipc
- --share=network
- --socket=pulseaudio
- --socket=wayland
- --socket=fallback-x11
- --socket=pcsc
- --socket=cups
- --persist=.zen
- --filesystem=xdg-download:rw
- --device=all
- --talk-name=org.freedesktop.FileManager1
- --own-name=org.mozilla.zen.*
- --own-name=org.mpris.MediaPlayer2.firefox.*
- --system-talk-name=org.freedesktop.NetworkManager
- --talk-name=org.a11y.Bus
modules:
- name: zen_browser
buildsystem: simple
build-commands:
- mv zen /app/
- install -Dm0755 metadata/launch-script.sh ${{FLATPAK_DEST}}/bin/launch-script.sh
- install -Dm0644 metadata/policies.json ${{FLATPAK_DEST}}/bin/distribution/policies.json
- install -Dm0644 metadata/icons/io.github.zen_browser.zen.png ${{FLATPAK_DEST}}/share/icons/hicolor/256x256/apps/${{FLATPAK_ID}}.png
- install -Dm0644 metadata/io.github.zen_browser.zen.metainfo.xml ${{FLATPAK_DEST}}/share/metainfo/${{FLATPAK_ID}}.metainfo.xml
- install -Dm0644 metadata/io.github.zen_browser.zen.desktop ${{FLATPAK_DEST}}/share/applications/${{FLATPAK_ID}}.desktop
sources:
- type: archive
url: https://github.com/zen-browser/desktop/releases/download/{version}/zen.linux-generic.tar.bz2
sha256: {linux_sha256}
strip-components: 0
- type: archive
url: https://github.com/zen-browser/flatpak/releases/latest/download/archive.tar
sha256: {flatpak_sha256}
strip-components: 0
dest: metadata

View File

@@ -27,6 +27,6 @@
},
"homepage": "https://github.com/zen-browser/core#readme",
"dependencies": {
"@zen-browser/surfer": "^1.1.17"
"@zen-browser/surfer": "^1.2.7"
}
}

10
pnpm-lock.yaml generated
View File

@@ -9,8 +9,8 @@ importers:
.:
dependencies:
'@zen-browser/surfer':
specifier: ^1.1.17
version: 1.1.17
specifier: ^1.2.7
version: 1.2.7
packages:
@@ -109,8 +109,8 @@ packages:
'@types/node@17.0.45':
resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==}
'@zen-browser/surfer@1.1.17':
resolution: {integrity: sha512-619ur59XBh7GLLtAeOipJNiUOJL/lNGRXznf40e6fPimCsSobrL7HIxh5F1JXpRvKpUHVOQK5R1EDbcH+rTttg==}
'@zen-browser/surfer@1.2.7':
resolution: {integrity: sha512-VbbbB7crGXrdfk1PPnlsWFWErwjtccXbRuw5mOQzY327d2t5VraxmkqTzcuGSTxpu3CR/KvzNu0gDg/6+7b4NQ==}
hasBin: true
ansi-regex@5.0.1:
@@ -786,7 +786,7 @@ snapshots:
'@types/node@17.0.45': {}
'@zen-browser/surfer@1.1.17':
'@zen-browser/surfer@1.2.7':
dependencies:
'@resvg/resvg-js': 1.4.0
async-icns: 1.0.2

View File

@@ -0,0 +1,58 @@
import os
import sys
import hashlib
import argparse
FLATID = "io.github.zen_browser.zen"
def get_sha256sum(filename):
sha256 = hashlib.sha256()
with open(filename, "rb") as f:
for byte_block in iter(lambda: f.read(4096), b""):
sha256.update(byte_block)
return sha256.hexdigest()
def build_template(template, linux_sha256, flatpak_sha256, version):
print(f"Building template with version {version}")
print(f"\tLinux archive sha256: {linux_sha256}")
print(f"\tFlatpak archive sha256: {flatpak_sha256}")
return template.format(linux_sha256=linux_sha256,
flatpak_sha256=flatpak_sha256,
version=version)
def get_template(template_root):
file = f"{template_root}/{FLATID}.yml.template"
print(f"Reading template {file}")
with open(file, "r") as f:
return f.read()
print(f"Template {template_root}/flatpak.yml not found")
sys.exit(1)
def main():
parser = argparse.ArgumentParser(description='Prepare flatpak release')
parser.add_argument('--version', help='Version of the release', required=True)
parser.add_argument('--linux-archive', help='Linux archive', required=True)
parser.add_argument('--flatpak-archive', help='Flatpak archive', required=True)
parser.add_argument('--output', help='Output file', default=f"{FLATID}.yml")
parser.add_argument('--template-root', help='Template root', default="flatpak")
args = parser.parse_args()
version = args.version
linux_archive = args.linux_archive
flatpak_archive = args.flatpak_archive
output = args.output
template_root = args.template_root
linux_sha256 = get_sha256sum(linux_archive)
flatpak_sha256 = get_sha256sum(flatpak_archive)
template = build_template(get_template(template_root), linux_sha256, flatpak_sha256, version)
print(f"Writing output to {output}")
with open(output, "w") as f:
f.write(template)
if __name__ == "__main__":
main()

View File

@@ -1,29 +1,4 @@
// Ignore license in this file
//
// The code in this file was created by @yokoffing and is licensed under the
// MIT license:
// MIT License
//
// Copyright (c) 2020 yokoffing
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
/* You may copy+paste this file and use it as it is.
*
* If you make changes to your about:config while the program is running, the
@@ -35,7 +10,7 @@
/****************************************************************************
* Betterfox *
* "Ad meliora" *
* version: 121 *
* version: 128 *
* url: https://github.com/yokoffing/Betterfox *
****************************************************************************/
@@ -43,219 +18,193 @@
* SECTION: FASTFOX *
****************************************************************************/
/** GENERAL ***/
pref('content.notify.interval', 100000);
pref("content.notify.interval", 100000);
/** GFX ***/
pref('gfx.canvas.accelerated.cache-items', 4096);
pref('gfx.canvas.accelerated.cache-size', 512);
pref('gfx.content.skia-font-cache-size', 20);
pref("gfx.canvas.accelerated.cache-items", 4096);
pref("gfx.canvas.accelerated.cache-size", 512);
pref("gfx.content.skia-font-cache-size", 20);
/** DISK CACHE ***/
pref('browser.cache.jsbc_compression_level', 3);
pref("browser.cache.jsbc_compression_level", 3);
/** MEDIA CACHE ***/
pref('media.memory_cache_max_size', 65536);
pref('media.cache_readahead_limit', 7200);
pref('media.cache_resume_threshold', 3600);
pref("media.memory_cache_max_size", 65536);
pref("media.cache_readahead_limit", 7200);
pref("media.cache_resume_threshold", 3600);
/** IMAGE CACHE ***/
pref('image.mem.decode_bytes_at_a_time', 32768);
pref("image.mem.decode_bytes_at_a_time", 32768);
/** NETWORK ***/
pref('network.buffer.cache.size', 262144);
pref('network.buffer.cache.count', 128);
pref('network.http.max-connections', 1800);
pref('network.http.max-persistent-connections-per-server', 10);
pref('network.http.max-urgent-start-excessive-connections-per-host', 5);
pref('network.http.pacing.requests.enabled', false);
pref('network.dnsCacheExpiration', 3600);
pref('network.dns.max_high_priority_threads', 8);
pref('network.ssl_tokens_cache_capacity', 10240);
pref("network.http.max-connections", 1800);
pref("network.http.max-persistent-connections-per-server", 10);
pref("network.http.max-urgent-start-excessive-connections-per-host", 5);
pref("network.http.pacing.requests.enabled", false);
pref("network.dnsCacheExpiration", 3600);
pref("network.ssl_tokens_cache_capacity", 10240);
/** SPECULATIVE LOADING ***/
pref('network.dns.disablePrefetch', true);
pref('network.prefetch-next', false);
pref('network.predictor.enabled', false);
pref("network.dns.disablePrefetch", true);
pref("network.dns.disablePrefetchFromHTTPS", true);
pref("network.prefetch-next", false);
pref("network.predictor.enabled", false);
pref("network.predictor.enable-prefetch", false);
/** EXPERIMENTAL ***/
pref('layout.css.grid-template-masonry-value.enabled', true);
pref('dom.enable_web_task_scheduling', true);
pref('layout.css.has-selector.enabled', true);
pref('dom.security.sanitizer.enabled', true);
pref("layout.css.grid-template-masonry-value.enabled", true);
pref("dom.enable_web_task_scheduling", true);
pref("dom.security.sanitizer.enabled", true);
/****************************************************************************
* SECTION: SECUREFOX *
****************************************************************************/
/** TRACKING PROTECTION ***/
pref('browser.contentblocking.category', 'strict');
pref(
'urlclassifier.trackingSkipURLs',
'*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com'
);
pref(
'urlclassifier.features.socialtracking.skipURLs',
'*.instagram.com, *.twitter.com, *.twimg.com'
);
pref('network.cookie.sameSite.noneRequiresSecure', true);
pref('browser.download.start_downloads_in_tmp_dir', true);
pref('browser.helperApps.deleteTempFileOnExit', true);
pref('browser.uitour.enabled', false);
pref('privacy.globalprivacycontrol.enabled', true);
pref("browser.contentblocking.category", "strict");
pref("urlclassifier.trackingSkipURLs", "*.reddit.com, *.twitter.com, *.twimg.com, *.tiktok.com");
pref("urlclassifier.features.socialtracking.skipURLs", "*.instagram.com, *.twitter.com, *.twimg.com");
pref("network.cookie.sameSite.noneRequiresSecure", true);
pref("browser.download.start_downloads_in_tmp_dir", true);
pref("browser.helperApps.deleteTempFileOnExit", true);
pref("browser.uitour.enabled", false);
pref("privacy.globalprivacycontrol.enabled", true);
/** OCSP & CERTS / HPKP ***/
pref('security.OCSP.enabled', 0);
pref('security.remote_settings.crlite_filters.enabled', true);
pref('security.pki.crlite_mode', 2);
pref("security.OCSP.enabled", 0);
pref("security.remote_settings.crlite_filters.enabled", true);
pref("security.pki.crlite_mode", 2);
/** SSL / TLS ***/
pref('security.ssl.treat_unsafe_negotiation_as_broken', true);
pref('browser.xul.error_pages.expert_bad_cert', true);
pref('security.tls.enable_0rtt_data', false);
pref("security.ssl.treat_unsafe_negotiation_as_broken", true);
pref("browser.xul.error_pages.expert_bad_cert", true);
pref("security.tls.enable_0rtt_data", false);
/** DISK AVOIDANCE ***/
pref('browser.privatebrowsing.forceMediaMemoryCache', true);
pref('browser.sessionstore.interval', 60000);
pref("browser.privatebrowsing.forceMediaMemoryCache", true);
pref("browser.sessionstore.interval", 60000);
/** SHUTDOWN & SANITIZING ***/
pref('privacy.history.custom', true);
pref("privacy.history.custom", true);
/** SEARCH / URL BAR ***/
pref('browser.search.separatePrivateDefault.ui.enabled', true);
pref('browser.urlbar.update2.engineAliasRefresh', true);
pref('browser.search.suggest.enabled', false);
pref('browser.urlbar.suggest.quicksuggest.sponsored', false);
pref('browser.urlbar.suggest.quicksuggest.nonsponsored', false);
pref('security.insecure_connection_text.enabled', true);
pref('security.insecure_connection_text.pbmode.enabled', true);
pref('network.IDN_show_punycode', true);
/** HTTPS-FIRST POLICY ***/
pref('dom.security.https_first', true);
pref('dom.security.https_first_schemeless', true);
/** PASSWORDS ***/
pref('signon.formlessCapture.enabled', false);
pref('signon.privateBrowsingCapture.enabled', false);
pref('network.auth.subresource-http-auth-allow', 1);
pref('editor.truncate_user_pastes', false);
/** ADDRESS + CREDIT CARD MANAGER ***/
pref('extensions.formautofill.creditCards.enabled', false);
/** MIXED CONTENT + CROSS-SITE ***/
pref('security.mixed_content.block_display_content', true);
pref('security.mixed_content.upgrade_display_content', true);
pref('security.mixed_content.upgrade_display_content.image', true);
pref('pdfjs.enableScripting', false);
pref('extensions.postDownloadThirdPartyPrompt', false);
/** HEADERS / REFERERS ***/
pref('network.http.referer.XOriginTrimmingPolicy', 2);
pref("browser.urlbar.trimHttps", true);
pref("browser.search.separatePrivateDefault.ui.enabled", true);
pref("browser.urlbar.update2.engineAliasRefresh", true);
pref("browser.search.suggest.enabled", false);
pref("browser.urlbar.quicksuggest.enabled", false);
pref("browser.urlbar.suggest.quicksuggest.sponsored", false);
pref("browser.urlbar.suggest.quicksuggest.nonsponsored", false);
pref("browser.urlbar.groupLabels.enabled", false);
pref("browser.formfill.enable", false);
pref("security.insecure_connection_text.enabled", true);
pref("security.insecure_connection_text.pbmode.enabled", true);
pref("network.IDN_show_punycode", true);
/** CONTAINERS ***/
pref('privacy.userContext.ui.enabled', true);
pref("privacy.userContext.ui.enabled", true);
/** WEBRTC ***/
pref('media.peerconnection.ice.proxy_only_if_behind_proxy', true);
pref('media.peerconnection.ice.default_address_only', true);
pref("media.peerconnection.ice.proxy_only_if_behind_proxy", true);
pref("media.peerconnection.ice.default_address_only", true);
/** SAFE BROWSING ***/
pref('browser.safebrowsing.downloads.remote.enabled', false);
pref("browser.safebrowsing.downloads.remote.enabled", false);
/** MOZILLA ***/
pref('permissions.default.desktop-notification', 2);
pref('permissions.default.geo', 2);
pref(
'geo.provider.network.url',
'https://location.services.mozilla.com/v1/geolocate?key=%MOZILLA_API_KEY%'
);
pref('permissions.manager.defaultsUrl', '');
pref('webchannel.allowObject.urlWhitelist', '');
pref("permissions.default.desktop-notification", 2);
pref("permissions.default.geo", 2);
pref("permissions.manager.defaultsUrl", "");
pref("webchannel.allowObject.urlWhitelist", "");
/** TELEMETRY ***/
pref('datareporting.policy.dataSubmissionEnabled', false);
pref('datareporting.healthreport.uploadEnabled', false);
pref('toolkit.telemetry.unified', false);
pref('toolkit.telemetry.enabled', false);
pref('toolkit.telemetry.server', 'data:,');
pref('toolkit.telemetry.archive.enabled', false);
pref('toolkit.telemetry.newProfilePing.enabled', false);
pref('toolkit.telemetry.shutdownPingSender.enabled', false);
pref('toolkit.telemetry.updatePing.enabled', false);
pref('toolkit.telemetry.bhrPing.enabled', false);
pref('toolkit.telemetry.firstShutdownPing.enabled', false);
pref('toolkit.telemetry.coverage.opt-out', true);
pref('toolkit.coverage.opt-out', true);
pref('toolkit.coverage.endpoint.base', '');
pref('browser.ping-centre.telemetry', false);
pref('browser.newtabpage.activity-stream.feeds.telemetry', false);
pref('browser.newtabpage.activity-stream.telemetry', false);
pref("datareporting.policy.dataSubmissionEnabled", false);
pref("datareporting.healthreport.uploadEnabled", false);
pref("toolkit.telemetry.unified", false);
pref("toolkit.telemetry.enabled", false);
pref("toolkit.telemetry.server", "data:,");
pref("toolkit.telemetry.archive.enabled", false);
pref("toolkit.telemetry.newProfilePing.enabled", false);
pref("toolkit.telemetry.shutdownPingSender.enabled", false);
pref("toolkit.telemetry.updatePing.enabled", false);
pref("toolkit.telemetry.bhrPing.enabled", false);
pref("toolkit.telemetry.firstShutdownPing.enabled", false);
pref("toolkit.telemetry.coverage.opt-out", true);
pref("toolkit.coverage.opt-out", true);
pref("toolkit.coverage.endpoint.base", "");
pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
pref("browser.newtabpage.activity-stream.telemetry", false);
/** EXPERIMENTS ***/
pref('app.shield.optoutstudies.enabled', false);
pref('app.normandy.enabled', false);
pref('app.normandy.api_url', '');
pref("app.shield.optoutstudies.enabled", false);
pref("app.normandy.enabled", false);
pref("app.normandy.api_url", "");
/** CRASH REPORTS ***/
pref('breakpad.reportURL', '');
pref('browser.tabs.crashReporting.sendReport', false);
pref('browser.crashReports.unsubmittedCheck.autoSubmit2', false);
pref("breakpad.reportURL", "");
pref("browser.tabs.crashReporting.sendReport", false);
pref("browser.crashReports.unsubmittedCheck.autoSubmit2", false);
/** DETECTION ***/
pref('captivedetect.canonicalURL', '');
pref('network.captive-portal-service.enabled', false);
pref('network.connectivity-service.enabled', false);
pref("captivedetect.canonicalURL", "");
pref("network.captive-portal-service.enabled", false);
pref("network.connectivity-service.enabled", false);
pref("dom.private-attribution.submission.enabled", false);
/****************************************************************************
* SECTION: PESKYFOX *
****************************************************************************/
/** MOZILLA UI ***/
pref('browser.privatebrowsing.vpnpromourl', '');
pref('extensions.getAddons.showPane', false);
pref('extensions.htmlaboutaddons.recommendations.enabled', false);
pref('browser.discovery.enabled', false);
pref('browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons', false);
pref(
'browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features',
false
);
pref('browser.preferences.moreFromMozilla', false);
pref('browser.aboutwelcome.enabled', false);
pref("browser.privatebrowsing.vpnpromourl", "");
pref("extensions.getAddons.showPane", false);
pref("extensions.htmlaboutaddons.recommendations.enabled", false);
pref("browser.discovery.enabled", false);
pref("browser.shell.checkDefaultBrowser", false);
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.addons", false);
pref("browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features", false);
pref("browser.preferences.moreFromMozilla", false);
pref("browser.tabs.tabmanager.enabled", false);
pref("browser.aboutConfig.showWarning", false);
pref("browser.aboutwelcome.enabled", false);
/** THEME ADJUSTMENTS ***/
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
pref('browser.compactmode.show', true);
pref('layout.css.prefers-color-scheme.content-override', 2);
pref('browser.privateWindowSeparation.enabled', false); // WINDOWS
pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
pref("browser.compactmode.show", true);
pref("browser.display.focus_ring_on_anything", true);
pref("browser.display.focus_ring_style", 0);
pref("browser.display.focus_ring_width", 0);
pref("layout.css.prefers-color-scheme.content-override", 2);
pref("browser.privateWindowSeparation.enabled", false); // WINDOWS
/** COOKIE BANNER HANDLING ***/
pref('cookiebanners.service.mode', 1);
pref('cookiebanners.service.mode.privateBrowsing', 1);
/** FULLSCREEN NOTICE ***/
pref("full-screen-api.transition-duration.enter", "0 0");
pref("full-screen-api.transition-duration.leave", "0 0");
pref("full-screen-api.warning.delay", -1);
pref("full-screen-api.warning.timeout", 0);
/** URL BAR ***/
pref('browser.urlbar.suggest.calculator', true);
pref('browser.urlbar.unitConversion.enabled', true);
pref('browser.urlbar.trending.featureGate', false);
pref("browser.urlbar.suggest.calculator", true);
pref("browser.urlbar.unitConversion.enabled", true);
pref("browser.urlbar.trending.featureGate", false);
/** NEW TAB PAGE ***/
pref('browser.newtabpage.activity-stream.feeds.topsites', false);
pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
pref("browser.newtabpage.activity-stream.feeds.topsites", false);
pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
/*** POCKET ***/
pref('extensions.pocket.enabled', false);
/** POCKET ***/
pref("extensions.pocket.enabled", false);
/** DOWNLOADS ***/
pref('browser.download.always_ask_before_handling_new_types', true);
pref('browser.download.manager.addToRecentDocs', false);
pref("browser.download.always_ask_before_handling_new_types", true);
pref("browser.download.manager.addToRecentDocs", false);
/** PDF ***/
pref('browser.download.open_pdf_attachments_inline', true);
pref("browser.download.open_pdf_attachments_inline", true);
/** TAB BEHAVIOR ***/
pref('browser.bookmarks.openInTabClosesMenu', false);
pref('browser.menu.showViewImageInfo', true);
pref('findbar.highlightAll', true);
pref('layout.word_select.eat_space_to_next_word', false);
pref("browser.bookmarks.openInTabClosesMenu", false);
pref("browser.menu.showViewImageInfo", true);
pref("findbar.highlightAll", true);
pref("layout.word_select.eat_space_to_next_word", false);
/****************************************************************************
* START: MY OVERRIDES *

View File

@@ -1,632 +0,0 @@
/****************************************************************************
* SECTION: GENERAL *
****************************************************************************/
// PREF: initial paint delay
// How long FF will wait before rendering the page (in ms)
// [NOTE] You may prefer using 250.
// [NOTE] Dark Reader users may want to use 1000 [3].
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1283302
// [2] https://docs.google.com/document/d/1BvCoZzk2_rNZx3u9ESPoFjSADRI0zIPeJRXFLwWXx_4/edit#heading=h.28ki6m8dg30z
// [3] https://old.reddit.com/r/firefox/comments/o0xl1q/reducing_cpu_usage_of_dark_reader_extension/
// [4] https://reddit.com/r/browsers/s/wvNB7UVCpx
//pref("nglayout.initialpaint.delay", 5); // DEFAULT; formerly 250
//pref("nglayout.initialpaint.delay_in_oopif", 5); // DEFAULT
// PREF: page reflow timer
// Rather than wait until a page has completely downloaded to display it to the user,
// web browsers will periodically render what has been received to that point.
// Because reflowing the page every time additional data is received slows down
// total page load time, a timer was added so that the page would not reflow too often.
// This preference specfies whether that timer is active.
// [1] https://kb.mozillazine.org/Content.notify.ontimer
// true = do not reflow pages at an interval any higher than that specified by content.notify.interval (default)
// false = reflow pages whenever new data is received
//pref("content.notify.ontimer", true); // DEFAULT
// PREF: notification interval (in microseconds) to avoid layout thrashing
// When Firefox is loading a page, it periodically reformats
// or "reflows" the page as it loads. The page displays new elements
// every 0.12 seconds by default. These redraws increase the total page load time.
// The default value provides good incremental display of content
// without causing an increase in page load time.
// [NOTE] Lowering the interval will increase responsiveness
// but also increase the total load time.
// [WARNING] If this value is set below 1/10 of a second, it starts
// to impact page load performance.
// [EXAMPLE] 100000 = .10s = 100 reflows/second
// [1] https://searchfox.org/mozilla-central/rev/c1180ea13e73eb985a49b15c0d90e977a1aa919c/modules/libpref/init/StaticPrefList.yaml#1824-1834
// [2] https://dev.opera.com/articles/efficient-javascript/?page=3#reflow
// [3] https://dev.opera.com/articles/efficient-javascript/?page=3#smoothspeed
pref("content.notify.interval", 100000); // (.10s); default=120000 (.12s)
// PREF: new tab preload
// [WARNING] Disabling this may cause a delay when opening a new tab in Firefox.
// [1] https://wiki.mozilla.org/Tiles/Technical_Documentation#Ping
// [2] https://github.com/arkenfox/user.js/issues/1556
//pref("browser.newtab.preload", true); // DEFAULT
// PREF: disable EcoQoS [WINDOWS]
// Background tab processes use efficiency mode on Windows 11 to limit resource use.
// [WARNING] Leave this alone, unless you're on Desktop and you rely on
// background tabs to have maximum performance.
// [1] https://devblogs.microsoft.com/performance-diagnostics/introducing-ecoqos/
// [2] https://bugzilla.mozilla.org/show_bug.cgi?id=1796525
// [3] https://bugzilla.mozilla.org/show_bug.cgi?id=1800412
// [4] https://reddit.com/r/firefox/comments/107fj69/how_can_i_disable_the_efficiency_mode_on_firefox/
pref("dom.ipc.processPriorityManager.backgroundUsesEcoQoS", false);
// PREF: control how tabs are loaded when a session is restored
// true=Tabs are not loaded until they are selected (default)
// false=Tabs begin to load immediately.
//pref("browser.sessionstore.restore_on_demand", true); // DEFAULT
//pref("browser.sessionstore.restore_pinned_tabs_on_demand", true);
//pref("browser.sessionstore.restore_tabs_lazily", true); // DEFAULT
// PREF: disable preSkeletonUI on startup [WINDOWS]
pref("browser.startup.preXulSkeletonUI", false);
// PREF: lazy load iframes
//pref("dom.iframe_lazy_loading.enabled", true); // DEFAULT [FF121+]
/****************************************************************************
* SECTION: GFX RENDERING TWEAKS *
****************************************************************************/
// PREF: Webrender tweaks
// [1] https://searchfox.org/mozilla-central/rev/6e6332bbd3dd6926acce3ce6d32664eab4f837e5/modules/libpref/init/StaticPrefList.yaml#6202-6219
// [2] https://hacks.mozilla.org/2017/10/the-whole-web-at-maximum-fps-how-webrender-gets-rid-of-jank/
// [3] https://www.reddit.com/r/firefox/comments/tbphok/is_setting_gfxwebrenderprecacheshaders_to_true/i0bxs2r/
// [4] https://www.reddit.com/r/firefox/comments/z5auzi/comment/ixw65gb?context=3
// [5] https://gist.github.com/RubenKelevra/fd66c2f856d703260ecdf0379c4f59db?permalink_comment_id=4532937#gistcomment-4532937
//pref("gfx.webrender.all", true); // enables WR + additional features
//pref("gfx.webrender.precache-shaders", true); // longer initial startup time
//pref("gfx.webrender.compositor", true); // DEFAULT WINDOWS macOS
//pref("gfx.webrender.compositor.force-enabled", true); // enforce
// PREF: if your hardware doesn't support Webrender, you can fallback to Webrender's software renderer
// [1] https://www.ghacks.net/2020/12/14/how-to-find-out-if-webrender-is-enabled-in-firefox-and-how-to-enable-it-if-it-is-not/
//pref("gfx.webrender.software", true); // Software Webrender uses CPU instead of GPU
//pref("gfx.webrender.software.opengl", true); // LINUX
// PREF: GPU-accelerated Canvas2D
// Use gpu-canvas instead of to skia-canvas.
// [WARNING] May cause issues on some Windows machines using integrated GPUs [2] [3]
// Add to your overrides if you have a dedicated GPU.
// [NOTE] Higher values will use more memory.
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1741501
// [2] https://github.com/yokoffing/Betterfox/issues/153
// [3] https://github.com/yokoffing/Betterfox/issues/198
//pref("gfx.canvas.accelerated", true); // DEFAULT macOS LINUX [FF110]; not compatible with WINDOWS integrated GPUs
pref("gfx.canvas.accelerated.cache-items", 4096); // default=2048; alt=8192
pref("gfx.canvas.accelerated.cache-size", 512); // default=256; alt=1024
pref("gfx.content.skia-font-cache-size", 20); // default=5; Chrome=20
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1239151#c2
// PREF: prefer GPU over CPU
// At best, the prefs do nothing on Linux/macOS.
// At worst, it'll result in crashes if the sandboxing is a WIP.
// [1] https://firefox-source-docs.mozilla.org/dom/ipc/process_model.html#gpu-process
//pref("layers.gpu-process.enabled", true); // DEFAULT WINDOWS
//pref("layers.gpu-process.force-enabled", true); // enforce
//pref("layers.mlgpu.enabled", true); // LINUX
//pref("media.hardware-video-decoding.enabled", true); // DEFAULT WINDOWS macOS
//pref("media.hardware-video-decoding.force-enabled", true); // enforce
//pref("media.gpu-process-decoder", true); // DEFAULT WINDOWS
//pref("media.ffmpeg.vaapi.enabled", true); // LINUX
// PREF: disable AV1 for hardware decodeable videos
// Firefox sometimes uses AV1 video decoding even to GPUs which do not support it.
// [1] https://www.reddit.com/r/AV1/comments/s5xyph/youtube_av1_codec_have_worse_quality_than_old_vp9
//pref("media.av1.enabled", false);
// PREF: hardware and software decoded video overlay [FF116+]
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1829063
// [2] https://phabricator.services.mozilla.com/D175993
//pref("gfx.webrender.dcomp-video-hw-overlay-win", true); // DEFAULT
//pref("gfx.webrender.dcomp-video-hw-overlay-win-force-enabled", true); // enforce
//pref("gfx.webrender.dcomp-video-sw-overlay-win", true); // DEFAULT
//pref("gfx.webrender.dcomp-video-sw-overlay-win-force-enabled", true); // enforce
/****************************************************************************
* SECTION: DISK CACHE *
****************************************************************************/
// PREF: disk cache
// [NOTE] If you think it helps performance, then feel free to override this.
// [SETTINGS] See about:cache
// More efficient to keep the browser cache instead of having to
// re-download objects for the websites you visit frequently.
// [1] https://www.janbambas.cz/new-firefox-http-cache-enabled/
//pref("browser.cache.disk.enable", true); // DEFAULT
// PREF: disk cache size
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913808,968106,968101
// [2] https://rockridge.hatenablog.com/entry/2014/09/15/165501
// [3] https://www.reddit.com/r/firefox/comments/17oqhw3/firefox_and_ssd_disk_consumption/
//pref("browser.cache.disk.smart_size.enabled", false); // force a fixed max cache size on disk
//pref("browser.cache.disk.capacity", 512000); // default=256000; size of disk cache; 1024000=1GB, 2048000=2GB
//pref("browser.cache.disk.max_entry_size", 51200); // DEFAULT (50 MB); maximum size of an object in disk cache
// PREF: Race Cache With Network (RCWN) [FF59+]
// [ABOUT] about:networking#rcwn
// Firefox concurrently sends requests for cached resources to both the
// local disk cache and the network server. The browser uses whichever
// result arrives first and cancels the other request. This approach sometimes
// loads pages faster because the network can be quicker than accessing the cache
// on a hard drive. When RCWN is enabled, the request might be served from
// the server even if you have valid entry in the cache. Set to false if your
// intention is to increase cache usage and reduce network usage.
// [1] https://slides.com/valentingosu/race-cache-with-network-2017
// [2] https://simonhearne.com/2020/network-faster-than-cache/
// [3] https://support.mozilla.org/en-US/questions/1267945
// [4] https://askubuntu.com/questions/1214862/36-syns-in-a-row-how-to-limit-firefox-connections-to-one-website
// [5] https://bugzilla.mozilla.org/show_bug.cgi?id=1622859
//pref("network.http.rcwn.enabled", true); // DEFAULT
// PREF: attempt to RCWN only if a resource is smaller than this size
//pref("network.http.rcwn.small_resource_size_kb", 256); // DEFAULT
// PREF: cache memory pool
// Cache v2 provides a memory pool that stores metadata (such as response headers)
// for recently read cache entries [1]. It is managed by a cache thread, and caches with
// metadata in the pool appear to be reused immediately.
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=986179
//pref("browser.cache.disk.metadata_memory_limit", 500); // default=250 (0.25 MB); limit of recent metadata we keep in memory for faster access
// PREF: number of chunks we preload ahead of read
// Large content such as images will load faster.
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913819,988318
// [2] http://www.janbambas.cz/new-firefox-http-cache-enabled/
//pref("browser.cache.disk.preload_chunk_count", 4); // DEFAULT
// PREF: the time period used to re-compute the frecency value of cache entries
// The frequency algorithm is used to select entries, and entries that are recently
// saved or frequently reused are retained. The frecency value determines how
// frequently a page has been accessed and is used by Firefox's cache algorithm.
// The frequency algorithm is used to select entries, and entries that are recently
// saved or frequently reused are retained. The frecency value determines how
// often a page has been accessed and is used by Firefox's cache algorithm.
// When the memory pool becomes full, the oldest data is purged. By default,
// data older than 6 hours is treated as old.
// [1] https://bugzilla.mozilla.org/buglist.cgi?bug_id=942835,1012327
// [2] https://bugzilla.mozilla.org/buglist.cgi?bug_id=913808,968101
//pref("browser.cache.frecency_half_life_hours", 6); // DEFAULT
// PREF: memory limit (in kB) for new cache data not yet written to disk
// Writes to the cache are buffered and written to disk on background with low priority.
// With a slow persistent storage, these buffers may grow when data is coming
// fast from the network. When the amount of unwritten data is exceeded, new
// writes will simply fail. We have two buckets, one for important data
// (priority) like html, css, fonts and js, and one for other data like images, video, etc.
//pref("browser.cache.disk.max_chunks_memory_usage", 40960); // DEFAULT (40 MB)
//pref("browser.cache.disk.max_priority_chunks_memory_usage", 40960); // DEFAULT (40 MB)
// PREF: how often to validate document in cache
// [1] https://searchfox.org/mozilla-release/source/modules/libpref/init/StaticPrefList.yaml#1092-1096
// 0 = once-per-session
// 3 = when-appropriate/automatically (default)
//pref("browser.cache.check_doc_frequency", 3); // DEFAULT
// PREF: enforce free space checks
// When smartsizing is disabled, we could potentially fill all disk space by
// cache data when the disk capacity is not set correctly. To avoid that, we
// check the free space every time we write some data to the cache. The free
// space is checked against two limits. Once the soft limit is reached we start
// evicting the least useful entries, when we reach the hard limit writing to
// the entry fails.
//pref("browser.cache.disk.free_space_soft_limit", 10240); // default=5120 (5 MB)
//pref("browser.cache.disk.free_space_hard_limit", 2048); // default=1024 (1 MB)
// PREF: compression level for cached JavaScript bytecode [FF102+]
// [1] https://github.com/yokoffing/Betterfox/issues/247
// 0 = do not compress (default)
// 1 = minimal compression
// 9 = maximal compression
pref("browser.cache.jsbc_compression_level", 3);
// PREF: strategy to use for when the bytecode should be encoded and saved [TESTING ONLY]
// -1 makes page load times marginally longer when a page is being loaded for the first time.
// Subsequent reload of websites will be much much faster.
// [1] https://searchfox.org/mozilla-release/source/modules/libpref/init/StaticPrefList.yaml#3461-3488
// [2] https://www.reddit.com/r/firefox/comments/12786yv/improving_performance_in_firefox_android_part_ii/
// -1 = saved as soon as the script is seen for the first time, independently of the size or last access time
// 0 = saved in order to minimize the page-load time (default)
//pref("dom.script_loader.bytecode_cache.enabled", true); // DEFAULT
//pref("dom.script_loader.bytecode_cache.strategy", 0); // DEFAULT
/****************************************************************************
* SECTION: MEMORY CACHE *
****************************************************************************/
// PREF: memory cache
// The "automatic" size selection (default) is based on a decade-old table
// that only contains settings for systems at or below 8GB of system memory [1].
// Waterfox G6 allows it to go above 8GB machines [3].
// Value can be up to the max size of an unsigned 64-bit integer.
// -1=Automatically decide the maximum memory to use to cache decoded images,
// messages, and chrome based on the total amount of RAM
// [1] https://kb.mozillazine.org/Browser.cache.memory.capacity#-1
// [2] https://searchfox.org/mozilla-central/source/netwerk/cache2/CacheObserver.cpp#94-125
// [3] https://github.com/WaterfoxCo/Waterfox/commit/3fed16932c80a2f6b37d126fe10aed66c7f1c214
//pref("browser.cache.memory.capacity", -1); // DEFAULT; 256000=256 MB; 512000=500 MB; 1048576=1GB, 2097152=2GB
//pref("browser.cache.memory.max_entry_size", 10240); // (10 MB); default=5120 (5 MB)
// PREF: amount of Back/Forward cached pages stored in memory for each tab
// Pages that were recently visited are stored in memory in such a way
// that they don't have to be re-parsed. This improves performance
// when pressing Back and Forward. This pref limits the maximum
// number of pages stored in memory. If you are not using the Back
// and Forward buttons that much, but rather using tabs, then there
// is no reason for Firefox to keep memory for this.
// -1=determine automatically (8 pages)
// [1] https://kb.mozillazine.org/Browser.sessionhistory.max_total_viewers#Possible_values_and_their_effects
//pref("browser.sessionhistory.max_total_viewers", 4);
/****************************************************************************
* SECTION: MEDIA CACHE *
****************************************************************************/
// PREF: media disk cache
//pref("media.cache_size", 512000); // DEFAULT
// PREF: media memory cache
// [1] https://hg.mozilla.org/mozilla-central/file/tip/modules/libpref/init/StaticPrefList.yaml#l9652
// [2] https://github.com/arkenfox/user.js/pull/941
pref("media.memory_cache_max_size", 65536); // default=8192; AF=65536; alt=131072
//pref("media.memory_caches_combined_limit_kb", 524288); // DEFAULT; alt=1048576
//pref("media.memory_caches_combined_limit_pc_sysmem", 5); // DEFAULT; alt=10; the percentage of system memory that Firefox can use for media caches
// PREF: Media Source Extensions (MSE) web standard
// Disabling MSE allows videos to fully buffer, but you're limited to 720p.
// [WARNING] Disabling MSE may break certain videos.
// false=Firefox plays the old WebM format
// true=Firefox plays the new WebM format (default)
// [1] https://support.mozilla.org/en-US/questions/1008271
//pref("media.mediasource.enabled", true); // DEFAULT
// PREF: adjust video buffering periods when not using MSE (in seconds)
// [NOTE] Does not affect videos over 720p since they use DASH playback [1]
// [1] https://lifehacker.com/preload-entire-youtube-videos-by-disabling-dash-playbac-1186454034
pref("media.cache_readahead_limit", 7200); // 120 min; default=60; stop reading ahead when our buffered data is this many seconds ahead of the current playback
pref("media.cache_resume_threshold", 3600); // 60 min; default=30; when a network connection is suspended, don't resume it until the amount of buffered data falls below this threshold
/****************************************************************************
* SECTION: IMAGE CACHE *
****************************************************************************/
// PREF: image cache
//pref("image.cache.size", 5242880); // DEFAULT; in MiB; alt=10485760 (cache images up to 10MiB in size)
pref("image.mem.decode_bytes_at_a_time", 32768); // default=16384; alt=65536; chunk size for calls to the image decoders
// PREF: set minimum timeout to unmap shared surfaces since they have been last used
// This is only used on 32-bit builds of Firefox where there is meaningful
// virtual address space pressure.
// [1] https://phabricator.services.mozilla.com/D109440
// [2] https://bugzilla.mozilla.org/show_bug.cgi?id=1699224
//pref("image.mem.shared.unmap.min_expiration_ms", 120000); // default=60000; minimum timeout to unmap shared surfaces since they have been last used
/****************************************************************************
* SECTION: NETWORK *
****************************************************************************/
// PREF: use bigger packets
// [WARNING] Cannot open HTML files bigger than 4MB if changed [2].
// Reduce Firefox's CPU usage by requiring fewer application-to-driver data transfers.
// However, it does not affect the actual packet sizes transmitted over the network.
// [1] https://www.mail-archive.com/support-seamonkey@lists.mozilla.org/msg74561.html
// [2] https://github.com/yokoffing/Betterfox/issues/279
//pref("network.buffer.cache.size", 262144); // 256 kb; default=32768 (32 kb)
//pref("network.buffer.cache.count", 128); // default=24
// PREF: increase the absolute number of HTTP connections
// [1] https://kb.mozillazine.org/Network.http.max-connections
// [2] https://kb.mozillazine.org/Network.http.max-persistent-connections-per-server
// [3] https://www.reddit.com/r/firefox/comments/11m2yuh/how_do_i_make_firefox_use_more_of_my_900_megabit/jbfmru6/
pref("network.http.max-connections", 1800); // default=900
pref("network.http.max-persistent-connections-per-server", 10); // default=6; download connections; anything above 10 is excessive
pref("network.http.max-urgent-start-excessive-connections-per-host", 5); // default=3
//pref("network.http.max-persistent-connections-per-proxy", 48); // default=32
//pref("network.websocket.max-connections", 200); // DEFAULT
// PREF: pacing requests [FF23+]
// Controls how many HTTP requests are sent at a time.
// Pacing HTTP requests can have some benefits, such as reducing network congestion,
// improving web page loading speed, and avoiding server overload.
// Pacing requests adds a slight delay between requests to throttle them.
// If you have a fast machine and internet connection, disabling pacing
// may provide a small speed boost when loading pages with lots of requests.
// false=Firefox will send as many requests as possible without pacing
// true=Firefox will pace requests (default)
pref("network.http.pacing.requests.enabled", false);
//pref("network.http.pacing.requests.min-parallelism", 10); // default=6
//pref("network.http.pacing.requests.burst", 14); // default=10
// PREF: increase DNS cache
// [1] https://developer.mozilla.org/en-US/docs/Web/Performance/Understanding_latency
//pref("network.dnsCacheEntries", 1000); // default=400
// PREF: adjust DNS expiration time
// [ABOUT] about:networking#dns
// [NOTE] These prefs will be ignored by DNS resolver if using DoH/TRR.
pref("network.dnsCacheExpiration", 3600); // keep entries for 1 hour
//pref("network.dnsCacheExpirationGracePeriod", 240); // default=60; cache DNS entries for 4 minutes after they expire
// PREF: the number of threads for DNS
//pref("network.dns.max_high_priority_threads", 40); // DEFAULT [FF 123?]
//pref("network.dns.max_any_priority_threads", 24); // DEFAULT [FF 123?]
// PREF: increase TLS token caching
pref("network.ssl_tokens_cache_capacity", 10240); // default=2048; more TLS token caching (fast reconnects)
/****************************************************************************
* SECTION: SPECULATIVE LOADING *
****************************************************************************/
// These are connections that are not explicitly asked for (e.g., clicked on).
// [1] https://developer.mozilla.org/en-US/docs/Web/Performance/Speculative_loading
// [NOTE] FF85+ partitions (isolates) pooled connections, prefetch connections,
// pre-connect connections, speculative connections, TLS session identifiers,
// and other connections. We can take advantage of the speed of pre-connections
// while preserving privacy. Users may relax hardening to maximize their preference.
// For more information, see SecureFox: "PREF: State Paritioning" and "PREF: Network Partitioning".
// [NOTE] To activate and increase network predictions, go to settings in uBlock Origin and uncheck:
// - "Disable pre-fetching (to prevent any connection for blocked network requests)"
// [NOTE] Add prefs to "MY OVERRIDES" section and uncomment to enable them in your user.js.
// PREF: link-mouseover opening connection to linked server
// When accessing content online, devices use sockets as endpoints.
// The global limit on half-open sockets controls how many speculative
// connection attempts can occur at once when starting new connections [3].
// If the user follows through, pages can load faster since some
// work was done in advance. Firefox opens predictive connections
// to sites when hovering over New Tab thumbnails or starting a
// URL Bar search [1] and hyperlinks within a page [2].
// [NOTE] DNS (if enabled), TCP, and SSL handshakes are set up in advance,
// but page contents are not downloaded until a click on the link is registered.
// [1] https://support.mozilla.org/en-US/kb/how-stop-firefox-making-automatic-connections?redirectslug=how-stop-firefox-automatically-making-connections&redirectlocale=en-US#:~:text=Speculative%20pre%2Dconnections
// [2] https://news.slashdot.org/story/15/08/14/2321202/how-to-quash-firefoxs-silent-requests
// [3] https://searchfox.org/mozilla-central/rev/028c68d5f32df54bca4cf96376f79e48dfafdf08/modules/libpref/init/all.js#1280-1282
// [4] https://www.keycdn.com/blog/resource-hints#prefetch
// [5] https://3perf.com/blog/link-rels/#prefetch
//pref("network.http.speculative-parallel-limit", 20); // DEFAULT (FF127+?)
// PREF: DNS prefetching for HTMLLinkElement <link rel="dns-prefetch">
// Used for cross-origin connections to provide small performance improvements.
// You can enable rel=dns-prefetch for the HTTPS document without prefetching
// DNS for anchors, whereas the latter makes more specualtive requests [5].
// [1] https://bitsup.blogspot.com/2008/11/dns-prefetching-for-firefox.html
// [2] https://css-tricks.com/prefetching-preloading-prebrowsing/#dns-prefetching
// [3] https://www.keycdn.com/blog/resource-hints#2-dns-prefetching
// [4] http://www.mecs-press.org/ijieeb/ijieeb-v7-n5/IJIEEB-V7-N5-2.pdf
// [5] https://bugzilla.mozilla.org/show_bug.cgi?id=1596935#c28
pref("network.dns.disablePrefetch", true);
pref("network.dns.disablePrefetchFromHTTPS", true); // [FF127+ false]
// PREF: DNS prefetch for HTMLAnchorElement (speculative DNS)
// Disable speculative DNS calls to prevent Firefox from resolving
// hostnames for other domains linked on a page. This may eliminate
// unnecessary DNS lookups, but can increase latency when following external links.
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1596935#c28
// [2] https://github.com/arkenfox/user.js/issues/1870#issuecomment-2220773972
//pref("dom.prefetch_dns_for_anchor_http_document", false); // [FF128+]
//pref("dom.prefetch_dns_for_anchor_https_document", false); // DEFAULT [FF128+]
// PREF: enable <link rel="preconnect"> tag and Link: rel=preconnect response header handling
//pref("network.preconnect", true); // DEFAULT
// PREF: preconnect to the autocomplete URL in the address bar
// Whether to warm up network connections for autofill or search results.
// Firefox preloads URLs that autocomplete when a user types into the address bar.
// Connects to destination server ahead of time, to avoid TCP handshake latency.
// [NOTE] Firefox will perform DNS lookup (if enabled) and TCP and TLS handshake,
// but will not start sending or receiving HTTP data.
// [1] https://www.ghacks.net/2017/07/24/disable-preloading-firefox-autocomplete-urls/
//pref("browser.urlbar.speculativeConnect.enabled", false);
// PREF: mousedown speculative connections on bookmarks and history [FF98+]
// Whether to warm up network connections for places:menus and places:toolbar.
//pref("browser.places.speculativeConnect.enabled", false);
// PREF: network module preload <link rel="modulepreload"> [FF115+]
// High-priority loading of current page JavaScript modules.
// Used to preload high-priority JavaScript modules for strategic performance improvements.
// Module preloading allows developers to fetch JavaScript modules and dependencies
// earlier to accelerate page loads. The browser downloads, parses, and compiles modules
// referenced by links with this attribute in parallel with other resources, rather
// than sequentially waiting to process each. Preloading reduces overall download times.
// Browsers may also automatically preload dependencies without firing extra events.
// Unlike other pre-connection tags (except rel=preload), this tag is mandatory for the browser.
// [1] https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/modulepreload
//pref("network.modulepreload", true); // DEFAULT
// PREF: link prefetching <link rel="prefetch">
// Pre-populates the HTTP cache by prefetching same-site future navigation
// resources or subresources used on those pages.
// Enabling link prefetching allows Firefox to preload pages tagged as important.
// The browser prefetches links with the prefetch-link tag, fetching resources
// likely needed for the next navigation at low priority. When clicking a link
// or loading a new page, prefetching stops and discards hints. Prefetching
// downloads resources without executing them.
// [NOTE] Since link prefetch uses the HTTP cache, it has a number of issues
// with document prefetches, such as being potentially blocked by Cache-Control headers
// (e.g. cache partitioning).
// [1] https://developer.mozilla.org/en-US/docs/Glossary/Prefetch
// [2] http://www.mecs-press.org/ijieeb/ijieeb-v7-n5/IJIEEB-V7-N5-2.pdf
// [3] https://timkadlec.com/remembers/2020-06-17-prefetching-at-this-age/
// [4] https://3perf.com/blog/link-rels/#prefetch
// [5] https://developer.mozilla.org/docs/Web/HTTP/Link_prefetching_FAQ
pref("network.prefetch-next", false);
// PREF: Fetch Priority API [FF119+]
// Indicates whether the `fetchpriority` attribute for elements which support it.
// [1] https://web.dev/articles/fetch-priority
// [2] https://nitropack.io/blog/post/priority-hints
// [2] https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/fetchPriority
// [3] https://developer.mozilla.org/en-US/docs/Web/API/HTMLLinkElement/fetchPriority
//pref("network.fetchpriority.enabled", true);
// PREF: early hints [FF120+]
// [1] https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103
// [2] https://developer.chrome.com/blog/early-hints/
// [3] https://blog.cloudflare.com/early-hints/
// [4] https://blog.cloudflare.com/early-hints-performance/
//pref("network.early-hints.enabled", true);
// PREF: `Link: rel=preconnect` in 103 Early Hint response [FF120+]
// Used to warm most critical cross-origin connections to provide
// performance improvements when connecting to them.
// [NOTE] When 0, this is limited by "network.http.speculative-parallel-limit".
//pref("network.early-hints.preconnect.enabled", true);
//pref("network.early-hints.preconnect.max_connections", 10); // DEFAULT
// PREF: Network Predictor (NP)
// When enabled, it trains and uses Firefox's algorithm to preload page resource
// by tracking past page resources. It uses a local file (history) of needed images,
// scripts, etc. to request them preemptively when navigating.
// [NOTE] By default, it only preconnects, doing DNS, TCP, and SSL handshakes.
// No data sends until clicking. With "network.predictor.enable-prefetch" enabled,
// it also performs prefetches.
// [1] https://wiki.mozilla.org/Privacy/Reviews/Necko
// [2] https://www.ghacks.net/2014/05/11/seer-disable-firefox/
// [3] https://github.com/dillbyrne/random-agent-spoofer/issues/238#issuecomment-110214518
// [4] https://www.igvita.com/posa/high-performance-networking-in-google-chrome/#predictor
pref("network.predictor.enabled", false);
// PREF: Network Predictor fetch for resources ahead of time
// Prefetch page resources based on past user behavior.
//pref("network.predictor.enable-prefetch", false); // DEFAULT
// PREF: make Network Predictor active when hovering over links
// When hovering over links, Network Predictor uses past resource history to
// preemptively request what will likely be needed instead of waiting for the document.
// Predictive connections automatically open when hovering over links to speed up
// loading, starting some work in advance.
//pref("network.predictor.enable-hover-on-ssl", false); // DEFAULT
// PREF: assign Network Predictor confidence levels
// [NOTE] Keep in mind that Network Predictor must LEARN your browsing habits.
// Editing these lower will cause more speculative connections to occur,
// which reduces accuracy over time and has privacy implications.
//pref("network.predictor.preresolve-min-confidence", 60); // DEFAULT
//pref("network.predictor.preconnect-min-confidence", 90); // DEFAULT
//pref("network.predictor.prefetch-min-confidence", 100); // DEFAULT
// PREF: other Network Predictor values
// [NOTE] Keep in mmind that Network Predictor must LEARN your browsing habits.
//pref("network.predictor.prefetch-force-valid-for", 10); // DEFAULT; how long prefetched resources are considered valid and usable (in seconds) for the prediction modeling
//pref("network.predictor.prefetch-rolling-load-count", 10); // DEFAULT; the maximum number of resources that Firefox will prefetch in memory at one time based on prediction modeling
//pref("network.predictor.max-resources-per-entry", 250); // default=100
//pref("network.predictor.max-uri-length", 1000); // default=500
/****************************************************************************
* SECTION: EXPERIMENTAL *
****************************************************************************/
// PREF: CSS Masonry Layout [NIGHTLY]
// [1] https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout/Masonry_Layout
pref("layout.css.grid-template-masonry-value.enabled", true);
// PREF: Prioritized Task Scheduling API [NIGHTLY]
// [1] https://blog.mozilla.org/performance/2022/06/02/prioritized-task-scheduling-api-is-prototyped-in-nightly/
// [2] https://medium.com/airbnb-engineering/building-a-faster-web-experience-with-the-posttask-scheduler-276b83454e91
pref("dom.enable_web_task_scheduling", true);
// PREF: HTML Sanitizer API [NIGHTLY]
// [1] https://developer.mozilla.org/en-US/docs/Web/API/Sanitizer
// [2] https://caniuse.com/mdn-api_sanitizer
pref("dom.security.sanitizer.enabled", true);
// PREF: WebGPU [HIGHLY EXPERIMENTAL!]
// [WARNING] Do not enable unless you are a web developer!
// [1] https://bugzilla.mozilla.org/show_bug.cgi?id=1746245
// [2] https://developer.chrome.com/docs/web-platform/webgpu/
// [3] https://github.com/gpuweb/gpuweb/wiki/Implementation-Status
// [4] https://hacks.mozilla.org/2020/04/experimental-webgpu-in-firefox/
//pref("dom.webgpu.enabled", true);
//pref("gfx.webgpu.force-enabled", true); // enforce
// enable WebGPU indirect draws/dispatches:
//pref("dom.webgpu.indirect-dispatch.enabled", true);
/****************************************************************************
* SECTION: TAB UNLOAD *
****************************************************************************/
// PREF: unload tabs on low memory
// [ABOUT] about:unloads
// Firefox will detect if your computers memory is running low (less than 200MB)
// and suspend tabs that you have not used in awhile.
// [1] https://support.mozilla.org/en-US/kb/unload-inactive-tabs-save-system-memory-firefox
// [2] https://hacks.mozilla.org/2021/10/tab-unloading-in-firefox-93/
//pref("browser.tabs.unloadOnLowMemory", true); // DEFAULT
// PREF: determine when tabs unload [WINDOWS] [LINUX]
// Notify TabUnloader or send the memory pressure if the memory resource
// notification is signaled AND the available commit space is lower than
// this value.
// Set this to some high value, e.g. 2/3 of total memory available in your system:
// 4GB=2640, 8GB=5280, 16GB=10560, 32GB=21120, 64GB=42240
// [1] https://dev.to/msugakov/taking-firefox-memory-usage-under-control-on-linux-4b02
//pref("browser.low_commit_space_threshold_mb", 2640); // default=200; WINDOWS LINUX
// PREF: determine when tabs unload [LINUX]
// On Linux, Firefox checks available memory in comparison to total memory,
// and use this percent value (out of 100) to determine if Firefox is in a
// low memory scenario.
// [1] https://dev.to/msugakov/taking-firefox-memory-usage-under-control-on-linux-4b02
//pref("browser.low_commit_space_threshold_percent", 33); // default=5; LINUX
// PREF: determine how long (in ms) tabs are inactive before they unload
// 60000=1min; 300000=5min; 600000=10min (default)
//pref("browser.tabs.min_inactive_duration_before_unload", 300000); // 5min; default=600000
/****************************************************************************
* SECTION: PROCESS COUNT *
****************************************************************************/
// PREF: process count
// [ABOUT] View in about:processes.
// With Firefox Quantum (2017), CPU cores = processCount. However, since the
// introduction of Fission [2], the number of website processes is controlled
// by processCount.webIsolated. Disabling fission.autostart or changing
// fission.webContentIsolationStrategy reverts control back to processCount.
// [1] https://www.reddit.com/r/firefox/comments/r69j52/firefox_content_process_limit_is_gone/
// [2] https://firefox-source-docs.mozilla.org/dom/ipc/process_model.html#web-content-processes
//pref("dom.ipc.processCount", 8); // DEFAULT; Shared Web Content
//pref("dom.ipc.processCount.webIsolated", 1); // default=4; Isolated Web Content
// PREF: use one process for process preallocation cache
//pref("dom.ipc.processPrelaunch.fission.number", 1); // default=3; Process Preallocation Cache
// PREF: configure process isolation
// [1] https://hg.mozilla.org/mozilla-central/file/tip/dom/ipc/ProcessIsolation.cpp#l53
// [2] https://www.reddit.com/r/firefox/comments/r69j52/firefox_content_process_limit_is_gone/
// OPTION 1: isolate all websites
// Web content is always isolated into its own `webIsolated` content process
// based on site-origin, and will only load in a shared `web` content process
// if site-origin could not be determined.
//pref("fission.webContentIsolationStrategy", 1); // DEFAULT
//pref("browser.preferences.defaultPerformanceSettings.enabled", true); // DEFAULT
//pref("dom.ipc.processCount.webIsolated", 1); // one process per site origin
// OPTION 2: isolate only "high value" websites
// Only isolates web content loaded by sites which are considered "high
// value". A site is considered high value if it has been granted a
// `highValue*` permission by the permission manager, which is done in
// response to certain actions.
//pref("fission.webContentIsolationStrategy", 2);
//pref("browser.preferences.defaultPerformanceSettings.enabled", false);
//pref("dom.ipc.processCount.webIsolated", 1); // one process per site origin (high value)
//pref("dom.ipc.processCount", 8); // determine by number of CPU cores/processors
// OPTION 3: do not isolate websites
// All web content is loaded into a shared `web` content process. This is
// similar to the non-Fission behavior; however, remote subframes may still
// be used for sites with special isolation behavior, such as extension or
// mozillaweb content processes.
//pref("fission.webContentIsolationStrategy", 0);
//pref("browser.preferences.defaultPerformanceSettings.enabled", false);
//pref("dom.ipc.processCount", 8); // determine by number of CPU cores/processors

View File

@@ -19,9 +19,6 @@ pref("devtools.debugger.prompt-connection", false);
// Theme
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
pref('browser.compactmode.show', true);
pref('browser.display.focus_ring_on_anything', true);
pref('browser.display.focus_ring_style', 0);
pref('browser.display.focus_ring_width', 0);
pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
pref('browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled', true);
@@ -72,6 +69,7 @@ pref('zen.view.compact', false);
pref('zen.view.compact.hide-toolbar', false);
pref('zen.view.sidebar-expanded', false);
pref('zen.view.sidebar-expanded.show-button', true);
pref('zen.view.sidebar-expanded.max-width', 400);
// Pref to enable the new profiles (TODO: Check this out!)
//pref("browser.profiles.enabled", true);
@@ -79,7 +77,7 @@ pref('zen.view.sidebar-expanded.show-button', true);
// Zen Sidebar
pref('zen.sidebar.data', "{\"data\":\n {\"p1\":{\n \"url\":\"https://www.wikipedia.org/\"\n },\n\"p2\":{\n \"url\":\"https://m.twitter.com/\",\n\"ua\": true\n },\n\"p3\": {\n \"url\": \"https://www.youtube.com/\",\n\"ua\": true\n},\n\"p4\": {\n \"url\": \"https://translate.google.com/\",\n\"ua\": true\n},\n\"p5\": {\n \"url\": \"https://todoist.com/\",\n\"ua\": true\n}},\n\"index\":[\"p1\",\"p2\",\"p3\",\"p4\",\"p5\"]}");
pref('zen.sidebar.enabled', true);
pref('zen.sidebar.floating', true);
pref('zen.sidebar.close-on-blur', true);
// Zen Split View
pref('zen.splitView.working', false);
@@ -91,8 +89,8 @@ pref('zen.workspaces.enabled', true);
pref('zen.watermark.enabled', true);
// Smooth scrolling
user_pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
user_pref('general.smoothScroll', true); // DEFAULT
pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
pref('general.smoothScroll', true); // DEFAULT
// Privacy
pref('dom.private-attribution.submission.enabled', false);
@@ -110,5 +108,8 @@ pref('browser.migrate.vivaldi.enabled', true);
pref('browser.migrate.opera-gx.enabled', true);
pref('browser.migrate.opera.enabled', true);
#include fast-fox.js
// DNS
// pref('network.proxy.type', 0);
// pref('network.trr.mode', 5);
#include better-fox.js

View File

@@ -31,10 +31,13 @@ var gZenBrowserManagerSidebar = {
return JSON.parse(services);
},
get shouldCloseOnBlur() {
return Services.prefs.getBoolPref("zen.sidebar.close-on-blur");
},
listenForPrefChanges() {
Services.prefs.addObserver("zen.sidebar.data", this.handleEvent.bind(this));
Services.prefs.addObserver("zen.sidebar.enabled", this.handleEvent.bind(this));
Services.prefs.addObserver("zen.sidebar.floating", this.handleEvent.bind(this));
let sidebar = document.getElementById("zen-sidebar-web-panel");
this.splitterElement.addEventListener("mousedown", (function(event) {
@@ -102,6 +105,10 @@ var gZenBrowserManagerSidebar = {
this.handleEvent();
},
get isFloating() {
return document.getElementById("zen-sidebar-web-panel").hasAttribute("pinned");
},
handleEvent() {
this._hasChangedConfig = true;
this.update();
@@ -109,10 +116,11 @@ var gZenBrowserManagerSidebar = {
// https://stackoverflow.com/questions/11565471/removing-event-listener-which-was-added-with-bind
var clickOutsideHandler = this._handleClickOutside.bind(this);
if (Services.prefs.getBoolPref("zen.sidebar.floating") && !this._hasRegisteredPinnedClickOutside) {
let isFloating = this.isFloating;
if (isFloating && !this._hasRegisteredPinnedClickOutside) {
document.addEventListener("mouseup", clickOutsideHandler);
this._hasRegisteredPinnedClickOutside = true;
} else if (!Services.prefs.getBoolPref("zen.sidebar.floating") && this._hasRegisteredPinnedClickOutside) {
} else if (!isFloating && this._hasRegisteredPinnedClickOutside) {
document.removeEventListener("mouseup", clickOutsideHandler);
this._hasRegisteredPinnedClickOutside = false;
}
@@ -129,7 +137,7 @@ var gZenBrowserManagerSidebar = {
_handleClickOutside(event) {
let sidebar = document.getElementById("zen-sidebar-web-panel");
if (!sidebar.hasAttribute("pinned") || !this._currentPanel || this._isDragging) {
if (!sidebar.hasAttribute("pinned") || this._isDragging || !this.shouldCloseOnBlur) {
return;
}
let target = event.target;
@@ -420,7 +428,6 @@ var gZenBrowserManagerSidebar = {
} else {
this._setPinnedToElements();
}
Services.prefs.setBoolPref("zen.sidebar.floating", sidebar.hasAttribute("pinned"));
this.update();
},
@@ -511,9 +518,9 @@ var gZenBrowserManagerSidebar = {
if (browser) {
browser.remove();
}
this._closeSidebarPanel();
this.close();
this._currentPanel = null;
this._lastOpenedPanel = null;
this.update();
Services.prefs.setStringPref("zen.sidebar.data", JSON.stringify(data));
},

View File

@@ -26,9 +26,26 @@ var gZenUIManager = {
var gZenVerticalTabsManager = {
init() {
//Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this));
//Services.prefs.addObserver('zen.view.sidebar-expanded', this._updateEvent.bind(this));
Services.prefs.addObserver('zen.view.sidebar-expanded', this._updateEvent.bind(this));
Services.prefs.addObserver('zen.view.sidebar-expanded.max-width', this._updateEvent.bind(this));
this._updateMaxWidth();
},
_updateEvent() {
this._updateMaxWidth();
},
_updateMaxWidth() {
let isCompactMode = Services.prefs.getBoolPref('zen.view.compact');
let expanded = this.expanded;
let maxWidth = Services.prefs.getIntPref('zen.view.sidebar-expanded.max-width');
let toolbox = document.getElementById('navigator-toolbox');
if (expanded && !isCompactMode) {
toolbox.style.maxWidth = `${maxWidth}px`;
} else {
toolbox.style.removeProperty('maxWidth');
}
},
get expanded() {
return Services.prefs.getBoolPref('zen.view.sidebar-expanded');
@@ -56,9 +73,5 @@ var gZenVerticalTabsManager = {
toggleExpand() {
let expanded = !this.expanded;
Services.prefs.setBoolPref('zen.view.sidebar-expanded', expanded);
let toolbox = document.getElementById('navigator-toolbox');
toolbox.removeAttribute('width');
toolbox.style.removeProperty('width');
},
};

View File

@@ -403,7 +403,7 @@ var ZenWorkspaces = {
document.querySelector(`#PanelUI-zen-workspaces [zen-workspace-id="${this._contextMenuId}"] .zen-workspace-actions`).setAttribute("active", "true");
const workspaces = await this._workspaces();
let deleteMenuItem = document.getElementById("context_zenDeleteWorkspace");
if (workspaces.workspaces.length <= 1) {
if (workspaces.workspaces.length <= 1 || workspaces.workspaces.find(workspace => workspace.uuid === this._contextMenuId).default) {
deleteMenuItem.setAttribute("disabled", "true");
} else {
deleteMenuItem.removeAttribute("disabled");

View File

@@ -1,7 +1,16 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index 390a1300a1213af2b411ba09c67e3c25750ee6c3..7c80c54dd43b5414bf5ea9101d53431c0b4a140b 100644
index 390a1300a1213af2b411ba09c67e3c25750ee6c3..253d7abfcc1ade419c8f70289719cdc53898cab4 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -2,7 +2,7 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-<toolbox id="navigator-toolbox">
+<toolbox id="navigator-toolbox" persist="width style">
<vbox id="titlebar">
<!-- Menu -->
@@ -32,10 +32,11 @@
<hbox class="titlebar-spacer" type="pre-tabs"/>

View File

@@ -1,5 +1,5 @@
<box id="zen-sidebar-web-panel-wrapper">
<box id="zen-sidebar-web-panel" class="chromeclass-extrachrome" hidden="true">
<box id="zen-sidebar-web-panel" class="chromeclass-extrachrome" hidden="true" persist="pinned style hidden">
<toolbar mode="icons" flex="1" id="zen-sidebar-web-header">
<hbox>
<toolbarbutton id="zen-sidebar-web-panel-back" class="toolbarbutton-1 chromeclass-toolbar-additional" oncommand="gZenBrowserManagerSidebar.back();"/>

View File

@@ -106,8 +106,7 @@ var ZenThemeModifier = {
console.log("ZenThemeModifier: init browser layout");
const kNavbarItems = [
"nav-bar",
"PersonalToolbar",
"tab-notification-deck-template"
"PersonalToolbar"
];
const kSeparatorId = "zen-website-and-native-separator";
const kNewContainerId = "zen-appcontent-navbar-container";

View File

@@ -1,5 +1,5 @@
diff --git a/browser/components/customizableui/CustomizeMode.sys.mjs b/browser/components/customizableui/CustomizeMode.sys.mjs
index 7b4ee373be2cb3e11b480b2c0ad59cae1c43fc07..0f89293bc568fa994fc6f251478ec3dfac5ead39 100644
index 41f347130e754ad0ee3416c1a3881211c4d2f777..9f906fd5f11731025abdf55eb5e60a824f8dd81f 100644
--- a/browser/components/customizableui/CustomizeMode.sys.mjs
+++ b/browser/components/customizableui/CustomizeMode.sys.mjs
@@ -354,7 +354,7 @@ CustomizeMode.prototype = {
@@ -7,7 +7,7 @@ index 7b4ee373be2cb3e11b480b2c0ad59cae1c43fc07..0f89293bc568fa994fc6f251478ec3df
let customizer = document.getElementById("customization-container");
- let browser = document.getElementById("browser");
+ let browser = document.getElementById("tabbrowser-tabbox");
+ let browser = document.getElementById("tabbrowser-tabbox"); // ZEN: This fixes customizing mode!!! Dont remove it
browser.hidden = true;
customizer.hidden = false;
@@ -16,7 +16,7 @@ index 7b4ee373be2cb3e11b480b2c0ad59cae1c43fc07..0f89293bc568fa994fc6f251478ec3df
let customizer = document.getElementById("customization-container");
- let browser = document.getElementById("browser");
+ let browser = document.getElementById("tabbrowser-tabbox");
+ let browser = document.getElementById("tabbrowser-tabbox"); // ZEN: This fixes customizing mode!!! Dont remove it
customizer.hidden = true;
browser.hidden = false;

View File

@@ -64,6 +64,11 @@ Preferences.addAll([
type: "bool",
default: true,
},
{
id: "zen.sidebar.close-on-blur",
type: "bool",
default: true,
},
{
id: "zen.view.compact",
type: "bool",

View File

@@ -45,6 +45,11 @@
<checkbox id="zenLooksAndFeelUseThemedToolbar"
data-l10n-id="zen-side-panels-enabled"
preference="zen.sidebar.enabled"/>
<hbox class="indent">
<checkbox id="zenLooksAndFeelSidebarCloseOnBlur"
data-l10n-id="zen-side-panels-close-on-blur"
preference="zen.sidebar.close-on-blur"/>
</hbox>
</groupbox>
<hbox id="zenVerticalTabsCategory"

View File

@@ -4,45 +4,121 @@ License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
:root {
--noise: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEEAAABBCAMAAAC5KTl3AAAAgVBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABtFS1lAAAAK3RSTlMWi3QSa1uQOKBWCTwcb6V4gWInTWYOqQSGfa6XLyszmyABlFFJXySxQ0BGn2PQBgAAC4NJREFUWMMV1kWO5UAQRdFk5kwzs/33v8Cunr7ZUehKAdaRUAse99ozDjF5BqswrPKm7btzJ2tRziN3rMYXC236humIV5Our7nHWnVdFOBojW2XVnkeu1IZHNJH5OPHj9TjgVxBGBwAAmp60WoA1gBBvg3XMFhxUQ4KuLqx0CritYZPPXinsOqB7I76+OHaZlPzLEcftrqOlOwjeXvuEuH6t6emkaofgVUDIb4fEZB6CmRAeFCTq11lxbAgUyx4rXkqlH9I4bTUDRRVD1xjbqb9HyUBn7rhtr1x+x9Y0e3BdX31/loYvZaLxqnjbRuokz+pPG7WebnSNKE3yE6Tka4aDEDMVYr6Neq126c+ZR2nzzm3yyiC7PGWG/1uueqZudrVGYNdsgOMDvt1cI8CXu63QIcPvYNY8z870WwYazTS7DqpDEknZqS0AFXObWUxTaw0q5pnHlq4oQImakpLfJkmErdvAfhsc7lod0DVT4tuob25C0tQjzdiFObCz7U7eaKGP3s6yQVgQ/y+q+nY6K5dfV75iXzcNlGIP38aj22sVwtWWKMRb7B5HoHPaBvI1Ve5TSXATi66vV6utxsV+aZNFu+93VvlrG/oj8Wp67YT8l+Oq6PjwdGatFm7SEAP13kE0y9CEcf9qhtEWCMIq5AGq71moEAI9vrmFcmO8+7ZyDnmRN/VUaFkM2ce8KuBGFzDMmY6myLfQGra2ofgHhbJRXuRDZ4H+HmliWBHXQ0ysLGfv6FetbxtxzRgIZWjIsGVFl5imPXeyvVyayNek+dSWzjXd4t310YBdaF8sXeKs481PjsXbAtIru2+wHbv3GVh3sQY6Dnu6pF3pZ714VYdDi9A5GkXR/6xgaZN/tpQ8wVV3zeBuB+njoBNE4wjc+uA523ysXGd/P2sntmOb3OdHNWP5OVrxD3eJHdtH8QVkEIAqCor3hReR96yqt6PkTQfenllooQ447h6tOrnnuzwA8fMpq+jqg1oW8fTYYIncAYpVeTvkEFr/khQSbjoE8ykx9049OkE5MQEO9lC24tT7DwThQgf4Fhf8nGgAo3GYaON3crODpOr2pu5dBABz69t7F5yJBBo+r6QJdeLDWEoO7r1tceR3haA7gc7eZrCvpxSXXeKpo4P+hRixo9DeOFbqQVjKyWfBg9pnrEZKzK7R437YTTwhfoySG/YOCt3fs4aXlU3FjKortqQ6XyXaD0+Y/8VoqpyU9TRW45eN4oBxAH8Y/jLnNXfELJW+/p/MgO9Z+mBli2qqAP7dV/Arc2+YZRZwtBW8/p32y5ZsEuCS4O5AAgfR7Dde7zhiGfgvurQkfAXIrUG61rmxc2EZo18ph4vaWZI+QM0JdsbNlBJlPlwf9uguujQJy0j7TgTHdtRnjybTg55Hkk9S6l2rpYahumSewKHVosa1bh2Y6r9JGkdKvIDN/eeAwScrfjoLkCxWJuFZQ53FNP5w9XbQd1HhgHcVB/0fATG3sUUid1RTfc2+7pZVKldFSsaEK0v4k90tapQOk2HIbMhaJQtrUEL5+3sDanh8sOpbYRoQoqXWu6SQcUTQL9jzOrXNPWCJwXge4U7tlU1hkF012cAmvp8llQxf1IEMcw14pURxVOWATz4ITnYQjuF+vDXg5hgoiqXzO6mS91FQUBheURHIJxUeU1i3P0WOMpsm7vFYk0JJi/Ev+X3FwYD69cARPuP5GIc0PxoAFjcLRbNur0iMTrQmBBNYJ2ngU4x7SWfdTRl52Bqv7LmYW3C1CyTCPTHeWWIAM/Whm32COHsaj+2UQ739XB9t6NV0o9E9b7CW3XNiXzi9e0KiE+3rntukdIDBWrU2jsfQWuyFJRANxq8StHVv1JPy2C3Byco7qdNbASrnNXZ8G0L/Wp/pif4Ai9aEZ9Bb+TRx+REBdGlkF/s0dUdMSMr+6YCbuGxqPWdzcdqutvqkBzCksFcwAtjf55TeuH79M6AQa7r5PLeXxMFIlQKrXP9VJ275WGX+ptpf+tvTDBsecPnYQAlAWrVbRVJ7K2pRHwIjtSpbX96Y/lbKk6ZWXlBmh15r8yAWQsYxXgBOXYMAfHnUXF+rDqnB8bXDRtAn7bCziIqetSboK3NexMePvsCRLvmsoREA+kH8j4HWFpnNEaWgOmR7xyXHfTaz3slHc/YA6H6tl/L8d5tPcIwwD0tjvRaq3Y5BmYBSDClpv0VIX4s8D0XK3sPdpAb94HjPLkgboEz9EdZATW6ZdcmQvtKUwoWw+nAVKA7IcdY1UHnvNnIBplKci+knzewLz5/GGnzkGuuGky+0LTjtGBGR85EQICDqKChnm5pH3Z44nnWAk1YRdyu3g7QoFZ0h8jkr2ffjKmi+Qvsp+9GvNGZHmgW+YQAGUw7PPt8IPKbdy432vhKtRJjKWcSqq7helj81o3nfmaxVZ7Sqie8OOBk9WsyTD/ab7fQ5aWwQeJvnH6+ayo4IdIkOSBJjzXkgr+1TPhAx1AXDsxtCCj3TzQTLA1p782f7a8vdgPfwwrXmZxxbqo2h+6Zlo6mcMY4V7cFBOLm17VCvx9Qa2tAnkxEB+KYyQgbgAAnmNDOdOO6y2Cb+lke1MWQc9o+EMdQf7ubIG3Ek8GZ4k1PtGjbhwgOMPp5Em59JMVk/jU8/aF73Xcrd3UBNZyueQu0/xz2aGtZT8CRziOax2BWFXaeDzgZNV7oRtUzFoijoETf3xkAFFk3OMb7SgPh5wxU1+MygDIp9gZChH2qEcpgLh8pBIK90PXT1ZSU+ZExFK4Vm4GL/J7+K13lS5dQkW4HQwl6GX4yLqu8GhGWS2k75yel5IZIfFNdAL0NpKr2N5dQesBnxa42DLgJd6agS1jJsp1mO1dip7PU4P6diLLoTsZ4m3Q0QweiqeFfIGPLgF6v6mSVv6xe85VBD/1Mpe3AurRbcJ9SEo8NszNVy8rOCEexyIFcJRvYAlI/wk2I7r3p60FFLQXoH2q9xri/m41svRPbW0/EnPn2DWsmk0IiPpB60aa3+hiFfWuC8ZvWKEd9LxAk3HcOof6d77RewPaPsGw5lQAHcZN2vx1448u9pLfMLGQ3BSRRjBzRhKt7HcCw/7aqjtCDs5q76b4ZGphxN2th1WeXYlfnozX3ebKtX4Te11hf1tZP1diiGjIDAB1cR4Sb9rcFPC/nBARjlgDxd+tCBb1t91j71xJcgGjT3g/dUFnXXNiDrxkyoHANPk58ACPUa42hj8tgGrhiXOCmygxFZBiT2wyAJTDJ4wJEPmp6JIrDaSWYNqv4xH2wwdSTGYb3E0pXnS39nmLUsqoVZxzSoegqzd0o06wdbTXsaHGL+IF4JtIcXddTcD/dCd8hVf+fWPSV553kjMmMEULLS8HcgmptDO955dLGX78PjiDA6IsTHPm5IA6bc5ha0gaGkoEttXuxU11B2dOJ65/Q08tEF1+Y9cr2Nh/VECfQ33GyvR/gsdN1LuIeLpKMCAF2yRr769g9/4aJLZNRI71m2S91+Kp+Q0zubTcxoG2/6gm1Q79wkMj2XNO2ui7nWw8ULtu27CCvqTGX2PffD+xcwgh/TrOKvGZMM5jRFGDTn4NO/lwnDR/GY/waDZtkWDUPI0O8ztcFVqp6r2ZW+2bvkJ3raptYagFqu95VdIaml2CIp6CKets34x+fH2C+zH4cVFO7vj+6k2FU39PtRhWluYeZ3gDz1TLB9K2v7SD9gJU1qDxoRDrAWcrFGLyndhdtd0505+gEP79adK8fmFCWNYC+ahzVNcRH79E8dA1iqX/N0qq22xcOc20ALxLDspEj4QCFBQMgaIwoKbxr0Bd7Sbws6GiRK6tqoPfpiCle23axejRLyO1I+ahsEpWrzT5ZsCyS5RcY9jMfENFxSnhKsrfW8JHH6/rdQUMfmQPT3Uz9gY0C/pu1yuCnrPUvio0a1qMEosA/EwIzzid7cqsAAAAASUVORK5CYII=');
}
html {
width: 100%;
height: 100%;
}
body {
display: flex;
position: relative;
flex-flow: row nowrap;
width: 100%;
height: 100%;
overflow: hidden;
transition: .1s;
transition: 2s;
-moz-transform: scale(1.1); /* zoom */
user-select: none;
}
body {
--zen-gradient-color: var(--zen-colors-secondary);
--zen-gradient-background: var(--zen-colors-tertiary);
--zen-gradient-border: #fbffbe;
&::before, &::after {
content: "";
position: absolute;
top: 0; left: 0;
z-index: -1;
display: block;
width: 100%;
height: 100%;
}
&::before {
background: radial-gradient(circle at 50%, var(--zen-gradient-background) 20%, var(--zen-gradient-color) 60%);
mask: var(--noise), radial-gradient(circle at 50%, transparent 20%, light-dark(#000, #fff) (60% + 10%));
}
&::after {
mask-image: var(--noise), linear-gradient(45deg, #000 0%, transparent 25%, transparent 75%, #000 100%);
background: linear-gradient(45deg, #6d6dff 10%, var(--zen-gradient-background) 25%, var(--zen-gradient-background) 75%, var(--zen-gradient-border) 90%);
}
}
@media (prefers-color-scheme: dark) {
body {
--zen-gradient-border: rgb(32, 32, 28);
--zen-gradient-color: transparent;
}
}
#first-view {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
background: var(--zen-dialog-background);
width: 55%;
position: relative;
padding: 5% 4%;
overflow: hidden;
border-right: 1px solid var(--zen-colors-border);
}
#buttons-footer {
margin-top: auto;
padding: 10px;
width: -moz-available;
display: flex;
justify-content: space-between;
align-items: center;
}
#second-view {
width: 100%;
height: 100%;
position: relative;
}
button {
padding: 10px 40px;
padding: 8px;
}
#footer-buttons button {
padding: 8px 0;
}
.page {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
align-content: center;
width: 100%;
justify-content: start;
width: -moz-available;
height: 100%;
margin: 32px;
}
.page-split:not([hidden="true"]) {
flex-direction: row;
margin: auto;
justify-content: space-around;
h2 {
font-size: 17px;
font-weight: 600;
margin: 35px 0 20px 0;
line-height: 1;
}
#enableFeatures .card {
width: auto;
.page-split:not([hidden="true"]) {
flex-direction: column;
margin: auto;
justify-content: start;
}
.page-split > div:first-child {
margin-bottom: 20px;
}
:not(#theme) .card h3 {
@@ -109,6 +185,7 @@ p {
display: inline-block;
height: 82px;
width: 82px;
margin-bottom: 20px;
}
.asset {
@@ -181,59 +258,88 @@ input[type='checkbox'] {
margin-top: 10px;
}
#dots {
#circular-progress {
--size: 220px;
--half-size: calc(var(--size) / 2);
--stroke-width: 20px;
--radius: calc((var(--size) - var(--stroke-width)) / 2);
--circumference: calc(var(--radius) * pi * 2);
--dash: calc((var(--progress) * var(--circumference)) / 100);
position: absolute;
bottom: 100px;
left: 50%;
transform: translateX(-50%);
display: flex;
gap: 12px;
align-items: center;
top: 15px;
right: 10px;
width: 55px;
height: 40px;
}
.dot {
width: 8px;
height: 8px;
border-radius: 50%;
transition: all .1s;
background: light-dark(#000, #fff);
cursor: pointer;
#circular-progress circle {
cx: var(--half-size);
cy: var(--half-size);
r: var(--radius);
stroke-width: var(--stroke-width);
fill: none;
stroke-linecap: round;
}
.dot.active {
background: var(--zen-primary-color);
#circular-progress circle.bg {
stroke: light-dark(#3f3f3f, #4d4d4d);
}
#colorList {
width: 500px;
border-radius: 99px;
height: 20px;
display: flex;
border: 1px solid var(--zen-colors-primary) !important;
}
#dragBall {
width: 17px;
height: 17px;
border-radius: 50%;
background: #fff;
position: absolute;
top: calc(5px / 2);
#circular-progress circle.fg {
transform: rotate(-90deg);
transform-origin: var(--half-size) var(--half-size);
stroke-dasharray: var(--dash) calc(var(--circumference) - var(--dash));
transition: stroke-dasharray 0.3s linear 0s;
stroke: var(--zen-primary-color);
}
#colorListWrapper {
position: relative;
width: 500px;
height: 20px;
display: flex;
align-items: center;
}
#colorPreview {
margin-left: 10px;
border-radius: 5px;
width: 25px;
height: 25px;
position: absolute;
top: 50%;
right: -60px;
transform: translateY(-50%);
#colorListWrapper > div {
border-radius: 999px;
height: 20px;
width: 20px;
border: 3px solid transparent;
margin: 0 5px;
}
#colorListWrapper > div.selected {
border: 3px solid light-dark(#000, #fff);
}
#welcome {
justify-content: center;
}
#themeList {
display: flex;
flex-wrap: nowrap;
}
#themeList > svg {
border: 3px solid transparent;
border-radius: 15px;
height: -moz-available;
}
#themeList > svg:nth-child(1) {
margin-right: 10px;
}
#themeList > svg.selected {
border: 3px solid var(--zen-colors-primary);
}
#searchList.cardGroup {
display: grid;
grid-template-columns: 1fr 1fr;
}
#searchList .card {
width: -moz-available !important;
margin: 20px;
padding: 20% 0 !important;
}

View File

@@ -26,18 +26,14 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<script src="chrome://browser/content/zenThemeModifier.js"></script>
</head>
<body>
<body class="gradient-background">
<div id="first-view">
<div class="page" id="welcome">
<img class="icon" src="chrome://branding/content/about-logo.png" />
<h1 data-l10n-id="welcome-dialog-welcome"></h1>
<p data-l10n-id="welcome-dialog-welcome-subtext"></p>
<button
id="welcomeNext"
class="primary"
data-l10n-id="welcome-dialog-get-started"
></button>
</div>
<div class="page page-split" id="import">
@@ -52,11 +48,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
id="importBrowser"
data-l10n-id="welcome-dialog-import-action"
></button>
<button
class="text-link ghost-button"
id="importNext"
data-l10n-id="welcome-dialog-skip"
></button>
</hbox>
</div>
</div>
@@ -67,19 +58,70 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
<p data-l10n-id="welcome-dialog-theme-subtext"></p>
</div>
<div>
<h1 data-l10n-id="welcome-dialog-theme-header-1"></h1>
<div id="themeList" class="cardGroup"></div>
<h1 data-l10n-id="welcome-dialog-theme-header-2"></h1>
<h2 data-l10n-id="welcome-dialog-theme-header-1"></h2>
<div id="colorListWrapper">
<canvas id="colorList" class="cardGroup"></canvas>
<div id="dragBall"></div>
<div id="colorPreview"></div>
</div>
<button
id="themeNext"
class="primary"
data-l10n-id="welcome-dialog-theme-action"
></button>
<h2 data-l10n-id="welcome-dialog-theme-header-2"></h2>
<div id="themeList" class="cardGroup">
<svg width="700" height="700" viewBox="0 0 700 700" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_404_2706)">
<rect width="700" height="700" fill="#F4F4F4"/>
<g filter="url(#filter0_d_404_2706)">
<path d="M107 130C107 103.49 128.49 82 155 82H700V738H107V130Z" fill="white"/>
<path d="M155 82.5H699.5V737.5H107.5V130C107.5 103.766 128.766 82.5 155 82.5Z" stroke="black" stroke-opacity="0.2"/>
</g>
<mask id="path-3-inside-1_404_2706" fill="white">
<path d="M257 83H700V701H257V83Z"/>
</mask>
<path d="M257 83H700V701H257V83Z" fill="#F1F1F1"/>
<path d="M258 701V83H256V701H258Z" fill="black" fill-opacity="0.1" mask="url(#path-3-inside-1_404_2706)"/>
</g>
<defs>
<filter id="filter0_d_404_2706" x="103" y="82" width="601" height="664" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_404_2706"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_404_2706" result="shape"/>
</filter>
<clipPath id="clip0_404_2706">
<rect width="700" height="700" fill="white"/>
</clipPath>
</defs>
</svg>
<svg width="700" height="700" viewBox="0 0 700 700" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_404_2709)">
<rect width="700" height="700" fill="#515151"/>
<g filter="url(#filter0_d_404_2709)">
<path d="M107 130C107 103.49 128.49 82 155 82H700V727H107V130Z" fill="#717171"/>
<path d="M155 82.5H699.5V726.5H107.5V130C107.5 103.766 128.766 82.5 155 82.5Z" stroke="white" stroke-opacity="0.57"/>
</g>
<mask id="path-3-inside-1_404_2709" fill="white">
<path d="M257 83H700V701H257V83Z"/>
</mask>
<path d="M257 83H700V701H257V83Z" fill="#565656"/>
<path d="M258 701V83H256V701H258Z" fill="black" fill-opacity="0.1" mask="url(#path-3-inside-1_404_2709)"/>
</g>
<defs>
<filter id="filter0_d_404_2709" x="103" y="82" width="601" height="653" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="4"/>
<feGaussianBlur stdDeviation="2"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.25 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_404_2709"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_404_2709" result="shape"/>
</filter>
<clipPath id="clip0_404_2709">
<rect width="700" height="700" fill="white"/>
</clipPath>
</defs>
</svg>
</div>
</div>
</div>
@@ -90,25 +132,38 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
</div>
<div>
<div id="searchList" class="cardGroup"></div>
<button
id="searchNext"
class="primary"
data-l10n-id="welcome-dialog-search-action"
></button>
</div>
</div>
<div class="page" id="thanks">
<h1 data-l10n-id="welcome-dialog-thanks"></h1>
<p data-l10n-id="welcome-dialog-thanks-subtext"></p>
</div>
<div id="buttons-footer">
<button
id="thanksNext"
id="back"
data-l10n-id="welcome-dialog-back-action"
disabled
></button>
<button
id="next"
class="primary"
data-l10n-id="welcome-dialog-thanks-action"
data-l10n-id="welcome-dialog-next-action"
></button>
</div>
</div>
<div id="dots"></div>
<div id="second-view">
</div>
<svg
width="250" height="250" viewBox="0 0 250 250"
id="circular-progress" style="--progress: 50"
>
<circle class="bg"></circle>
<circle class="fg"></circle>
</svg>
<script src="./welcome.js"></script>
<script src="chrome://browser/content/contentTheme.js"></script>

View File

@@ -90,11 +90,6 @@ class Page {
*/
constructor(id) {
this.element = document.getElementById(id)
this.nextEl = document.getElementById(`${id}Next`)
this.nextEl.addEventListener('click', () => {
this.pages.next()
})
}
/**
@@ -130,95 +125,43 @@ class Themes extends Page {
)
const themeList = document.getElementById('themeList');
const themeElements = []
const themeElements = ["firefox-compact-light@mozilla.org", "firefox-compact-dark@mozilla.org"];
themes.forEach((theme) => {
const container = document.createElement('div')
container.classList.add('card');
container.classList.add('card-no-hover');
//if (theme.id == "firefox-compact-dream@mozilla.org" || theme.id == "firefox-compact-galaxy@mozilla.org") {
// container.setAttribute('disabled', 'true')
//}
if (theme.isActive) {
container.classList.add('selected')
}
container.addEventListener('click', () => {
themeElements.forEach((theme, i) => {
let container = themeList.children[i];
container.addEventListener('click', (() => {
if (container.hasAttribute('disabled')) {
return
}
document.body.classList.add('normal-background');
themeElements.forEach((el) => el.classList.remove('selected'))
for (const el of themeList.children) {
el.classList.remove('selected')
}
container.classList.add('selected')
theme.enable()
})
const img = document.createElement('img')
img.src = theme.icons['32']
const name = document.createElement('h3')
name.textContent = theme.name
//container.appendChild(img)
container.appendChild(name)
themeList.appendChild(container)
themeElements.push(container)
themes.find((t) => t.id === theme).enable()
}).bind(this, i, container, theme));
if (themes.find((t) => t.id === theme).isActive) {
container.classList.add('selected')
}
})
}
setColorBar() {
const colorList = document.getElementById('colorList');
const ctx = colorList.getContext('2d');
let gradient = ctx.createLinearGradient(0, 0, 500, 20);
colorList.width = 500;
colorList.height = 20;
const colorList = document.getElementById('colorListWrapper');
const colors = ['#aac7ff', '#74d7cb', '#a0d490', '#dec663', '#ffb787',
'#ffb1c0', '#ddbfc3', '#f6b0ea', '#d4bbff']
gradient.addColorStop(0.1, '#aac7ff');
gradient.addColorStop(0.2, '#74d7cb');
gradient.addColorStop(0.3, '#a0d490');
gradient.addColorStop(0.4, '#dec663');
gradient.addColorStop(0.5, '#ffb787');
gradient.addColorStop(0.6, '#ffb1c0');
gradient.addColorStop(0.7, '#ddbfc3');
gradient.addColorStop(0.8, '#f6b0ea');
gradient.addColorStop(0.9, '#d4bbff');
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, 1000, 150);
const dragBall = document.getElementById('dragBall');
dragBall.style.left = `17px`;
dragBall.addEventListener('mousedown', (e) => {
const rect = colorList.getBoundingClientRect();
e.preventDefault();
const onMouseMove = (ev) => {
var x = ev.clientX - rect.left;
dragBall.style.left = `${x - 17/2}px`;
if (x < 17) {
dragBall.style.left = `${17/2}px`;
x = 17;
} else if (x > rect.width - 17) {
dragBall.style.left = `${rect.width - 17 - (17/2)}px`;
x = rect.width - 17 - (17/2);
}
const data = ctx.getImageData(x - 17, 1, 1, 1).data;
let color = `#${data[0].toString(16)}${data[1].toString(16)}${data[2].toString(16)}`;
document.getElementById("colorPreview").style.backgroundColor = color;
colors.forEach((color) => {
const container = document.createElement('div')
container.classList.add('color')
container.style.backgroundColor = color
container.setAttribute('data-color', color)
container.addEventListener('click', (() => {
Services.prefs.setStringPref('zen.theme.accent-color', color);
}
colorList.querySelectorAll('.selected').forEach((el) => el.classList.remove('selected'))
container.classList.add('selected')
}).bind(this, color, container))
const onMouseUp = () => {
document.removeEventListener('mousemove', onMouseMove);
document.removeEventListener('mouseup', onMouseUp);
document.getElementById("colorPreview").style.backgroundColor = '';
}
document.addEventListener('mousemove', onMouseMove);
document.addEventListener('mouseup', onMouseUp);
colorList.appendChild(container)
});
}
}
@@ -297,7 +240,6 @@ class Import extends Page {
MigrationUtils.showMigrationWizard(window, {
zenBlocking: true,
});
this.nextEl.click()
})
}
}
@@ -316,19 +258,24 @@ class Pages {
this.pages.forEach((page) => page.setPages(this))
const dots = document.getElementById("dots");
for (let i = 0; i < this.pages.length; i++) {
let dot = document.createElement("span");
dot.classList.add("dot");
dot.setAttribute("data-index", i);
dot.onclick = (e) => {
this.currentPage = parseInt(e.target.getAttribute("data-index"));
this._displayCurrentPage();
}
dots.appendChild(dot);
}
this._displayCurrentPage();
console.log("Welcome pages initialized.")
this.nextEl = document.getElementById(`next`)
this.prevEl = document.getElementById(`back`)
this.nextEl.addEventListener('click', () => {
this.next()
this.prevEl.removeAttribute('disabled')
})
this.prevEl.addEventListener('click', () => {
this.currentPage--
this._displayCurrentPage()
if (this.pages.currentPage === 1) {
this.prevEl.setAttribute('disabled', 'true')
}
});
}
next() {
@@ -355,16 +302,16 @@ class Pages {
}
_displayCurrentPage() {
let dots = document.getElementsByClassName("dot");
for (let i = 0; i < dots.length; i++) {
dots[i].classList.remove("active");
}
dots[this.currentPage].classList.add("active");
let progress = document.getElementById('circular-progress');
progress.style.setProperty('--progress', ((this.currentPage + 1) / this.pages.length) * 100);
for (const page of this.pages) {
page.hide()
}
if (this.currentPage >= 1) {
document.body.classList.remove('gradient-background')
} else {
document.body.classList.add('gradient-background')
}
this.pages[this.currentPage].show()
}
}

View File

@@ -15,6 +15,8 @@ zen-side-panels-description = Increase productivity by having multiple views at
zen-side-panels-enabled =
.label = Enable Web Side Panels
zen-side-panels-close-on-blur =
.label = Close the panel when it loses focus if it's not pinned
zen-look-and-feel-compact-view-header = Show in compact view
zen-look-and-feel-compact-view-description = Only show the toolbars you use!

View File

@@ -6,29 +6,21 @@ welcome-dialog-welcome = 👋 Welcome to { -brand-short-name }
welcome-dialog-welcome-subtext = Fast. Beautiful. Private.
welcome-dialog-get-started = Get started
welcome-dialog-skip = Not now
welcome-dialog-import = 😍 Bring your favourites to { -brand-short-name }
welcome-dialog-import-subtext = Pick up where you left off in your last browser
welcome-dialog-import-action = Import
welcome-dialog-import-action = Import your data
welcome-dialog-theme = 🎨 Choose a theme
welcome-dialog-theme = Make yourself at home
welcome-dialog-theme-subtext = Personalize your experience with your favorite look!
welcome-dialog-theme-action = Continue
welcome-dialog-theme-header-1 = 1. Choose a theme
welcome-dialog-theme-header-2 = 2. Find your perfect color
welcome-dialog-theme-header-1 = Choose your perfect color
welcome-dialog-theme-header-2 = Choose your theme
welcome-dialog-search = 🔍 Choose a search engine
welcome-dialog-search-subtext = Select your preferred search engine to tailor your browsing experience!
welcome-dialog-search-action = Next
welcome-dialog-thanks = Thanks You So Much! ❤️
welcome-dialog-thanks = Thank You So Much! ❤️
welcome-dialog-thanks-subtext = Your appreciation means the world to us!
welcome-dialog-thanks-action = Start Browsing!
# About Welcome Page
welcome-page-description = An experimental Firefox fork that enhances focus and increases work productivity due to its hyper minimalistic UI and built-in tools
welcome-page-version = You are using { -brand-full-name }
welcome-page-build-id = Build { -build-id }
welcome-page-other-downloads = If this is not the release you want, feel free to checkout other downloads at https://pulsebrowser.app/download
welcome-dialog-back-action = Back
welcome-dialog-next-action = Next

View File

@@ -1,7 +1,16 @@
diff --git a/browser/themes/shared/customizableui/panelUI-shared.css b/browser/themes/shared/customizableui/panelUI-shared.css
index e4409ac75f6ee794d400559b0b01ae30904d01bc..44d4e648aa5aac17b82e0e1f80c7a953c2923ebc 100644
index e4409ac75f6ee794d400559b0b01ae30904d01bc..4c10051d6bbc77440195b08397743c03a11d1fb0 100644
--- a/browser/themes/shared/customizableui/panelUI-shared.css
+++ b/browser/themes/shared/customizableui/panelUI-shared.css
@@ -16,7 +16,7 @@
--menu-panel-width-wide: 29em;
--arrowpanel-menuitem-margin-block: 0;
- --arrowpanel-menuitem-margin-inline: 8px;
+ --arrowpanel-menuitem-margin-inline: 4px;
--arrowpanel-menuitem-margin: var(--arrowpanel-menuitem-margin-block) var(--arrowpanel-menuitem-margin-inline);
--arrowpanel-menuitem-padding-block: 8px;
--arrowpanel-menuitem-padding-inline: 8px;
@@ -720,15 +720,15 @@ toolbarbutton[constrain-size="true"][cui-areatype="panel"] > .toolbarbutton-badg
/* Firefox Account Toolbar Panel */

View File

@@ -222,7 +222,10 @@ button.popup-notification-dropmarker {
#navigator-toolbox {
min-width: 55px;
max-width: 55px;
transition: .4s !important;
}
#zen-tabbox-wrapper:has(#zen-sidebar-splitter:not([state="dragging"])) #navigator-toolbox {
transition: .3s !important;
}
#navigator-toolbox toolbar#TabsToolbar {
@@ -398,8 +401,9 @@ toolbarbutton#scrollbutton-up {
top: 50%;
}
.tabbrowser-tab:hover .tab-close-button {
display: none; /* TODO: fix this? or maybe not? */
.tabbrowser-tab[open="true"]:hover .tab-close-button {
/* TODO: fix this */
/*display: block;*/
}
.tab-content {
@@ -411,6 +415,11 @@ toolbarbutton#scrollbutton-up {
display: none;
}
#nav-bar > *:not(.titlebar-buttonbox-container) {
padding-top: 5px;
padding-bottom: 5px;
}
#TabsToolbar-customization-target {
height: 100%;
}
@@ -515,11 +524,6 @@ panelmultiview {
clip-path: inset(0px 0px 0px round var(--zen-browser-border-radius) 0) !important;
}
#nav-bar {
padding-top: 5px;
padding-bottom: 5px;
}
#urlbar[breakout]:not([breakout-extend="true"]) {
top: unset;
}
@@ -533,22 +537,37 @@ panelmultiview {
#navigator-toolbox[inFullscreen]{ margin-top: 0 !important; }
#navigator-toolbox {
--zen-compact-toolbox-margin-single: 15px;
--zen-compact-toolbox-margin: var(--zen-compact-toolbox-margin-single);
position: absolute !important;
display: block;
transition: 50ms ease-in !important;
right: calc(100% - 25px) !important;
transform: translateX(calc(-100% + var(--zen-compact-toolbox-margin-single) + 2px)) !important;
opacity: 0;
line-height: 0;
z-index: 1;
pointer-events: none;
height: 100%;
padding: 0 !important;
margin: 0 !important;
margin: 0;
padding: var(--zen-compact-toolbox-margin) !important;
& #titlebar {
border-right: 1px solid var(--zen-colors-border);
background: var(--zen-main-browser-background) !important;
border: 1px solid var(--zen-colors-border);
background: var(--zen-colors-tertiary) !important;
padding: 0 5px;
border-radius: 11px;
}
}
@media not (-moz-bool-pref: "zen.view.sidebar-expanded") {
#navigator-toolbox {
width: fit-content !important;
}
}
@media not (-moz-bool-pref: "zen.view.compact.hide-toolbar") {
#navigator-toolbox {
/* Remove the top margin */
--zen-compact-toolbox-margin: calc(var(--zen-compact-toolbox-margin-single) / 3) var(--zen-compact-toolbox-margin-single) var(--zen-compact-toolbox-margin-single) var(--zen-compact-toolbox-margin-single);
}
}
@@ -557,7 +576,7 @@ panelmultiview {
#mainPopupSet:has(> #appMenu-popup:hover) ~ toolbox,
#navigator-toolbox:has(*[open="true"]:not(tab):not(#zen-sidepanel-button)) {
transition-delay: 33ms !important;
left: 0 !important;
transform: none !important;
opacity: 1;
}
@@ -591,22 +610,26 @@ panelmultiview {
@media (-moz-bool-pref: "zen.view.compact.hide-toolbar") {
#zen-appcontent-navbar-container {
height: 10px;
transition: .2s ease-in-out height;
--urlbar-height: unset;
transition: .2s ease-in-out;
transform: translateY(calc(-100% + 5px));
opacity: 0;
position: absolute;
width: 100%;
border-bottom-left-radius: 8px;
border-bottom-right-radius: 8px;
border-bottom: 1px solid var(--zen-colors-border);
top: 0;
background: var(--zen-main-browser-background);
background: var(--zen-colors-tertiary);
z-index: 1;
transition: .2s ease-in-out;
}
#zen-appcontent-navbar-container:hover,
#zen-appcontent-navbar-container:focus-within,
#mainPopupSet:has(> #appMenu-popup:hover) ~ #zen-appcontent-navbar-container,
#zen-appcontent-navbar-container:has(*[open="true"]) {
height: fit-content;
transform: translateY(0);
opacity: 1;
}
@@ -721,7 +744,7 @@ panelmultiview {
border: none;
}
#zen-sidebar-splitter {
:root:not([inDOMFullscreen="true"]) #zen-sidebar-splitter {
display: block;
width: 1px;
}
@@ -764,6 +787,8 @@ panelmultiview {
}
.tabbrowser-tab {
max-width: unset !important;
&:not([pinned]) {
width: 100%;
@@ -805,7 +830,7 @@ panelmultiview {
/* We have the pinned tabs on the top, next to each other,
* and the rest of the tabs are below them. */
display: grid;
grid-template-columns: repeat(auto-fill, minmax(31px, 1fr));
grid-template-columns: repeat(auto-fill, minmax(35px, 1fr));
padding: 5px;
}
@@ -819,8 +844,7 @@ panelmultiview {
#zen-workspaces-button {
width: -moz-available !important;
padding-left: 10px;
padding-right: 10px;
padding: 2px 10px;
}
#zen-sidebar-icons-wrapper {
@@ -841,12 +865,10 @@ panelmultiview {
#urlbar:is([breakout][breakout-extend], [breakout][usertyping][focused]) {
#urlbar-input {
font-size: 16px !important;
text-align: left !important;
}
z-index: 1;
z-index: 2;
position: fixed !important;
--urlbar-height: auto !important;
bottom: auto !important;
top: 20vh !important;
padding-left: 6px !important;
@@ -868,7 +890,7 @@ panelmultiview {
left: 0px;
background-color: rgba(0, 0, 0, 0.3);
backdrop-filter: blur(8px);
backdrop-filter: blur(5px);
z-index: -1;
}
@@ -884,3 +906,4 @@ panelmultiview {
}
}
}

View File

@@ -1,11 +0,0 @@
diff --git a/build/application.ini.in b/build/application.ini.in
index 6df13230a45b2a86356f4e5a7b189c46f53e44cc..47fc729cba7d9cb612bfa0297a24644925ab53af 100644
--- a/build/application.ini.in
+++ b/build/application.ini.in
@@ -52,5 +52,5 @@ ServerURL=@MOZ_CRASHREPORTER_URL@/submit?id=@MOZ_APP_ID@&version=@MOZ_APP_VERSIO
#if MOZ_UPDATER
[AppUpdate]
-URL=https://@MOZ_APPUPDATE_HOST@/update/6/%PRODUCT%/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%SYSTEM_CAPABILITIES%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml
+URL=https://@MOZ_APPUPDATE_HOST@/updates/browser/%BUILD_TARGET%/%CHANNEL%/update.xml
#endif

View File

@@ -24,5 +24,5 @@ html|button:not(:is(
)) {
transition: .2s;
border-radius: 6px !important;
min-width: 100px !important;
min-width: 80px !important;
}

View File

@@ -27,14 +27,17 @@
"brandShortName": "Zen Browser",
"brandFullName": "Zen Browser",
"release": {
"displayVersion": "1.0.0-a.10",
"displayVersion": "1.0.0-a.12",
"github": {
"repo": "zen-browser/desktop"
},
"x86": {
"windowsMar": "windows.mar",
"macosMar": "macos.mar",
"linuxMar": "linux.mar"
"archives": {
"windows": "windows.mar",
"macos-aarch64": "macos-aarch64.mar",
"linux": "linux.mar",
"macos-x64": "macos-x64.mar",
"windows-compat": "windows-generic.mar",
"linux-compat": "linux-generic.mar"
}
}
}