Compare commits

..

331 Commits

Author SHA1 Message Date
Mauro Balades
b94c6c616a Quick HOTFIX 2024-07-27 12:08:20 +02:00
Mauro Balades
9950ebd99e refactor: Update flatpak package name in alpha.yml workflow 2024-07-27 11:52:22 +02:00
Mauro Balades
1c4108d961 refactor: Remove font-weight property from zen-panel-ui.css 2024-07-27 09:45:45 +02:00
Mauro Balades
1be4bbf08b refactor: Remove commented code in windows-alpha-build.yml 2024-07-27 09:26:53 +02:00
mauro-balades
5ba50f2988 🔖 Update version to 1.0.0-a.7 2024-07-27 06:51:40 +00:00
Mauro Balades
e2618e5681 refactor: Update actions/checkout to v4 in alpha.yml workflow 2024-07-27 08:50:31 +02:00
Mauro Balades
3304259383 refactor: Update alpha.yml workflow to remove unused Windows build steps 2024-07-27 00:57:34 +02:00
Mauro Balades
d83df429bc refactor: Update macOS alpha build workflow to use macOS 14 instead of macOS 14 Large 2024-07-26 22:03:42 +02:00
Mauro Balades
191ffd6efe refactor: Update macOS alpha build workflow to use macOS 14 instead of macOS 14 Large 2024-07-26 20:43:25 +02:00
Mauro Balades
7e0e3f4145 refactor: Update profile data path in alpha.yml workflow 2024-07-26 14:57:29 +02:00
Mauro Balades
8b56897a11 feat: Enable newtabWallpapers v2 in Zen browser theme 2024-07-26 14:09:37 +02:00
Mauro Balades
6a55fecca6 refactor: Update macOS alpha build workflow to use macOS 14 instead of macOS 14 Large 2024-07-26 12:28:21 +02:00
Mauro Balades
f80a454261 refactor: Fixed macos builds and flatpaks 2024-07-26 12:26:35 +02:00
Mauro Balades
0f97a1cb4d refactor: Improved pinned tabs! 2024-07-26 12:10:00 +02:00
Mauro Balades
58e049a76f refactor: Hide sidebar splitter in Zen browser theme 2024-07-26 09:42:51 +02:00
Mauro Balades
dfa5013a79 Fixed windows builds 2024-07-26 09:20:11 +02:00
Mauro Balades
22dfa8daec refactor: Update alpha.yml workflow to use flat-manager v6.1 for uploading flatpak bundle 2024-07-26 09:19:18 +02:00
Mauro Balades
5c5608938d refactor: Update alpha.yml workflow to use flat-manager v6.1 for uploading flatpak bundle 2024-07-26 09:12:52 +02:00
Mauro Balades
cfd1ef11aa Revert testing 2024-07-26 01:03:06 +02:00
Mauro Balades
b82530c890 testing 2024-07-26 01:02:28 +02:00
Mauro Balades
69e5bb552f refactor: Update alpha.yml workflow to use flat-manager v6.1 for uploading flatpak bundle 2024-07-26 01:00:05 +02:00
Mauro Balades
915350db3c Hide sidebar webpanel when clicked outside 2024-07-26 00:20:33 +02:00
Mauro Balades
0dfb198609 refactor: Improve workspace icon handling and tab visibility logic 2024-07-25 23:29:49 +02:00
Mauro Balades
f1039324cf refactor: Improve sidebar panel button scaling 2024-07-25 22:46:38 +02:00
Mauro Balades
3ce4bb8ecf chore: Update alpha.yml workflow to use flat-manager v6.1 for uploading flatpak bundle 2024-07-25 22:45:43 +02:00
Mauro Balades
005398a20d chore: Enable PGO (Profile-Guided Optimization) for Linux builds 2024-07-25 15:33:42 +02:00
Mauro Balades
f45b1ec317 chore: Update alpha.yml workflow to download artifacts in the "Download artifacts" step 2024-07-25 15:33:22 +02:00
Mauro Balades
4714cfcc84 chore: Update alpha.yml workflow to consistently use the use-warp-build input 2024-07-25 12:59:05 +02:00
Mauro Balades
c221c8e242 chore: Update alpha.yml workflow to include continue-on-error option 2024-07-25 11:20:00 +02:00
Mauro Balades
5464da21c4 chore: Add option to create a flatpak release in alpha.yml workflow 2024-07-25 11:19:24 +02:00
Mauro Balades
f2a783fbce refactor: Improve workspace icon handling and tab visibility logic 2024-07-25 10:31:41 +02:00
Mauro Balades
bb3ee371a1 refactor: Improve workspace icon handling and tab visibility logic 2024-07-25 09:56:17 +02:00
Mauro Balades
95e053562e chore: Update alpha.yml workflow to consistently use the use-warp-build input 2024-07-25 09:16:23 +02:00
Mauro Balades
e5eba4496f chore: Update alpha.yml workflow to consistently use the use-warp-build input 2024-07-24 23:32:05 +02:00
Mauro Balades
eba7459acf chore: Update alpha.yml workflow to consistently use the use-warp-build input 2024-07-24 21:09:50 +02:00
Mauro Balades
7251dbd013 chore: Update alpha.yml workflow to consistently use the use-warp-build input 2024-07-24 19:19:37 +02:00
Mauro Balades
43ffc452a2 chore: Update alpha.yml workflow to consistently use the use-warp-build input 2024-07-24 15:23:46 +02:00
mauro-balades
2027487c56 🔖 Update version to 1.0.0-a.6 2024-07-24 12:40:34 +00:00
Mauro Balades
77b96aed0a chore: Update surfer.json to display version 1.0.0-a.5 instead of 1.0.0-a.6 2024-07-24 14:39:55 +02:00
Mauro Balades
dc5b9f00dd chore: Update alpha.yml workflow to use-warp-build input consistently 2024-07-24 14:39:39 +02:00
mauro-balades
67d2238660 🔖 Update version to 1.0.0-a.6 2024-07-24 12:33:37 +00:00
Mauro Balades
e018a6154b chore: Update alpha.yml workflow to include use-warp-build input 2024-07-24 14:32:49 +02:00
Mauro Balades
32837dd742 chore: Update flatpak build workflow to include release job 2024-07-24 14:31:39 +02:00
Mauro Balades
494c829b53 chore: Update build workflows to support warp builds 2024-07-24 14:27:51 +02:00
Mauro Balades
cffdd29121 chore: Update @zen-browser/surfer dependency to version 1.1.4 2024-07-24 12:12:15 +02:00
Mauro Balades
17598a2725 chore: Refactor Windows profile build workflow to improve efficiency and remove unnecessary steps 2024-07-24 11:51:56 +02:00
Mauro Balades
1433d594c7 chore: Disable PGO build in Windows profile build workflow 2024-07-24 11:15:18 +02:00
Mauro Balades
5ca89116e7 chore: Update Windows profile build workflow to remove unnecessary steps and improve efficiency 2024-07-24 00:35:06 +02:00
Mauro Balades
67aa0dc732 chore: Update common mozconfig to enable proxy bypass protection and remove unnecessary options 2024-07-23 22:45:20 +02:00
Mauro Balades
6f47ee3ffa chore: Update Windows profile build workflow to use x86_64-pc-windows-msvc target 2024-07-23 20:35:06 +02:00
Mauro Balades
a54b93318a chore: Update @zen-browser/surfer dependency to version 1.1.2 2024-07-23 20:34:04 +02:00
Mauro Balades
18b267300c chore: Set up git configuration in Windows profile build workflow 2024-07-23 18:28:45 +02:00
Mauro Balades
de8e45a38f chore: Update grid-gap in zen-decks.css to 5px for better visual spacing 2024-07-23 18:08:34 +02:00
Mauro Balades
230bb3da67 chore: Refactor Windows profile build workflow to improve efficiency and remove unnecessary steps 2024-07-23 17:25:59 +02:00
Mauro Balades
825bfd91db chore: Update Windows profile build workflow to include downloading and extracting Firefox source code 2024-07-23 17:22:52 +02:00
Mauro Balades
f2cab3dddb test 2 2024-07-23 15:58:21 +02:00
Mauro Balades
6209250260 testing 2024-07-23 15:43:47 +02:00
Mauro Balades
68f9cc7e00 chore: Update Windows profile build workflow to rename extracted Firefox source code folder 2024-07-23 14:51:27 +02:00
Mauro Balades
141728ab83 chore: Update macOS alpha build workflow to use actions/checkout@v4 2024-07-23 14:04:35 +02:00
Mauro Balades
af697f69c8 chore: Remove swap space configuration from macOS alpha build workflow 2024-07-23 13:48:29 +02:00
Mauro Balades
85b76f525c chore: Update disk-setup-and-swap.sh to conditionally execute 'free -h' and 'df -h' commands 2024-07-23 13:46:32 +02:00
Mauro Balades
1bcd4021dd chore: Update Windows profile build workflow to remove unnecessary steps and dependencies 2024-07-23 13:44:46 +02:00
Mauro Balades
a946f31b50 chore: Update Windows profile build workflow to include downloading and extracting Firefox source code 2024-07-23 13:43:50 +02:00
Mauro Balades
6e5611d1af chore: Enable blank issues in issue template configuration 2024-07-23 12:54:06 +02:00
Mauro Balades
b5865dd326 chore: Update bug report issue template with additional fields 2024-07-23 12:53:05 +02:00
Mauro Balades
963ac294f4 chore: Update bug report issue template with additional fields 2024-07-23 12:51:48 +02:00
Mauro Balades
a7fe238a71 chore: Update Windows profile build workflow to use x86_64-pc-mingw32 target 2024-07-23 11:56:09 +02:00
Mauro Balades
9c6b0912a5 chore: Update theme pill-button default value and styles 2024-07-23 11:35:26 +02:00
Mauro Balades
26b633553c testing 2024-07-23 09:49:11 +02:00
Mauro Balades
51ccbb0c7c chore: Update Windows profile build workflow to include debug session 2024-07-23 09:43:55 +02:00
Mauro Balades
93668396da chore: Update Xvfb installation in alpha-build.sh to only run if not cross-compiling 2024-07-22 23:39:16 +02:00
Mauro Balades
7355138f14 chore: Update Windows profile build workflow to include version bump step and disable wasm sandboxed libraries 2024-07-22 21:30:36 +02:00
Mauro Balades
1a761535df chore: Update flatpak manifest path in alpha.yml workflow 2024-07-22 19:46:14 +02:00
Mauro Balades
2962f0741c Always build flatpaks! 2024-07-22 19:41:48 +02:00
Mauro Balades
8de06906b8 chore: Update Windows profile build workflow to include version bump step 2024-07-22 19:41:15 +02:00
Mauro Balades
18a21bd85a Update Windows profile build workflow to include version bump step 2024-07-22 19:36:52 +02:00
Mauro Balades
c630d4e479 Lets try with waterfox 2024-07-22 19:24:37 +02:00
Mauro Balades
ab0ca282ff Update Windows profile build workflow to include version bump step 2024-07-22 19:08:11 +02:00
Mauro Balades
f7970fb004 chore: Update Windows profile build workflow to include version bump step 2024-07-22 19:05:37 +02:00
Mauro Balades
5904663634 Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 19:03:56 +02:00
Mauro Balades
358818b754 Check for files 2024-07-22 19:02:36 +02:00
Mauro Balades
4a287ad2eb Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 18:51:26 +02:00
Mauro Balades
ffcf71f25d Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 17:04:35 +02:00
Mauro Balades
3cf12e5b70 Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 14:46:26 +02:00
Mauro Balades
32ecb73303 Fixed mozilla build path 2024-07-22 14:35:02 +02:00
Mauro Balades
24eb4a27cb Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 14:16:46 +02:00
Mauro Balades
5a7bd1e868 Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 14:12:26 +02:00
Mauro Balades
c6ec84444d Remove mozconfig on windows PGO 2024-07-22 14:06:32 +02:00
Mauro Balades
3044b44967 Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 13:57:01 +02:00
Mauro Balades
2384b32a08 Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 13:50:23 +02:00
Mauro Balades
350d72033b chore: Update Windows profile build workflow to download and unpack artifact, setup MozillaBuild, and clone Waterfox repository 2024-07-22 13:43:35 +02:00
Mauro Balades
5d9b8b7244 use git for firefox cloning 2024-07-22 13:30:04 +02:00
Mauro Balades
006ab63b39 Added no interactive flag 2024-07-22 13:14:07 +02:00
Mauro Balades
4b54e4cfb5 chore: Update @zen-browser/surfer dependency to version 1.0.35 2024-07-22 13:09:13 +02:00
Mauro Balades
a6113ed7e8 chore: Update @zen-browser/surfer dependency to version 1.0.35 2024-07-22 12:59:22 +02:00
Mauro Balades
b8e6c059b0 test 2024-07-22 12:53:52 +02:00
Mauro Balades
ac972254ae chore: Update @zen-browser/surfer dependency to version 1.0.35 2024-07-22 12:51:41 +02:00
Mauro Balades
bc41044103 chore: Update @zen-browser/surfer dependency to version 1.0.35 2024-07-22 12:12:44 +02:00
Mauro Balades
5d4b34f802 chore: Update @zen-browser/surfer dependency to version 1.0.35 2024-07-22 11:55:52 +02:00
Mauro Balades
bfff708d0c chore: Update @zen-browser/surfer dependency to version 1.0.34 2024-07-22 11:47:06 +02:00
Mauro Balades
cf23fba41e chore: Update @zen-browser/surfer dependency to version 1.0.33 2024-07-22 11:10:13 +02:00
Mauro Balades
2e51a18490 chore: Update @zen-browser/surfer dependency to version 1.0.32 2024-07-22 10:58:02 +02:00
Mauro Balades
1adc22e44f chore: Update @zen-browser/surfer dependency to version 1.0.31 2024-07-22 10:53:12 +02:00
Mauro Balades
e4cbfc8e78 chore: Update @zen-browser/surfer dependency to version 1.0.30 2024-07-22 10:36:44 +02:00
Mauro Balades
02f11033cd chore: Update @zen-browser/surfer dependency to version 1.0.29 2024-07-22 10:31:24 +02:00
Mauro Balades
e955e871e5 chore: Update @zen-browser/surfer dependency to version 1.0.28 2024-07-22 10:22:20 +02:00
Mauro Balades
5b1ba8f4e9 chore: Update @zen-browser/surfer dependency to version 1.0.27 2024-07-22 10:03:44 +02:00
Mauro Balades
c73afb011a chore: Update @zen-browser/surfer dependency to version 1.0.26 2024-07-22 09:57:33 +02:00
Mauro Balades
2538fa9b0a chore: Update @zen-browser/surfer dependency to version 1.0.25 2024-07-22 09:48:15 +02:00
Mauro Balades
0fc4e356d7 chore: Update @zen-browser/surfer dependency to version 1.0.24 2024-07-22 09:37:47 +02:00
Mauro Balades
df7a7916f5 chore: Update windows-profile-build workflow to include windows-step-1 in the needs array 2024-07-22 09:33:31 +02:00
Mauro Balades
4225302a4b chore: Update windows-profile-build workflow to include windows-step-1 in the needs array 2024-07-22 09:15:23 +02:00
Mauro Balades
7d978f5f96 chore: Update windows-profile-build workflow to include windows-step-1 in the needs array 2024-07-22 09:11:56 +02:00
Mauro Balades
d433950935 chore: Update windows-profile-build workflow to remove unnecessary step and generate mozilla-build-run.sh 2024-07-22 09:08:28 +02:00
Mauro Balades
138ea1cb57 chore: Update windows-profile-build workflow to include windows-step-1 in the needs array 2024-07-22 01:51:39 +02:00
Mauro Balades
ec9bc6ed92 chore: Update windows-profile-build workflow to remove unnecessary step and generate mozilla-build-run.sh 2024-07-22 01:49:59 +02:00
Mauro Balades
ccbb80ff4c chore: Fix compact mode for vertical tabs 2024-07-22 01:38:42 +02:00
Mauro Balades
e16c36ba10 chore: Update @zen-browser/surfer dependency to version 1.0.23 2024-07-22 00:54:13 +02:00
Mauro Balades
42503c7ccf chore: Update workspace button styles and behavior 2024-07-22 00:44:00 +02:00
Mauro Balades
46b63a777b chore: Update @zen-browser/surfer dependency to version 1.0.22 2024-07-21 22:48:20 +02:00
Mauro Balades
26b1243cc0 chore: Update @zen-browser/surfer dependency to version 1.0.21 2024-07-21 22:00:36 +02:00
Mauro Balades
cf116b5ad3 chore: Fixed pinned tabs 2024-07-21 20:34:47 +02:00
Mauro Balades
cc36e8a6e0 chore: Update windows-profile-build workflow to install Node.js and pnpm, and download dependencies 2024-07-21 19:49:09 +02:00
Mauro Balades
69c7cc198d chore: Update windows-alpha-build workflow to use profile data zip archive 2024-07-21 19:00:24 +02:00
Mauro Balades
96ef22dabc chore: Update windows-alpha-build workflow to use actions/upload-artifact@v4 2024-07-21 17:53:07 +02:00
Mauro Balades
77ee0cc065 chore: Update windows-profile-build workflow to unpack artifact using 7z 2024-07-21 17:01:21 +02:00
Mauro Balades
e939e32da0 chore: Update artifact name in windows-alpha-build workflow 2024-07-21 16:12:34 +02:00
Mauro Balades
b9e008afbe chore: Update build workflows and mozconfig files 2024-07-21 14:27:21 +02:00
Mauro Balades
542d631edd chore: Update build workflows and mozconfig files 2024-07-21 12:39:38 +02:00
Mauro Balades
acb1750bba chore: Update build workflows and mozconfig files 2024-07-21 11:54:54 +02:00
Mauro Balades
b9b8d161f3 chore: Configure sccache in build workflows 2024-07-21 10:21:42 +02:00
Mauro Balades
0c0de72a2c chore: Remove unnecessary packages and directories 2024-07-21 10:07:52 +02:00
Mauro Balades
0cebb046f8 testing 2024-07-21 09:59:26 +02:00
Mauro Balades
7eda59fb9c chore: Update workflow to include 'windows-step-2' as a dependency 2024-07-21 09:58:51 +02:00
Mauro Balades
e28661c5d4 chore: Add write permissions to workflow steps 2024-07-21 09:58:10 +02:00
Mauro Balades
e72f2e4245 Fixed workflow issues 2024-07-21 09:56:52 +02:00
Mauro Balades
6dac955cc7 test this workflow with PGO 2024-07-21 09:55:38 +02:00
Mauro Balades
84f9237c91 new workflow implementation 2024-07-21 09:54:39 +02:00
Mauro Balades
e2233816dd chore: Update @zen-browser/surfer dependency to version 1.0.20 2024-07-21 02:09:34 +02:00
Mauro Balades
542de32106 Update windows_mozconfig and linux/mozconfig files 2024-07-21 02:08:07 +02:00
Mauro Balades
7c99456c00 Test 2024-07-21 02:00:54 +02:00
Mauro Balades
f69421b7c6 chore: Update @zen-browser/surfer dependency to version 1.0.19 2024-07-21 00:55:16 +02:00
Mauro Balades
011e503c97 chore: Update @zen-browser/surfer dependency to version 1.0.18 2024-07-20 23:41:35 +02:00
Mauro Balades
7106409061 chore: Update install script, removed debug flag 2024-07-20 22:31:13 +02:00
Mauro Balades
49ee736731 chore: Update alpha-build.sh script to handle xvfb-run not found and enable lazy loading for images 2024-07-20 22:20:58 +02:00
Mauro Balades
766c4e941d chore: Enable jemalloc in mozconfig for Zen release builds 2024-07-20 19:37:27 +02:00
Mauro Balades
b6fa393035 chore: Update RUSTFLAGS in windows_mozconfig to target x86-64 CPU architecture 2024-07-20 18:34:05 +02:00
Mauro Balades
c14191847f chore: Update zen-sidebar.css to hide sidebar when not expanded 2024-07-20 17:20:34 +02:00
Mauro Balades
c2866e0b26 chore: Update alpha-build.sh script to handle xvfb-run not found and enable lazy loading for images 2024-07-20 17:06:29 +02:00
Mauro Balades
a8bbc0ade6 chore: Update alpha-build.sh script to handle xvfb-run not found and enable lazy loading for images 2024-07-20 16:58:45 +02:00
Mauro Balades
4cfd3ba121 chore: Update mozconfig to enable MOZ_PGO for Zen release builds 2024-07-20 15:33:32 +02:00
Mauro Balades
ae746fa0af chore: Update mozconfig to enable jemalloc and linker lld for non-cross-compiling builds 2024-07-20 15:32:00 +02:00
Mauro Balades
31908c8775 chore: Update mozconfig to enable jemalloc and linker lld for non-cross-compiling builds 2024-07-20 13:55:49 +02:00
Mauro Balades
6c34fc6e8d test 2024-07-20 11:32:45 +02:00
Mauro Balades
57f8a8fccd chore: Update alpha-build.sh script to handle xvfb-run not found and disable LTO when cross-compiling 2024-07-20 11:22:22 +02:00
Mauro Balades
3f7e2bf1c7 chore: Update alpha-build.sh script to handle xvfb-run not found and set LLVM_PROFDATA path conditionally 2024-07-20 11:19:40 +02:00
Mauro Balades
dcd63d66bc chore: Update alpha-build.sh script to handle xvfb-run not found and set LLVM_PROFDATA path conditionally 2024-07-20 10:53:19 +02:00
Mauro Balades
0313f1aa14 chore: Update alpha-build.sh script to handle xvfb-run not found and disable profiling 2024-07-20 09:24:34 +02:00
Mauro Balades
e3c465b59a chore: Update alpha-build.sh script to handle xvfb-run not found and enable LTO only when not cross-compiling 2024-07-20 02:07:39 +02:00
Mauro Balades
093a9625a7 chore: Update alpha-build.sh script to handle xvfb-run not found and enable LTO only when not cross-compiling 2024-07-20 02:00:37 +02:00
Mauro Balades
b04d6fc4f0 Update Zen Browser styles for dark mode compatibility 2024-07-20 01:49:23 +02:00
Mauro Balades
57850038fc Update Zen Browser styles for dark mode compatibility 2024-07-20 01:32:59 +02:00
Mauro Balades
323c0e51f3 Update tabs max-height calculation in ZenThemeModifier 2024-07-20 01:01:07 +02:00
Mauro Balades
a4a1aa5c43 chore: Update tabs max-height calculation in ZenThemeModifier 2024-07-20 00:38:04 +02:00
Mauro Balades
dddccee707 chore: Update alpha-build.sh script to handle xvfb-run not found and enable LTO only when not cross-compiling
- Add conditional check for xvfb-run command availability
- Enable LTO (Link Time Optimization) only when not cross-compiling

Related recent commits:
- Update Zen Browser styles for dark mode compatibility
- Update Windows mozconfig and ZenWorkspaces.mjs
2024-07-20 00:32:39 +02:00
Mauro Balades
528e020176 chore: Hide watermark when "zen.watermark.enabled" preference is false 2024-07-19 23:54:01 +02:00
Mauro Balades
fb8bc5d532 chore: Update TabsToolbar styles for Zen Browser 2024-07-19 23:47:48 +02:00
Mauro Balades
6c3a67aa9a chore: Update TabsToolbar styles for Zen Browser
- Set width to 100% and justify-content to start for toolbar buttons in TabsToolbar
- Add border-radius to toolbar buttons in TabsToolbar
- Update hover background color for toolbar buttons in TabsToolbar
- Adjust text alignment and remove unnecessary padding for toolbar buttons in TabsToolbar
- Set background to transparent for text, icon, and badge stack in toolbar buttons in TabsToolbar
- Set width to 100% for tabbrowser-tabs

Related recent commits:
- Update Zen Browser styles for dark mode compatibility
- Update Zen Browser preferences and styles for vertical tabs layout
2024-07-19 23:46:38 +02:00
Mauro Balades
3828f2547e chore: Update Windows mozconfig and ZenWorkspaces.mjs
- Commented out the WIN32_REDIST_DIR and WIN_UCRT_REDIST_DIR lines in the Windows mozconfig file
- Modified the condition in ZenWorkspaces.mjs to check if the number of shown tabs is equal to the length of gBrowser.tabs minus one

Related recent commits:
- Update Zen Browser styles for dark mode compatibility
- Update alpha-build.sh script to handle xvfb-run not found, enable LTO only when not cross-compiling, and set LLVM_PROFDATA environment variable
- Update alpha-build.sh script to handle xvfb-run not found and enable LTO only when not cross-compiling
2024-07-19 23:23:02 +02:00
Mauro Balades
b44d4b4f41 chore: Update Zen Browser styles for dark mode compatibility 2024-07-19 23:11:15 +02:00
Mauro Balades
8c1e1bc97d chore: Update alpha-build.sh script to handle xvfb-run not found, enable LTO only when not cross-compiling, and set LLVM_PROFDATA environment variable 2024-07-19 22:35:31 +02:00
Mauro Balades
93ba4e0638 chore: Update alpha-build.sh script to handle xvfb-run not found and enable LTO only when not cross-compiling 2024-07-19 22:01:55 +02:00
Mauro Balades
16f7b06cec chore: Update Zen Browser styles for dark mode compatibility 2024-07-19 21:50:11 +02:00
Mauro Balades
e1e910e339 chore: Update xvfb-run command in alpha-build.sh script 2024-07-19 19:54:09 +02:00
Mauro Balades
fb34e6c2fd chore: Remove unused debug module option in mozconfig 2024-07-19 19:35:08 +02:00
Mauro Balades
bcd6116e5c chore: Update build process to use alpha-build.sh script 2024-07-19 19:28:00 +02:00
Mauro Balades
628a0bf269 chore: Update Zen Browser preferences and styles for vertical tabs layout 2024-07-19 19:15:01 +02:00
Mauro Balades
d3900ca905 chore: Enable Link Time Optimization (LTO) and Profile Guided Optimization (PGO) 2024-07-19 17:59:51 +02:00
Mauro Balades
851b181ae9 chore: Update @zen-browser/surfer dependency to version 1.0.15 2024-07-19 17:55:22 +02:00
Mauro Balades
275fe8e837 chore: Enable smooth scrolling and overscroll in Zen Browser 2024-07-19 17:48:38 +02:00
Mauro Balades
80f8e829df fix: Fix ZenWorkspaces initialization in hidden windows and private browsing mode 2024-07-19 17:36:57 +02:00
Mauro Balades
a0f30e595b chore: Refactor tab browser styles for improved readability and maintainability 2024-07-19 17:19:24 +02:00
Mauro Balades
43460815ac Fixed tab browser when DOM fullscreen is enabled 2024-07-19 17:11:04 +02:00
Mauro Balades
69e352624e chore: Remove unused CSS color property 2024-07-19 16:55:00 +02:00
Mauro Balades
40b652869d feat: Add toggleBookmarksSidebar function to ZenUIManager 2024-07-19 16:44:54 +02:00
mauro-balades
ccb5df88b4 🔖 Update version to 1.0.0-a.5 2024-07-16 15:17:52 +00:00
mauro 🤙
4e6418c83e Actualizar windows_mozconfig 2024-07-16 11:13:25 +02:00
mauro 🤙
0e17cb9c50 Actualizar mozconfig 2024-07-16 11:13:05 +02:00
mauro 🤙
ecf5c6af38 Actualizar mozconfig 2024-07-16 11:12:47 +02:00
mauro 🤙
afe8438958 chore: Remove enable-clang-plugin option from mozconfig 2024-07-16 08:49:37 +00:00
mauro 🤙
360baa1553 Update branding in MacOSInstaller.svg 2024-07-16 08:48:36 +00:00
mauro 🤙
a34675379b chore: Remove linker option from mozconfig 2024-07-16 08:46:28 +00:00
mauro 🤙
215e2f10a9 chore: Remove enable-rust-si option from mozconfig 2024-07-16 08:37:21 +00:00
mauro 🤙
ca9b6525a2 chore: Update mozconfig to fix target option for Windows build 2024-07-16 08:29:25 +00:00
mauro 🤙
47cddef5de chore: Remove disable-maintenance-service option from mozconfig 2024-07-16 08:28:19 +00:00
mauro 🤙
bbedfd50a5 chore: Update mozconfig to enable LTO and remove unused options 2024-07-16 08:18:32 +00:00
mauro 🤙
6f60d2ff48 Merge pull request #63 from thisisarnabdas/patch-1
Fixed the license link
2024-07-16 09:08:10 +02:00
ARNAB DAS
0f76e65372 Update README.md 2024-07-16 01:30:50 +00:00
mauro 🤙
d83f189a63 chore: Update MPL LICENSE link in README.md 2024-07-15 21:57:48 +00:00
Mauro Balades
f1d4b27c58 chore: Update privacy preferences and disable telemetry 2024-07-15 03:25:12 +02:00
Mauro Balades
f2ace58825 chore: Update mozconfig to enable LTO and remove unused options 2024-07-15 03:19:11 +02:00
Mauro Balades
fe74d96914 chore: Enable workspaces by default 2024-07-15 02:57:18 +02:00
Mauro Balades
379232e94a chore: Update mozconfig to enable LTO and remove unused options 2024-07-15 01:59:27 +02:00
Mauro Balades
7e74d75612 chore: Update mozconfig to enable LTO and remove unused options 2024-07-15 01:48:55 +02:00
Mauro Balades
ac92f251bc chore: Enable LTO and remove unused options in mozconfig 2024-07-15 01:29:40 +02:00
Mauro Balades
42711a079b Added test LTO flags 2024-07-15 01:09:25 +02:00
mauro-balades
373937ea0c 🔖 Update version to 1.0.0-a.4 2024-07-14 15:08:34 +00:00
Mauro Balades
285a8de152 Refactor CSS selectors for open elements in navbar and toolbox 2024-07-14 17:07:28 +02:00
mauro-balades
11da1bf9ba 🔖 Update version to 1.0.0-a.4 2024-07-14 14:59:56 +00:00
Mauro Balades
bcb3a88d16 Refactor CSS selectors for open elements in navbar and toolbox 2024-07-14 16:58:30 +02:00
mauro-balades
092fc77fb0 🔖 Update version to 1.0.0-a.4 2024-07-14 14:54:22 +00:00
Mauro Balades
9e2cd65560 Disable workspaces by default for now 2024-07-14 16:53:31 +02:00
Mauro Balades
f8fbc79f35 Add default icon for tabs with no icon 2024-07-14 16:43:20 +02:00
Mauro Balades
577c57ba87 Refactor tab styling and layout for pinned tabs 2024-07-14 16:37:57 +02:00
Mauro Balades
0d28e86fea God, I shoud've had never created compact mode 2024-07-14 15:41:13 +02:00
Mauro Balades
41862e5d39 feat: Add link to latest release notes in README.md 2024-07-14 01:13:35 +02:00
mauro-balades
5559d1375c 🔖 Update version to 1.0.0-a.3 2024-07-13 22:59:04 +00:00
Mauro Balades
9907722feb chore: Enable Zen Workspaces functionality and set default workspace to "Default Workspace" 2024-07-14 00:58:08 +02:00
Mauro Balades
4b706ff33a Fixed subwindows not displaying correctly (closes #54) 2024-07-14 00:48:20 +02:00
Mauro Balades
52b6eab0d7 Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-14 00:32:35 +02:00
Mauro Balades
8dd9b01048 Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-14 00:31:09 +02:00
Mauro Balades
8521a2d044 chore: Update npm init script to use npm run commands for bootstrap and import 2024-07-13 22:29:33 +02:00
Mauro Balades
7e1c76a1da Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-13 22:09:50 +02:00
Mauro Balades
9a816fe73a Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-13 21:32:07 +02:00
Mauro Balades
b0c036e72b chore: Refactor ZenWorkspaces to use _createNewTabForWorkspace method for preparing new workspace 2024-07-13 21:03:14 +02:00
Mauro Balades
0a34fb4fb0 chore: Add onLocationChange method to ZenWorkspaces 2024-07-13 20:53:46 +02:00
Mauro Balades
aa812d1fea feat: Enable Zen Workspaces functionality 2024-07-13 20:39:44 +02:00
Mauro Balades
c63cfebd4f Started working on workspaces 2024-07-13 17:53:22 +02:00
Mauro Balades
c76492571b chore: Update zen-browser-shared.css to hide tab icon overlay 2024-07-13 13:43:40 +02:00
Mauro Balades
34a40bbf86 chore: Update alpha.yml GitHub workflow to use flatpak-github-actions:gnome-44 container 2024-07-13 12:05:06 +02:00
Mauro Balades
1132c70565 chore: Update if condition in alpha.yml GitHub workflow 2024-07-13 11:50:15 +02:00
Mauro Balades
515a0d4016 chore: Build flatpak repos in GitHub workflow 2024-07-13 10:31:04 +02:00
Mauro Balades
9d6cf0cb6c Fixed pinned tabs and welcome page 2024-07-13 10:00:42 +02:00
mauro-balades
f585ad045b 🔖 Update version to 1.0.0-a.2 2024-07-12 23:09:02 +00:00
Mauro Balades
0b9832dcc2 chore: Add macOS update manifest to alpha workflow 2024-07-13 01:08:29 +02:00
mauro-balades
882a6b87c7 🔖 Update version to 1.0.0-a.2 2024-07-12 21:27:13 +00:00
Mauro Balades
3ff2bcaace chore: Update zen-browser-shared.css to hide tab icon overlay (closes #41) 2024-07-12 23:24:22 +02:00
Mauro Balades
bd0cf2ea86 chore: Update zen-browser-shared.css to round the border radius of browserStack > browser 2024-07-12 23:15:24 +02:00
Mauro Balades
cfee3bf9c3 chore: Update branding names for Firefox Screenshots, Firefox Profiler, Firefox Translations, Firefox Suggest, Firefox Home, and Firefox View 2024-07-12 22:51:07 +02:00
Mauro Balades
fc8c0facdd chore: Update pnpm cache setup in GitHub workflow 2024-07-12 22:48:21 +02:00
Mauro Balades
ad79a7e318 chore: Update runs-on to macos-14 for Mac job, add macos.mar to artifact list, and update mozconfig for Linux build 2024-07-12 21:36:05 +02:00
Mauro Balades
9297fe8f9a chore: Update runs-on to macos-14 for Mac job and bump @zen-browser/surfer to version 1.0.14 2024-07-12 19:43:09 +02:00
Mauro Balades
73b7903839 chore: Update runs-on to macos-14 for Mac job 2024-07-12 19:30:21 +02:00
Mauro Balades
cef86e1b02 chore: Update mozconfig for Linux build 2024-07-12 19:05:48 +02:00
Mauro Balades
a274035159 chore: Set ZEN_RELEASE environment variable for surfer build 2024-07-12 18:53:43 +02:00
Mauro Balades
c57e93ba7b let's try build for macos 2024-07-12 18:18:17 +02:00
mauro-balades
82327db0d2 🔖 Update version to 1.0.0-a.1 2024-07-12 14:11:35 +00:00
mauro 🤙
51f36685e1 chore: Update runs-on to ubuntu-latest for Linux job 2024-07-12 14:10:56 +00:00
mauro 🤙
9b64ee08a2 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 14:09:30 +00:00
mauro-balades
a9f02e6120 🔖 Update version to 1.0.0-a.1 2024-07-12 13:55:15 +00:00
mauro 🤙
99dd17560a chore: Update runs-on to warp-ubuntu-latest-x64-16x for Linux job 2024-07-12 13:54:29 +00:00
mauro 🤙
97defffac3 chore: Add warpbuild for Linux builds 2024-07-12 12:58:59 +00:00
mauro-balades
323ac423c9 🔖 Update version to 1.0.0-a.1 2024-07-12 12:47:34 +00:00
mauro 🤙
3c603fea40 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 12:46:53 +00:00
mauro-balades
e1183c0ff4 🔖 Update version to 1.0.0-a.1 2024-07-12 08:55:47 +00:00
mauro 🤙
3db9315f82 chore: Update version to 1.0.0-a.0 and fix Windows dependencies in windows_mozconfig 2024-07-12 08:55:19 +00:00
mauro-balades
9ecd4a418d 🔖 Update version to 1.0.0-a.1 2024-07-12 08:41:08 +00:00
mauro 🤙
089ff67a17 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 08:40:39 +00:00
mauro-balades
c804ef7149 🔖 Update version to 1.0.0-a.1 2024-07-12 08:26:53 +00:00
mauro 🤙
68e990e762 chore: Update version to 1.0.0-a.0 and enable linker option only when not cross compiling 2024-07-12 08:26:18 +00:00
mauro-balades
f97103ce8b 🔖 Update version to 1.0.0-a.1 2024-07-12 08:16:03 +00:00
mauro 🤙
0cfb6875c5 chore: Enable linker option only when not cross compiling 2024-07-12 08:15:17 +00:00
mauro-balades
cdd67cd79e 🔖 Update version to 1.0.0-a.1 2024-07-12 08:02:45 +00:00
mauro 🤙
c151b41e56 chore: Disable maintenance service in windows_mozconfig and common/mozconfig 2024-07-12 08:02:04 +00:00
mauro-balades
d72c3eae4b 🔖 Update version to 1.0.0-a.1 2024-07-12 07:55:06 +00:00
mauro 🤙
e570ad9b4d chore: Update @zen-browser/surfer dependency to version 1.0.13 2024-07-12 07:54:28 +00:00
mauro-balades
f8ad77c903 🔖 Update version to 1.0.0-a.1 2024-07-12 07:40:59 +00:00
mauro 🤙
cc60b06b7f chore: Update @zen-browser/surfer dependency to version 1.0.12 2024-07-12 07:38:44 +00:00
mauro 🤙
19788deee4 Added optimization flags 2024-07-12 07:38:02 +00:00
mauro-balades
ac5f5e1ad3 🔖 Update version to 1.0.0-a.1 2024-07-12 07:10:15 +00:00
mauro 🤙
d3e1b09b00 merge 2024-07-12 07:08:49 +00:00
mauro 🤙
7c371d295a chore: Update surfer.json displayVersion to 1.0.0-a.0 2024-07-12 07:08:21 +00:00
mauro-balades
fb8ccfed50 🔖 Update version to 0.0.0-a.3 2024-07-11 22:55:21 +00:00
mauro 🤙
b4b7eb554f chore: Update @zen-browser/surfer dependency to version 1.0.11 2024-07-11 22:54:33 +00:00
mauro-balades
cad9436029 🔖 Update version to 0.0.0-a.3 2024-07-11 21:02:14 +00:00
Mauro Balades
7f6dbadc9c chore: Update alpha.yml workflow to fix path for update manifests 2024-07-11 23:01:29 +02:00
mauro-balades
0579b88dc7 🔖 Update version to 0.0.0-a.3 2024-07-11 19:27:24 +00:00
Mauro Balades
18407288ea chore: Update alpha.yml workflow to upload installer stub and update manifests 2024-07-11 21:26:53 +02:00
mauro-balades
42218242e2 🔖 Update version to 0.0.0-a.3 2024-07-11 17:57:33 +00:00
Mauro Balades
7b61419039 chore: Update surfer.json displayVersion to 0.0.0-a.2 2024-07-11 19:57:01 +02:00
Mauro Balades
97da0b2bf0 Merge branch 'main' of https://github.com/zen-browser/core 2024-07-11 19:56:49 +02:00
Mauro Balades
d0ea429401 chore: Update alpha.yml workflow to use new deploy key for SSH authentication 2024-07-11 19:56:23 +02:00
mauro-balades
f30c7e33ec 🔖 Update version to 0.0.0-a.3 2024-07-11 17:51:12 +00:00
Mauro Balades
b300a95854 chore: Update alpha.yml workflow to add SSH key setup and commit update manifests 2024-07-11 19:50:08 +02:00
Mauro Balades
c6632e8dc8 chore: Update transition timing in zen-browser-shared.css 2024-07-11 16:14:04 +02:00
Mauro Balades
3b2ae304d2 Added watermark and springs 2024-07-11 16:08:23 +02:00
mauro-balades
a2afe5b93a 🔖 Update version to 0.0.0-a.3 2024-07-11 13:34:38 +00:00
Mauro Balades
b59174d47d chore: Update alpha.yml workflow to set new remote URL for git push 2024-07-11 15:34:09 +02:00
Mauro Balades
0449a14c19 chore: Update alpha.yml workflow to remove unused artifact upload step 2024-07-11 15:33:39 +02:00
mauro-balades
29b77b7591 🔖 Update version to 0.0.0-a.3 2024-07-11 12:02:08 +00:00
Mauro Balades
718ee7c51a new release! 2024-07-11 14:01:31 +02:00
Mauro Balades
8a3b30e8a6 chore: Update alpha.yml workflow to remove unused artifact upload step 2024-07-11 14:01:09 +02:00
mauro-balades
023a8e26b9 🔖 Update version to 0.0.0-a.3 2024-07-11 11:42:30 +00:00
Mauro Balades
b092d44a7c Refactor ZenSidebarManager and ZenUIManager to improve tab handling 2024-07-11 13:11:49 +02:00
Mauro Balades
79dc54c3f4 chore: Update '@zen-browser/surfer' dependency to version 1.0.9 2024-07-11 11:08:51 +02:00
Mauro Balades
ef99073b06 chore: Update welcome.css to improve line height for h1 element 2024-07-11 10:22:05 +02:00
Mauro Balades
2783fa64d8 chore: Refactor ZenSidebarManager and ZenUIManager to improve tab handling 2024-07-11 09:43:48 +02:00
Mauro Balades
4719e0ce31 chore: Update '@zen-browser/surfer' dependency to version 1.0.8 2024-07-11 01:14:50 +02:00
Mauro Balades
6b0945663a chore: Update alpha.yml workflow to unset SURFER_PLATFORM 2024-07-10 23:21:06 +02:00
Mauro Balades
5cafa401c3 test 2024-07-10 23:09:34 +02:00
Mauro Balades
15b134511b chore: Update path in alpha.yml workflow to fix directory listing issue 2024-07-10 22:26:17 +02:00
Mauro Balades
4270c571ac chore: Update path in alpha.yml workflow to fix directory listing issue 2024-07-10 22:15:08 +02:00
Mauro Balades
f5c9e0d405 chore: Update mozconfig options and dependencies 2024-07-10 22:11:16 +02:00
Mauro Balades
ec9f5f4dfa chore: Update mozconfig options and dependencies 2024-07-10 21:55:21 +02:00
Mauro Balades
4c6f9ef06c chore: Disable wasm sandboxing for the sake of my sanity 2024-07-10 21:43:53 +02:00
Mauro Balades
d087a26af2 chore: Update mozconfig options and dependencies 2024-07-10 21:24:01 +02:00
Mauro Balades
f32ef38823 chore: Remove enable-crashreporter option from mozconfig 2024-07-10 21:12:46 +02:00
Mauro Balades
cf581654ef chore: Update '@zen-browser/surfer' dependency to version 1.0.7 2024-07-10 19:42:58 +02:00
Mauro Balades
62a6573f71 chore: Update '@zen-browser/surfer' dependency to version 1.0.7 2024-07-10 19:03:58 +02:00
Mauro Balades
968bd32ae3 chore: Update '@zen-browser/surfer' dependency to version 1.0.6 2024-07-10 18:45:29 +02:00
Mauro Balades
bc3a1f329e chore: Update '@zen-browser/surfer' dependency to version 1.0.5 2024-07-10 18:29:39 +02:00
Mauro Balades
9fca7074ee chore: Update Firefox version to 128.0! 2024-07-10 18:27:52 +02:00
Mauro Balades
eece97990d chore: Update browser preferences and CSS styles 2024-07-09 17:00:50 +02:00
Mauro Balades
8acae4deb3 Fix settings visibility issue 2024-07-09 14:35:30 +02:00
Mauro Balades
eed3bac755 chore: Update CSS selector for identity icon box in urlbar 2024-07-09 14:07:52 +02:00
Mauro Balades
da89b77e75 chore: Add ZenUIManager script to improve browser functionality 2024-07-08 08:02:33 +02:00
Mauro Balades
a12c433b65 chore: Update panel separator color in shared themes 2024-07-08 07:28:29 +02:00
Mauro Balades
a79197c78d Merge 2024-07-07 09:27:56 +02:00
Mauro Balades
5e8a3df528 Fixed updating manifests 2024-07-07 09:26:34 +02:00
mauro-balades
6a28d0cee9 🔖 Update version to 0.0.0-a.2 2024-07-06 22:48:38 +00:00
mauro 🤙
a73c7fae9e chore: Update update manifests for 0.0.0-a.3 2024-07-06 22:47:44 +00:00
mauro-balades
53a57d8078 🔖 Update version to 0.0.0-a.3 2024-07-06 20:45:55 +00:00
Mauro Balades
a259c40209 chore: Update surfer.json file paths in update_ff.py 2024-07-06 22:45:07 +02:00
Mauro Balades
428eb56cea chore: Update package.json dependencies to use @zen-browser/surfer v1.0.4 2024-07-06 21:45:24 +02:00
mauro-balades
27dca1cc6a 🔖 Update version to 0.0.0-a.2 2024-07-06 18:31:16 +00:00
Mauro Balades
09d90291bf Fixed opening extensions (closes #34) 2024-07-06 20:29:08 +02:00
Mauro Balades
f9cafd7cc0 Temporary fix to opening extensions (#34) and added update server support 2024-07-06 18:49:09 +02:00
Mauro Balades
df1c6af96a chore: Fixed flat resolution on extension icons (#34) 2024-07-06 16:03:21 +02:00
Mauro Balades
a1dbf8f64a Merge branch 'main' of https://github.com/zen-browser/core 2024-07-05 10:04:31 +02:00
Mauro Balades
2268515bb1 Update dot size and color in welcome.css and add color preview in welcome.html 2024-07-05 10:04:23 +02:00
mauro-balades
ecf0164a5a 🔖 Update version to 0.0.0-a.1 2024-07-04 23:15:01 +00:00
415 changed files with 5437 additions and 3584 deletions

2
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1,2 @@
patreon: zen_browser

48
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,48 @@
name: Bug Report
description: File a bug report
labels: [bug]
body:
- type: markdown
attributes:
value: |
Thank you for filing a bug report.
- type: textarea
id: what-happened
attributes:
label: What happened?
description: Also tell us, what did you expect to happen?
placeholder: Tell us what you see!
validations:
required: true
- type: checkboxes
id: firefox
attributes:
label: Reproducible?
description: Is this issue reproducible on Firefox?
options:
- label: I have checked that this issue cannot be reproduced on Mozilla Firefox.
- type: input
id: version
attributes:
label: Version
description: What version of our software are you running? Please DO NOT report Classic bugs.
placeholder: 1.0.0
validations:
required: true
- type: dropdown
id: platform
attributes:
label: What platform are you seeing the problem on?
multiple: true
options:
- Linux
- macOS
- Windows
validations:
required: true
- type: textarea
id: logs
attributes:
label: Relevant log output
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell

1
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@@ -0,0 +1 @@
blank_issues_enabled: true

View File

@@ -0,0 +1,20 @@
---
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

@@ -13,6 +13,11 @@ on:
required: false required: false
default: true default: true
type: 'boolean' type: 'boolean'
create_flatpak:
description: 'Create a flatpak release (It defaults to creating a release)'
required: false
default: false
type: 'boolean'
jobs: jobs:
@@ -41,37 +46,35 @@ jobs:
run: | run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies - name: Install dependencies
run: pnpm install run: pnpm install
- name: Setup gluon - name: Setup Surfer
run: | run: |
npm i -g gluon-build@next npm i -g @zen-browser/surfer
- name: Bump version - name: Bump version
if: ${{ github.event.inputs.update_version == 'true' }}
run: | run: |
pnpm gluon ci --brand alpha --bump prerelease pnpm surfer ci --brand alpha --bump prerelease
- name: Bump version without new version
if: ${{ github.event.inputs.update_version == 'false' }}
run: |
pnpm surfer ci --brand alpha
- name: Debug - name: Debug
run: | run: |
gluon get version surfer get version
gluon get version | xargs surfer get version | xargs
echo "$(gluon get version | xargs)" echo "$(surfer get version | xargs)"
- name: Export release date - name: Export release date
id: data id: data
shell: bash shell: bash
run: | run: |
echo "builddate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT echo "builddate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT
echo "version=$(gluon get version | xargs)" >> $GITHUB_OUTPUT echo "version=$(surfer get version | xargs)" >> $GITHUB_OUTPUT
- uses: stefanzweifel/git-auto-commit-action@v4 - uses: stefanzweifel/git-auto-commit-action@v4
if: ${{ github.event.inputs.update_version == 'true' }} if: ${{ github.event.inputs.update_version == 'true' }}
@@ -101,293 +104,30 @@ jobs:
run: | run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies - name: Install dependencies
run: pnpm install run: pnpm install
- name: Setup gluon - name: Setup surfer
run: | run: |
npm i -g gluon-build@next npm i -g @zen-browser/surfer
- name: Activate gluon CLI - name: Activate surfer CLI
run: | run: |
echo "There's a bug in the gluon CLI, we run this so that gluon sets everything up correctly" echo "There's a bug in the surfer CLI, we run this so that surfer sets everything up correctly"
pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Check version - name: Check version
run: | run: |
echo "$(pwd)" echo "$(pwd)"
ls . ls .
echo "version=$(pnpm gluon get version | xargs)" >> $GITHUB_OUTPUT echo "version=$(pnpm surfer get version | xargs)" >> $GITHUB_OUTPUT
if [[ $(pnpm gluon get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then if [[ $(pnpm surfer get version | xargs) == ${{ needs.build-data.outputs.version }} ]]; then
echo ">>> Version matches" echo ">>> Version matches"
else else
echo ">>> Version mismatch" echo ">>> Version mismatch"
exit 1 exit 1
fi fi
linux:
permissions:
contents: write
runs-on: ubuntu-latest
needs: [build-data, check-release]
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v3
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
- name: Set Swap Space
uses: pierotofy/set-swap-space@v1.0
with:
swap-size-gb: 6
- name: Setup git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Install system dependencies
run: |
sudo apt-get update --fix-missing
sudo apt-get update
sudo apt-get install dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
pip install pycairo testresources
- name: Disable wasm sandboxing for the sake of my sanity
run: |
echo "ac_add_options --without-wasm-sandboxed-libraries" >> mozconfig
- name: Free up space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Install sccache
env:
LINK: https://github.com/mozilla/sccache/releases/download
SCCACHE_VERSION: 0.2.13
run: |
SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl
mkdir -p $HOME/.local/bin
curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz
mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Save sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: /home/runner/.cache/sccache
key: ${{ runner.os }}-sccache
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install
- name: Load gluon CI setup
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependencies
run: pnpm gluon download
- name: Import
run: pnpm gluon import
- name: Bootstrap
run: |
cd engine
./mach --no-interactive bootstrap --application-choice browser
cd ..
- name: Build
run: pnpm build
- name: Package
run: pnpm package
- name: Rename artifacts
run: |
mv dist/zen-*.tar.bz2 "zen.linux.tar.bz2"
mv dist/output.mar linux.mar
- name: Upload binary
uses: actions/upload-artifact@v3
with:
name: zen.linux.tar.bz2
path: ./zen.linux.tar.bz2
- name: Upload mar
uses: actions/upload-artifact@v3
with:
name: linux.mar
path: ./linux.mar
- name: Upload update manifests
uses: actions/upload-artifact@v3
with:
name: linux_update_manifest
path: ./dist/update
windows:
runs-on: ubuntu-latest
needs: [build-data, check-release]
steps:
- name: Install Node.js and pnpm
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v3
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
- name: Set Swap Space
uses: pierotofy/set-swap-space@v1.0
with:
swap-size-gb: 6
- name: Install pnpm
run: npm install -g pnpm
- name: Setup git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Install dependencies
run: |
pnpm i
- name: Load gluon CI setup
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download
run: pnpm gluon download
- name: Disable wasm sandboxing for the sake of my sanity
run: |
cd engine/
echo "ac_add_options --without-wasm-sandboxed-libraries" >> mozconfig
- name: Free up space
run: |
sudo rm -rf /usr/share/dotnet
sudo rm -rf /opt/ghc
sudo rm -rf "/usr/local/share/boost"
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
- name: Setup For Windows
run: |
set -x
mkdir -p ~/win-cross
cd engine/
echo Setup wine
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
tar --zstd -xvf wine.tar.zst -C ~/win-cross
rm wine.tar.zst
echo Setup Visual Studio
sudo apt install -y msitools python3-pip
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
chmod -R +x "$(echo ~)/win-cross/vs2022" || true
cat ../.github/workflows/src/windows_mozconfig >> ../configs/common/mozconfig
cd ..
npm install -g pnpm
pnpm gluon bootstrap
cd engine/
ls ~/.mozbuild/clang/lib/clang/
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
cat ../configs/common/mozconfig
ls ~/win-cross/nsis || true
- name: setup Rust
run: |
cd engine/
# Install a rust version compatible with 17
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.76
source $HOME/.cargo/env
rustup target add x86_64-pc-windows-msvc
cargo install cargo-download
cargo download -x windows=0.52.0
#? https://github.com/mozilla/sccache#known-caveats
export CARGO_INCREMENTAL=0
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
- name: Import
run: pnpm gluon import --verbose
- name: Build
run: pnpm build
- name: Package
run: |
set -x
pnpm package
mv ./dist/output.mar windows.mar
mv ./dist/zen-$(pnpm gluon get version | xargs).en-US.win64.zip zen.win64.zip
ls ./dist
ls .
#- name: Upload artifact
# uses: actions/upload-artifact@v3
# with:
# name: zen.installer.exe
# path: ./dist/zen.installer.exe
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: zen.win64.zip
path: ./zen.win64.zip
- name: Upload mar
uses: actions/upload-artifact@v3
with:
name: windows.mar
path: ./windows.mar
- name: Upload update manifests
uses: actions/upload-artifact@v3
with:
name: windows_update_manifest
path: ./dist/update
source: source:
permissions: permissions:
@@ -422,14 +162,14 @@ jobs:
- name: Install dependencies - name: Install dependencies
run: pnpm install run: pnpm install
- name: Load gluon CI setup - name: Load surfer CI setup
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} run: pnpm surfer ci --brand alpha --display-version ${{ needs.build-data.outputs.version }}
- name: Download firefox source and dependancies - name: Download firefox source and dependancies
run: pnpm gluon download --verbose run: pnpm surfer download --verbose
- name: Import - name: Import
run: pnpm gluon import --verbose run: pnpm surfer import --verbose
- name: Compress - name: Compress
run: | run: |
@@ -439,136 +179,152 @@ jobs:
cd .. cd ..
- name: Upload artifact - name: Upload artifact
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v4
with: with:
name: zen.source.tar.gz name: zen.source.tar.gz
path: ./zen.source.tar.gz path: ./zen.source.tar.gz
#windows-step-1:
# name: Windows build step 1 (PGO build)
# uses: ./.github/workflows/windows-alpha-build.yml
# needs: [build-data]
# permissions:
# contents: write
# with:
# build-version: ${{ needs.build-data.outputs.version }}
# generate-gpo: true
# profile-data-path-archive: zen-windows-x86_64-profile-data-and-jarlog.zip
#windows-step-2:
# name: Windows build step 2 (Generate profile data)
# uses: ./.github/workflows/windows-profile-build.yml
# permissions:
# contents: write
# needs: [windows-step-1, build-data]
# with:
# build-version: ${{ needs.build-data.outputs.version }}
# profile-data-path-archive: zen.win64-pgo-stage-1.zip
windows-step-3:
name: Windows build step 3 (build with profile data)
uses: ./.github/workflows/windows-alpha-build.yml
permissions:
contents: write
needs: [build-data]
with:
build-version: ${{ needs.build-data.outputs.version }}
generate-gpo: false
linux:
name: Linux build
uses: ./.github/workflows/linux-alpha-build.yml
permissions:
contents: write
needs: [build-data]
with:
build-version: ${{ needs.build-data.outputs.version }}
mac: mac:
if: false name: macOS build
runs-on: macos-13 uses: ./.github/workflows/macos-alpha-build.yml
needs: [build-data, check-release] permissions:
contents: write
needs: [build-data]
with:
build-version: ${{ needs.build-data.outputs.version }}
distro-flatpak:
name: Build flatpak repos
needs: [linux]
runs-on: ubuntu-latest
permissions:
contents: write
container:
image: bilelmoussaoui/flatpak-github-actions:gnome-44
options: --privileged
if: ${{ github.event.inputs.create_release == 'true' || github.event.inputs.create_flatpak == 'true' }}
steps: steps:
- name: Install Node.js - uses: actions/checkout@v4
uses: actions/setup-node@v3
with: with:
node-version: 20 repository: zen-browser/flatpak
token: ${{ secrets.DEPLOY_KEY }}
submodules: recursive
- uses: actions/setup-python@v5 - name: Download artifacts
uses: actions/download-artifact@v4
with: with:
python-version: '3.11' name: zen.linux.tar.bz2
- uses: actions/checkout@v3 - uses: flatpak/flatpak-github-actions/flatpak-builder@v6
- name: Setup git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Install system dependencies
run: |
brew install cairo sccache gnu-tar mercurial
sudo pip install setuptools
- name: Force usage fo gnu-tar
run: |
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
source ~/.bash_profile
- name: Save sccache
uses: actions/cache@v3
continue-on-error: false
with: with:
path: ~/Library/Caches/Mozilla.sccache bundle: com.zen.browser.flatpak
key: ${{ runner.os }}-sccache manifest-path: com.zen.browser.flatpak.yml
cache-key: flatpak-builder-${{ github.sha }}
verbose: true
- name: Install pnpm - name: Find flatpak bundle
run: npm install -g pnpm run: find .
- name: Get pnpm store directory - name: Upload flatpak bundle
id: pnpm-cache uses: actions/upload-artifact@v4
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- uses: actions/cache@v3
name: Setup pnpm cache
with: with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }} name: com.zen.browser.flatpak
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} path: com.zen.browser.flatpak
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies # - name: Publish to Flathub (beta)
run: pnpm install # uses: flatpak/flatpak-github-actions/flat-manager@v6.1
- name: Load gluon CI setup # with:
run: pnpm gluon ci --brand alpha --display-version ${{ needs.build-data.outputs.version }} # flat-manager-url: https://hub.flathub.org/
# repository: beta
- name: Download firefox source and dependancies # token: ${{ secrets.FLATHUB_TOKEN }}
run: pnpm gluon download
- name: Import
run: pnpm gluon import
- name: Bootstrap
run: |
cd engine
./mach --no-interactive bootstrap --application-choice browser
cd ..
- name: Gluon build
run: pnpm build --verbose
- name: Package
run: pnpm package
- name: Rename artifacts
run: |
mv ./dist/*.dmg "zen.macos.dmg"
mv ./dist/output.mar macos.mar
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: zen.macos.dmg
path: ./zen.macos.dmg
- name: Upload mar
uses: actions/upload-artifact@v3
with:
name: macos.mar
path: ./macos.mar
- name: Upload update manifests
uses: actions/upload-artifact@v3
with:
name: macos_update_manifest
path: ./dist/update
release: release:
if: ${{ github.event.inputs.create_release == 'true' }} if: ${{ github.event.inputs.create_release == 'true' }}
permissions: write-all permissions: write-all
name: Release name: Release
needs: [build-data, linux, source, windows, check-release] needs: [build-data, linux, source, windows-step-3, check-release, mac, distro-flatpak]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Update repo - name: Update repo
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Git Pull - name: Git Pull
run: git pull run: git pull
- uses: actions/download-artifact@v3 - uses: actions/download-artifact@v4
- name: List
run: find .
- name: Clone updates repo
uses: actions/checkout@v4
with:
repository: zen-browser/updates-server
path: updates-server
token: ${{ secrets.DEPLOY_KEY }}
- name: Copy update manifests
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/
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 🚀 Update update manifests
commit_user_name: Zen Browser Robot
commit_user_email: zen-browser-bot@users.noreply.github.com
repository: ./updates-server
- name: release-github - name: release-github
uses: 'marvinpinto/action-automatic-releases@latest' uses: 'marvinpinto/action-automatic-releases@latest'
with: with:
repo_token: '${{ secrets.GITHUB_TOKEN }}' repo_token: '${{ secrets.DEPLOY_KEY }}'
automatic_release_tag: ${{ needs.build-data.outputs.version }} automatic_release_tag: ${{ needs.build-data.outputs.version }}
prerelease: true
title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})' title: 'Alpha build - ${{ needs.build-data.outputs.version }} (${{ needs.build-data.outputs.build_date }})'
files: | files: |
zen.linux.tar.bz2 zen.linux.tar.bz2
@@ -576,29 +332,8 @@ jobs:
zen.source.tar.gz zen.source.tar.gz
linux.mar linux.mar
windows.mar windows.mar
macos.mar
- name: List zen.installer.exe
run: find . zen.installer.pretty.exe
zen.macos.dmg
- name: Checkout tools repo com.zen.browser.flatpak
uses: actions/checkout@v3
with:
repository: zen-browser/desktop
path: updates
token: ${{ secrets.GITHUB_TOKEN }}
- name: Pull tools repo
run: git pull && git checkout main
- name: Copy update manifests
run: |
mkdir -p updates/updates
cp -a linux_update_manifest/. updates/updates/
cp -a windows_update_manifest/. updates/updates/
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: 🔖 Upload update manifests ${{ needs.build-data.outputs.version }}
commit_user_name: Zen Browser Robot
commit_user_email: zen-browser-bot@users.noreply.github.com
repository: ./updates

129
.github/workflows/linux-alpha-build.yml vendored Normal file
View File

@@ -0,0 +1,129 @@
on:
workflow_call:
inputs:
build-version:
description: 'The version to build'
required: true
type: string
jobs:
build-linux:
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v3
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
- name: Set Swap Space
uses: pierotofy/set-swap-space@v1.0
with:
swap-size-gb: 6
- name: Setup git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Install system dependencies
run: |
sudo apt-get update --fix-missing
sudo apt-get update
sudo apt-get install dos2unix yasm nasm build-essential libgtk2.0-dev libpython3-dev m4 uuid libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdrm-dev libdbus-glib-1-dev libdbus-glib-1-dev libgtk-3-dev libpulse-dev libx11-xcb-dev libxt-dev xvfb lld llvm
pip install pycairo testresources
- name: Free up space
run: sh .github/workflows/src/disk-setup-and-swap.sh
- name: Configure sccache
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Install sccache
env:
LINK: https://github.com/mozilla/sccache/releases/download
SCCACHE_VERSION: 0.2.13
run: |
SCCACHE_FILE=sccache-$SCCACHE_VERSION-x86_64-unknown-linux-musl
mkdir -p $HOME/.local/bin
curl -L "$LINK/$SCCACHE_VERSION/$SCCACHE_FILE.tar.gz" | tar xz
mv -f $SCCACHE_FILE/sccache $HOME/.local/bin/sccache
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Save sccache
uses: actions/cache@v3
continue-on-error: false
with:
path: /home/runner/.cache/sccache
key: ${{ runner.os }}-sccache
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
- name: Download firefox source and dependencies
run: pnpm surfer download
- name: Import
run: pnpm surfer import
- name: Bootstrap
run: |
cd engine
./mach --no-interactive bootstrap --application-choice browser
cd ..
- name: Build
continue-on-error: true
run: sh .github/workflows/src/alpha-build.sh
- name: Build again if it failed
if: failure()
run: sh .github/workflows/src/alpha-build.sh
- name: Package
run: pnpm package
- name: Rename artifacts
run: |
mv dist/zen-*.tar.bz2 "zen.linux.tar.bz2"
mv dist/output.mar linux.mar
- name: Upload binary
uses: actions/upload-artifact@v4
with:
name: zen.linux.tar.bz2
path: ./zen.linux.tar.bz2
- name: Upload mar
uses: actions/upload-artifact@v4
with:
name: linux.mar
path: ./linux.mar
- name: Upload update manifests
uses: actions/upload-artifact@v4
with:
name: linux_update_manifest
path: ./dist/update

102
.github/workflows/macos-alpha-build.yml vendored Normal file
View File

@@ -0,0 +1,102 @@
on:
workflow_call:
inputs:
build-version:
description: 'The version to build'
required: true
type: string
jobs:
mac-build:
runs-on: macos-14
steps:
- name: Install Node.js
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- uses: actions/checkout@v4
- name: Setup git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Install system dependencies
run: |
brew install cairo sccache gnu-tar mercurial
sudo pip install setuptools
- name: Free up space
run: sh .github/workflows/src/disk-setup-and-swap.sh
- name: Force usage fo gnu-tar
run: |
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.bash_profile
echo 'export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zsh
source ~/.bash_profile
- name: Install pnpm
run: npm install -g pnpm
- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
- name: Install dependencies
run: pnpm install
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
- name: Download firefox source and dependancies
run: pnpm surfer download
- name: Import
run: pnpm surfer import
- name: Bootstrap
run: |
cd engine
./mach --no-interactive bootstrap --application-choice browser
cd ..
- name: build Zen
run: sh .github/workflows/src/alpha-build.sh
- name: Rebuild Zen if failed
if: failure()
run: sh .github/workflows/src/alpha-build.sh
- name: Package
run: pnpm package
- name: Rename artifacts
run: |
mv ./dist/*.dmg "zen.macos.dmg"
mv ./dist/output.mar macos.mar
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: zen.macos.dmg
path: ./zen.macos.dmg
- name: Upload mar
uses: actions/upload-artifact@v4
with:
name: macos.mar
path: ./macos.mar
- name: Upload update manifests
uses: actions/upload-artifact@v4
with:
name: macos_update_manifest
path: ./dist/update

27
.github/workflows/src/alpha-build.sh vendored Normal file
View File

@@ -0,0 +1,27 @@
set -ex
if command -v apt-get &> /dev/null
then
sudo apt-get update
sudo apt-get install -y xvfb
fi
ulimit -n 4096
# Check if xfvb is installed
if ! command -v Xvfb &> /dev/null; then
if ! test "$ZEN_CROSS_COMPILING"
then
Xvfb :2 -screen 0 1024x768x24 &
export LLVM_PROFDATA=$HOME/.mozbuild/clang/bin/llvm-profdata
export DISPLAY=:2
fi
export ZEN_RELEASE=1
pnpm build
else
echo "Xvfb could not be found, running without it"
echo "ASSUMING YOU ARE RUNNING THIS ON MACOS"
set -v
export ZEN_RELEASE=1
pnpm build
fi

View File

@@ -0,0 +1,50 @@
echo Before:
if [ command -v free ]; then
free -h
fi
if [ command -v df ]; then
df -h
fi
echo
echo
sudo swapoff /mnt/swapfile
sudo rm /mnt/swapfile
sudo fallocate -l 10G /mnt/swapfile
sudo chmod 600 /mnt/swapfile
sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile
sudo apt remove -y '^dotnet-.*' '^llvm-.*' '^php.*' '^mongodb-.*' '^mysql-.*' clang azure-cli google-cloud-sdk google-chrome-stable microsoft-edge firefox powershell mono-devel libgl1-mesa-dri acl aria2 autoconf automake binutils bison brotli bzip2 coreutils
sudo apt autoremove -y
sudo apt clean
sudo rm -rf ./git
sudo rm -rf /home/linuxbrew
sudo rm -rf /usr/share/dotnet
sudo rm -rf /usr/local/lib/android
sudo rm -rf /usr/local/graalvm
sudo rm -rf /usr/local/share/powershell
sudo rm -rf /usr/local/share/chromium
sudo rm -rf /opt/ghc
sudo rm -rf /usr/local/share/boost
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
sudo rm -rf /etc/apache2
sudo rm -rf /etc/nginx
sudo rm -rf /usr/local/share/chrome_driver
sudo rm -rf /usr/local/share/edge_driver
sudo rm -rf /usr/local/share/gecko_driver
sudo rm -rf /usr/share/java
sudo rm -rf /usr/share/miniconda
sudo rm -rf /usr/local/share/vcpkg
echo
echo
echo After:
if [ command -v free ]; then
free -h
fi
if [ command -v df ]; then
df -h
fi

View File

@@ -10,10 +10,31 @@ export WINEDEBUG=-all
ac_add_options --target=x86_64-pc-windows-msvc ac_add_options --target=x86_64-pc-windows-msvc
export MOZ_STUB_INSTALLER=1 export MOZ_STUB_INSTALLER=1
export MOZ_MAINTENANCE_SERVICE=
export MOZ_PKG_FORMAT=TAR export MOZ_PKG_FORMAT=TAR
export MOZ_LTO=cross
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 # ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE

View File

@@ -0,0 +1,199 @@
on:
workflow_call:
inputs:
generate-gpo:
required: true
type: boolean
default: false
build-version:
description: 'The version to build'
required: true
type: string
profile-data-path-archive:
description: 'The path to the zip archive containing the profile data'
type: string
jobs:
windows-build:
runs-on: ubuntu-latest
steps:
- name: Install Node.js and pnpm
uses: actions/setup-node@v3
with:
node-version: 20
- uses: actions/checkout@v4
# Give the runner some swap space in an attempt to stop gkrust from crashing the build
- name: Set Swap Space
uses: pierotofy/set-swap-space@v1.0
with:
swap-size-gb: 6
- name: Install pnpm
run: npm install -g pnpm
- name: Setup git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Install dependencies
run: |
pnpm i
- name: Load surfer CI setup
run: pnpm surfer ci --brand alpha --display-version ${{ inputs.build-version }}
- name: Download
run: pnpm surfer download
- name: Free up space
run: sh .github/workflows/src/disk-setup-and-swap.sh
- name: "win-cross Cache"
env:
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 5
id: cache-win-cross
uses: actions/cache@v4
with:
path: ${HOME}/win-cross
key: win-cross
- name: Configure sccache
uses: actions/github-script@v7
with:
script: |
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Setup For Windows
if: steps.cache-win-cross.outputs.cache-hit != 'true'
run: |
set -x
mkdir -p ~/win-cross
cd engine/
echo Setup wine
aria2c "https://firefox-ci-tc.services.mozilla.com/api/index/v1/task/gecko.cache.level-1.toolchains.v3.linux64-wine.latest/artifacts/public%2Fbuild%2Fwine.tar.zst" -o wine.tar.zst
tar --zstd -xvf wine.tar.zst -C ~/win-cross
rm wine.tar.zst
echo Setup Visual Studio
sudo apt install -y msitools python3-pip
./mach python --virtualenv build taskcluster/scripts/misc/get_vs.py build/vs/vs2022.yaml ~/win-cross/vs2022
- name: Bootstrap
run: |
set -x
cd engine/
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"
pnpm surfer bootstrap
cd engine/
ls ~/.mozbuild/clang/lib/clang/
echo "export LIB=\"$(cd ~/.mozbuild/clang/lib/clang/* && cd lib/windows && pwd)\"" >> ../configs/common/mozconfig
cat ../configs/common/mozconfig
ls ~/win-cross/wine || true
ls ~/win-cross/vs2022 || true
- name: setup Rust
run: |
cd engine/
# Install a rust version compatible with 17
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain 1.76
source $HOME/.cargo/env
rustup target add x86_64-pc-windows-msvc
cargo install cargo-download
cargo download -x windows=0.52.0
#? https://github.com/mozilla/sccache#known-caveats
export CARGO_INCREMENTAL=0
echo "export MOZ_WINDOWS_RS_DIR=$(pwd)/windows-0.52.0" >> ../configs/common/mozconfig
- uses: actions/download-artifact@v4
name: Download artifact if use profdata
if: ${{ !inputs.generate-gpo }}
with:
path: ~/artifact
- name: Import
run: pnpm surfer import --verbose
- name: Build
run: |
set -x
export SURFER_PLATFORM="win32"
export ZEN_CROSS_COMPILING=1
# if test ${{ inputs.generate-gpo }}; then
# export ZEN_GA_GENERATE_PROFILE=1
# fi
sh .github/workflows/src/alpha-build.sh
- name: Package
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 .
- name: Move package for PGO upload
if: ${{ inputs.generate-gpo }}
run: |
set -x
mv ./zen.win64.zip ./zen.win64-pgo-stage-1.zip
- name: Upload artifact
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: zen.win64.zip
path: ./zen.win64.zip
- name: Upload PGO build
uses: actions/upload-artifact@v4
if: ${{ inputs.generate-gpo }}
with:
name: ${{ 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: Upload installer
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: zen.installer.exe
path: ./dist/zen.installer.exe
- name: Upload installer stub
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: zen.installer.pretty.exe
path: ./dist/zen.installer.pretty.exe
- name: Upload update manifests
uses: actions/upload-artifact@v4
if: ${{ !inputs.generate-gpo }}
with:
name: windows_update_manifest
path: ./dist/update

View File

@@ -0,0 +1,91 @@
on:
workflow_call:
inputs:
build-version:
description: 'The version to build'
required: true
type: string
profile-data-path-archive:
description: 'The path to the zip archive containing the profile data'
required: false
type: string
jobs:
windows-profile-build:
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:
- name: Checkout
uses: actions/checkout@v4
- name: Install Node.js and pnpm
uses: actions/setup-node@v3
with:
node-version: 20
- name: Setup git
run: |
git config --global user.email "mauro-balades@users.noreply.github.com"
git config --global user.name "mauro-balades"
- name: Install pnpm
run: npm install -g pnpm
- name: Install Surfer
run: |
npm i -g @zen-browser/surfer
- uses: actions/download-artifact@v4
name: Download artifact
with:
path: C:\artifact
name: 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
- name: Setup
run: |
(New-Object System.Net.WebClient).DownloadFile("https://ftp.mozilla.org/pub/mozilla/libraries/win32/MozillaBuildSetup-Latest.exe","C:\MozillaBuildSetup-Latest.exe")
C:\MozillaBuildSetup-Latest.exe /S | out-null
- name: Download firefox
run: |
git config --global core.safecrlf false
pnpm surfer download
- name: Generate
run: |
ls
$Env:USE_MINTTY = "0"
$workspace_dir_current = [regex]::replace($env:GITHUB_WORKSPACE, "^([A-Z]):", { "/" + $args.value.Substring(0, 1).toLower() }) -replace "\\","/"
$workspace_dir = $workspace_dir_current + "/engine"
echo $workspace_dir
echo "cd $workspace_dir" '' >> 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
C:\mozilla-build\start-shell.bat $workspace_dir_current\mozilla-build-run.sh
- name: 🐛 Debug Session
if: ${{ failure() }}
uses: Warpbuilds/gha-debug@v1.3
timeout-minutes: 15
- name: Publish merged.profdata
uses: actions/upload-artifact@v4
with:
path: merged.profdata
- name: Publish en-US.log
uses: actions/upload-artifact@v4
with:
path: en-US.log

2
.gitignore vendored
View File

@@ -3,7 +3,7 @@
engine/ engine/
firefox-*/ firefox-*/
node_modules/ node_modules/
.gluon/ .surfer/
__pycache__/ __pycache__/
dist/ dist/

373
LICENSE Normal file
View File

@@ -0,0 +1,373 @@
Mozilla Public License Version 2.0
==================================
1. Definitions
--------------
1.1. "Contributor"
means each individual or legal entity that creates, contributes to
the creation of, or owns Covered Software.
1.2. "Contributor Version"
means the combination of the Contributions of others (if any) used
by a Contributor and that particular Contributor's Contribution.
1.3. "Contribution"
means Covered Software of a particular Contributor.
1.4. "Covered Software"
means Source Code Form to which the initial Contributor has attached
the notice in Exhibit A, the Executable Form of such Source Code
Form, and Modifications of such Source Code Form, in each case
including portions thereof.
1.5. "Incompatible With Secondary Licenses"
means
(a) that the initial Contributor has attached the notice described
in Exhibit B to the Covered Software; or
(b) that the Covered Software was made available under the terms of
version 1.1 or earlier of the License, but not also under the
terms of a Secondary License.
1.6. "Executable Form"
means any form of the work other than Source Code Form.
1.7. "Larger Work"
means a work that combines Covered Software with other material, in
a separate file or files, that is not Covered Software.
1.8. "License"
means this document.
1.9. "Licensable"
means having the right to grant, to the maximum extent possible,
whether at the time of the initial grant or subsequently, any and
all of the rights conveyed by this License.
1.10. "Modifications"
means any of the following:
(a) any file in Source Code Form that results from an addition to,
deletion from, or modification of the contents of Covered
Software; or
(b) any new file in Source Code Form that contains any Covered
Software.
1.11. "Patent Claims" of a Contributor
means any patent claim(s), including without limitation, method,
process, and apparatus claims, in any patent Licensable by such
Contributor that would be infringed, but for the grant of the
License, by the making, using, selling, offering for sale, having
made, import, or transfer of either its Contributions or its
Contributor Version.
1.12. "Secondary License"
means either the GNU General Public License, Version 2.0, the GNU
Lesser General Public License, Version 2.1, the GNU Affero General
Public License, Version 3.0, or any later versions of those
licenses.
1.13. "Source Code Form"
means the form of the work preferred for making modifications.
1.14. "You" (or "Your")
means an individual or a legal entity exercising rights under this
License. For legal entities, "You" includes any entity that
controls, is controlled by, or is under common control with You. For
purposes of this definition, "control" means (a) the power, direct
or indirect, to cause the direction or management of such entity,
whether by contract or otherwise, or (b) ownership of more than
fifty percent (50%) of the outstanding shares or beneficial
ownership of such entity.
2. License Grants and Conditions
--------------------------------
2.1. Grants
Each Contributor hereby grants You a world-wide, royalty-free,
non-exclusive license:
(a) under intellectual property rights (other than patent or trademark)
Licensable by such Contributor to use, reproduce, make available,
modify, display, perform, distribute, and otherwise exploit its
Contributions, either on an unmodified basis, with Modifications, or
as part of a Larger Work; and
(b) under Patent Claims of such Contributor to make, use, sell, offer
for sale, have made, import, and otherwise transfer either its
Contributions or its Contributor Version.
2.2. Effective Date
The licenses granted in Section 2.1 with respect to any Contribution
become effective for each Contribution on the date the Contributor first
distributes such Contribution.
2.3. Limitations on Grant Scope
The licenses granted in this Section 2 are the only rights granted under
this License. No additional rights or licenses will be implied from the
distribution or licensing of Covered Software under this License.
Notwithstanding Section 2.1(b) above, no patent license is granted by a
Contributor:
(a) for any code that a Contributor has removed from Covered Software;
or
(b) for infringements caused by: (i) Your and any other third party's
modifications of Covered Software, or (ii) the combination of its
Contributions with other software (except as part of its Contributor
Version); or
(c) under Patent Claims infringed by Covered Software in the absence of
its Contributions.
This License does not grant any rights in the trademarks, service marks,
or logos of any Contributor (except as may be necessary to comply with
the notice requirements in Section 3.4).
2.4. Subsequent Licenses
No Contributor makes additional grants as a result of Your choice to
distribute the Covered Software under a subsequent version of this
License (see Section 10.2) or under the terms of a Secondary License (if
permitted under the terms of Section 3.3).
2.5. Representation
Each Contributor represents that the Contributor believes its
Contributions are its original creation(s) or it has sufficient rights
to grant the rights to its Contributions conveyed by this License.
2.6. Fair Use
This License is not intended to limit any rights You have under
applicable copyright doctrines of fair use, fair dealing, or other
equivalents.
2.7. Conditions
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
in Section 2.1.
3. Responsibilities
-------------------
3.1. Distribution of Source Form
All distribution of Covered Software in Source Code Form, including any
Modifications that You create or to which You contribute, must be under
the terms of this License. You must inform recipients that the Source
Code Form of the Covered Software is governed by the terms of this
License, and how they can obtain a copy of this License. You may not
attempt to alter or restrict the recipients' rights in the Source Code
Form.
3.2. Distribution of Executable Form
If You distribute Covered Software in Executable Form then:
(a) such Covered Software must also be made available in Source Code
Form, as described in Section 3.1, and You must inform recipients of
the Executable Form how they can obtain a copy of such Source Code
Form by reasonable means in a timely manner, at a charge no more
than the cost of distribution to the recipient; and
(b) You may distribute such Executable Form under the terms of this
License, or sublicense it under different terms, provided that the
license for the Executable Form does not attempt to limit or alter
the recipients' rights in the Source Code Form under this License.
3.3. Distribution of a Larger Work
You may create and distribute a Larger Work under terms of Your choice,
provided that You also comply with the requirements of this License for
the Covered Software. If the Larger Work is a combination of Covered
Software with a work governed by one or more Secondary Licenses, and the
Covered Software is not Incompatible With Secondary Licenses, this
License permits You to additionally distribute such Covered Software
under the terms of such Secondary License(s), so that the recipient of
the Larger Work may, at their option, further distribute the Covered
Software under the terms of either this License or such Secondary
License(s).
3.4. Notices
You may not remove or alter the substance of any license notices
(including copyright notices, patent notices, disclaimers of warranty,
or limitations of liability) contained within the Source Code Form of
the Covered Software, except that You may alter any license notices to
the extent required to remedy known factual inaccuracies.
3.5. Application of Additional Terms
You may choose to offer, and to charge a fee for, warranty, support,
indemnity or liability obligations to one or more recipients of Covered
Software. However, You may do so only on Your own behalf, and not on
behalf of any Contributor. You must make it absolutely clear that any
such warranty, support, indemnity, or liability obligation is offered by
You alone, and You hereby agree to indemnify every Contributor for any
liability incurred by such Contributor as a result of warranty, support,
indemnity or liability terms You offer. You may include additional
disclaimers of warranty and limitations of liability specific to any
jurisdiction.
4. Inability to Comply Due to Statute or Regulation
---------------------------------------------------
If it is impossible for You to comply with any of the terms of this
License with respect to some or all of the Covered Software due to
statute, judicial order, or regulation then You must: (a) comply with
the terms of this License to the maximum extent possible; and (b)
describe the limitations and the code they affect. Such description must
be placed in a text file included with all distributions of the Covered
Software under this License. Except to the extent prohibited by statute
or regulation, such description must be sufficiently detailed for a
recipient of ordinary skill to be able to understand it.
5. Termination
--------------
5.1. The rights granted under this License will terminate automatically
if You fail to comply with any of its terms. However, if You become
compliant, then the rights granted under this License from a particular
Contributor are reinstated (a) provisionally, unless and until such
Contributor explicitly and finally terminates Your grants, and (b) on an
ongoing basis, if such Contributor fails to notify You of the
non-compliance by some reasonable means prior to 60 days after You have
come back into compliance. Moreover, Your grants from a particular
Contributor are reinstated on an ongoing basis if such Contributor
notifies You of the non-compliance by some reasonable means, this is the
first time You have received notice of non-compliance with this License
from such Contributor, and You become compliant prior to 30 days after
Your receipt of the notice.
5.2. If You initiate litigation against any entity by asserting a patent
infringement claim (excluding declaratory judgment actions,
counter-claims, and cross-claims) alleging that a Contributor Version
directly or indirectly infringes any patent, then the rights granted to
You by any and all Contributors for the Covered Software under Section
2.1 of this License shall terminate.
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
end user license agreements (excluding distributors and resellers) which
have been validly granted by You or Your distributors under this License
prior to termination shall survive termination.
************************************************************************
* *
* 6. Disclaimer of Warranty *
* ------------------------- *
* *
* Covered Software is provided under this License on an "as is" *
* basis, without warranty of any kind, either expressed, implied, or *
* statutory, including, without limitation, warranties that the *
* Covered Software is free of defects, merchantable, fit for a *
* particular purpose or non-infringing. The entire risk as to the *
* quality and performance of the Covered Software is with You. *
* Should any Covered Software prove defective in any respect, You *
* (not any Contributor) assume the cost of any necessary servicing, *
* repair, or correction. This disclaimer of warranty constitutes an *
* essential part of this License. No use of any Covered Software is *
* authorized under this License except under this disclaimer. *
* *
************************************************************************
************************************************************************
* *
* 7. Limitation of Liability *
* -------------------------- *
* *
* Under no circumstances and under no legal theory, whether tort *
* (including negligence), contract, or otherwise, shall any *
* Contributor, or anyone who distributes Covered Software as *
* permitted above, be liable to You for any direct, indirect, *
* special, incidental, or consequential damages of any character *
* including, without limitation, damages for lost profits, loss of *
* goodwill, work stoppage, computer failure or malfunction, or any *
* and all other commercial damages or losses, even if such party *
* shall have been informed of the possibility of such damages. This *
* limitation of liability shall not apply to liability for death or *
* personal injury resulting from such party's negligence to the *
* extent applicable law prohibits such limitation. Some *
* jurisdictions do not allow the exclusion or limitation of *
* incidental or consequential damages, so this exclusion and *
* limitation may not apply to You. *
* *
************************************************************************
8. Litigation
-------------
Any litigation relating to this License may be brought only in the
courts of a jurisdiction where the defendant maintains its principal
place of business and such litigation shall be governed by laws of that
jurisdiction, without reference to its conflict-of-law provisions.
Nothing in this Section shall prevent a party's ability to bring
cross-claims or counter-claims.
9. Miscellaneous
----------------
This License represents the complete agreement concerning the subject
matter hereof. If any provision of this License is held to be
unenforceable, such provision shall be reformed only to the extent
necessary to make it enforceable. Any law or regulation which provides
that the language of a contract shall be construed against the drafter
shall not be used to construe this License against a Contributor.
10. Versions of the License
---------------------------
10.1. New Versions
Mozilla Foundation is the license steward. Except as provided in Section
10.3, no one other than the license steward has the right to modify or
publish new versions of this License. Each version will be given a
distinguishing version number.
10.2. Effect of New Versions
You may distribute the Covered Software under the terms of the version
of the License under which You originally received the Covered Software,
or under the terms of any subsequent version published by the license
steward.
10.3. Modified Versions
If you create software not governed by this License, and you want to
create a new license for such software, you may create and use a
modified version of this License if you rename the license and remove
any references to the name of the license steward (except to note that
such modified license differs from this License).
10.4. Distributing Source Code Form that is Incompatible With Secondary
Licenses
If You choose to distribute Source Code Form that is Incompatible With
Secondary Licenses under the terms of this version of the License, the
notice described in Exhibit B of this License must be attached.
Exhibit A - Source Code Form License Notice
-------------------------------------------
This Source Code Form is subject to the terms of the Mozilla Public
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/.
If it is not possible or desirable to put the notice in a particular
file, then You may include the notice in a location (such as a LICENSE
file in a relevant directory) where a recipient would be likely to look
for such a notice.
You may add additional accurate notices of copyright ownership.
Exhibit B - "Incompatible With Secondary Licenses" Notice
---------------------------------------------------------
This Source Code Form is "Incompatible With Secondary Licenses", as
defined by the Mozilla Public License, v. 2.0.

View File

@@ -5,7 +5,9 @@ Experience tranquillity while browsing the web without people tracking you!
# Compatibility # Compatibility
Zen is currently built using firefox version `127.0.2`! Zen is currently built using firefox version `128.0.3`!
* Checkout the latest [releases notes](https://get-zen.vercel.app/release-notes)!
## 🚀 Run Locally ## 🚀 Run Locally
@@ -25,7 +27,7 @@ npm i
Download and bootstrap the browser Download and bootstrap the browser
``` ```
npm run bootstrap npm run init
``` ```
Start building the browser Start building the browser
@@ -51,5 +53,5 @@ Please adhere to this project's `code of conduct`.
## License ## License
[MPL LICENSE](https://choosealicense.com/licenses/mit/) [MPL LICENSE](/LICENSE)

View File

@@ -1,4 +1,4 @@
<svg width="320" height="130" xmlns="http://www.w3.org/2000/svg"> <svg width="320" height="130" xmlns="http://www.w3.org/2000/svg">
  <rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" /> <rect width="300" height="100" x="10" y="10" style="fill:rgb(0,0,255);stroke-width:3;stroke:red" />
Sorry, your browser does not support inline SVG. Sorry, your browser does not support inline SVG.
</svg> </svg>

Before

Width:  |  Height:  |  Size: 228 B

After

Width:  |  Height:  |  Size: 226 B

View File

@@ -1,11 +1,10 @@
# Browser branding # Browser branding
ac_add_options --enable-update-channel=release ac_add_options --enable-update-channel=release
ac_add_options --with-ccache=sccache
ac_add_options --without-wasm-sandboxed-libraries
# ac_add_options --with-branding=beta
ac_add_options --with-app-name=${binName} ac_add_options --with-app-name=${binName}
ac_add_options --with-app-basename=Zen
export MOZ_USER_DIR="${name}" export MOZ_USER_DIR="${name}"
export MOZ_APP_VENDOR="${vendor}" export MOZ_APP_VENDOR="${vendor}"
export MOZ_APP_BASENAME=Zen export MOZ_APP_BASENAME=Zen
@@ -13,7 +12,6 @@ export MOZ_APP_PROFILE=${binName}
export MOZ_APP_DISPLAYNAME="${name}" export MOZ_APP_DISPLAYNAME="${name}"
export MOZ_BRANDING_DIRECTORY=${brandingDir} export MOZ_BRANDING_DIRECTORY=${brandingDir}
export MOZ_OFFICIAL_BRANDING_DIRECTORY=${brandingDir} export MOZ_OFFICIAL_BRANDING_DIRECTORY=${brandingDir}
export MOZ_MACBUNDLE_ID=${appId}
export MOZ_DISTRIBUTION_ID=${appId} export MOZ_DISTRIBUTION_ID=${appId}
# Uncomment if builds are too resource hungry # Uncomment if builds are too resource hungry
@@ -22,11 +20,93 @@ export MOZ_DISTRIBUTION_ID=${appId}
# Misc # Misc
export MOZ_STUB_INSTALLER=1 export MOZ_STUB_INSTALLER=1
export MOZ_INCLUDE_SOURCE_INFO=1
export MOZ_SOURCE_REPO=https://github.com/zen-browser/desktop export MOZ_SOURCE_REPO=https://github.com/zen-browser/desktop
export MOZ_SOURCE_CHANGESET=${changeset} export MOZ_SOURCE_CHANGESET=${changeset}
export MOZ_INCLUDE_SOURCE_INFO=1
ac_add_options --enable-bootstrap ac_add_options --enable-bootstrap
# ALWAYS MANTAIN ONE LINE BREAK AT THE END OF THIS FILE ac_add_options --enable-application=browser
if test "$ZEN_RELEASE"; then
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-accessibility
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
ac_add_options --disable-crashreporter
ac_add_options --disable-geckodriver
ac_add_options --disable-rust-tests
ac_add_options --disable-default-browser-agent
export MOZ_LTO=1
ac_add_options MOZ_LTO=1
ac_add_options --enable-lto
ac_add_options --enable-jemalloc
ac_add_options --disable-jprof
mk_add_options MOZILLA_OFFICIAL=1
MOZILLA_OFFICIAL=1
export MOZILLA_OFFICIAL=1
mk_add_options MOZ_OPTIMIZE=1
MOZ_OPTIMIZE=1
export MOZ_OPTIMIZE=1
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
fi
ac_add_options --enable-unverified-updates
ac_add_options --enable-updater
ac_add_options --enable-raw
ac_add_options --enable-webrtc
ac_add_options --enable-jxl
ac_add_options --enable-av1
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

View File

@@ -1,12 +1,43 @@
# Optimise builds ac_add_options --enable-wasm-avx
ac_add_options --enable-application=browser
ac_add_options --enable-hardening # not when cross compiling
ac_add_options --enable-rust-simd if ! test "$ZEN_CROSS_COMPILING"; then
ac_add_options --enable-release
ac_add_options --enable-optimize if test -d "$HOME/.mozbuild/clang/bin"; then
ac_add_options --with-ccache=sccache export CC="$HOME"/.mozbuild/clang/bin/clang
ac_add_options --disable-debug export CXX="$HOME"/.mozbuild/clang/bin/clang++
ac_add_options --enable-updater else
export CC=clang
export CXX=clang++
fi
ac_add_options --enable-linker=lld
ac_add_options --disable-elf-hack
fi
if test "$ZEN_RELEASE"; then
ac_add_options --enable-strip
export STRIP_FLAGS="--strip-debug --strip-unneeded"
mk_add_options 'export RUSTC_WRAPPER=/home/runner/.mozbuild/sccache/sccache'
mk_add_options 'export CCACHE_CPP2=yes'
ac_add_options --with-ccache=/home/runner/.mozbuild/sccache/sccache
mk_add_options 'export SCCACHE_GHA_ENABLED=on'
# PGO may cause link errors on windows!
if ! test "$ZEN_CROSS_COMPILING"; then
# WE ARE JUST SUPPORTING PGO FOR LINUX!
export MOZ_PGO=1
ac_add_options MOZ_PGO=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,-O3 -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -maes"
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 # Disable telemetry and tracking
mk_add_options MOZ_TELEMETRY_REPORTING= mk_add_options MOZ_TELEMETRY_REPORTING=

View File

@@ -1,14 +1,12 @@
# Optimise builds 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"
ac_add_options --enable-application=browser
ac_add_options --enable-hardening
ac_add_options --enable-rust-simd
ac_add_options --enable-release
ac_add_options --enable-optimize
ac_add_options --with-ccache=sccache
ac_add_options --disable-debug
ac_add_options --enable-updater
mk_add_options MOZ_MAKE_FLAGS="-j4"
# Disable telemetry and tracking unset MOZ_STDCXX_COMPAT
mk_add_options MOZ_TELEMETRY_REPORTING= if test "$ZEN_RELEASE"; then
mk_add_options MOZ_DATA_REPORTING= export RUSTFLAGS="$RUSTFLAGS -Ctarget-cpu=apple-m1"
fi
ac_add_options --enable-install-strip
ac_add_options --target=aarch64-apple-darwin
export MOZ_MACBUNDLE_ID=${appId}
export MOZ_MACBUNDLE_NAME="Zen Browser.app"

View File

@@ -1,7 +1,4 @@
ac_add_options --target=x86_64-pc-mingw32
ac_add_options --enable-js-shell
ac_add_options --enable-rust-simd
ac_add_options --enable-crashreporter
# Disable telemetry and tracking # Disable telemetry and tracking
mk_add_options MOZ_TELEMETRY_REPORTING= mk_add_options MOZ_TELEMETRY_REPORTING=

13
docs/changes.md Normal file
View File

@@ -0,0 +1,13 @@
## Changed things that should be tested each release
* Workspaces
* Sidebar
* Split views
* Vertical tabs (expanded and not expanded)
* Tab groups
* Welcome Page
* Overall performance
* Overall stability
* Pinning tabs (Grid layout)
* Overall UX

5
docs/runners.md Normal file
View File

@@ -0,0 +1,5 @@
# Warp Build
For linux, we are using [warpbuild](https://warpbuild.com/) because github workflows can't handle building firefox :(

View File

@@ -1,6 +1,6 @@
# Zen Side Panels # Zen Side Panels
The `zen.sizepanels.data` configuration will be a JSON string that follows the following data: The `zen.sidepanels.data` configuration will be a JSON string that follows the following data:
```json ```json
{ {

19
docs/workspaces.md Normal file
View File

@@ -0,0 +1,19 @@
# Workspaces Layout
```
{
"workspaces": [
{
"uuid": "uuid1",
"name": "workspace1",
"icon": "icon1",
"default": true
},
...
]
}
```
To save the tabs and identity them, they will contain a `zen-workspace-uuid` attribute with the workspace uuid.
We will make use of firefox's builtin session restore feature to save the tabs and windows after the user closes the browser.

2147
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,15 +3,17 @@
"version": "1.0.0", "version": "1.0.0",
"description": "", "description": "",
"scripts": { "scripts": {
"build": "gluon build", "build": "surfer build",
"build:ui": "surfer build --ui",
"start": "cd engine && ./mach run --noprofile", "start": "cd engine && ./mach run --noprofile",
"import": "gluon import", "import": "surfer import",
"export": "gluon export", "export": "surfer export",
"bootstrap": "gluon download && gluon bootstrap", "init": "npm run bootstrap && npm run import",
"package": "gluon package", "bootstrap": "surfer download && surfer bootstrap",
"package": "surfer package",
"update-ff": "python3 scripts/update_ff.py", "update-ff": "python3 scripts/update_ff.py",
"update-ff:raw": "gluon update", "update-ff:raw": "surfer update",
"update-newtab": "python3 update_newtab.py" "update-newtab": "python3 scripts/update_newtab.py"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@@ -25,6 +27,6 @@
}, },
"homepage": "https://github.com/zen-browser/core#readme", "homepage": "https://github.com/zen-browser/core#readme",
"dependencies": { "dependencies": {
"gluon-build": "next" "@zen-browser/surfer": "^1.1.5"
} }
} }

632
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,13 +10,13 @@ def update_ff():
def get_version_before(): def get_version_before():
global last_version global last_version
with open("gluon.json", "r") as f: with open("surfer.json", "r") as f:
data = json.load(f) data = json.load(f)
last_version = data["version"]["version"] last_version = data["version"]["version"]
def get_version_after(): def get_version_after():
global new_version global new_version
with open("gluon.json", "r") as f: with open("surfer.json", "r") as f:
data = json.load(f) data = json.load(f)
new_version = data["version"]["version"] new_version = data["version"]["version"]

View File

@@ -0,0 +1,275 @@
// 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
* changes will be overwritten by the user.js when the application restarts.
*
* To make lasting changes to preferences, you will have to edit the user.js.
*/
/****************************************************************************
* Betterfox *
* "Ad meliora" *
* version: 121 *
* url: https://github.com/yokoffing/Betterfox *
****************************************************************************/
/****************************************************************************
* SECTION: FASTFOX *
****************************************************************************/
/** GENERAL ***/
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);
/** DISK CACHE ***/
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);
/** IMAGE CACHE ***/
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);
/** SPECULATIVE LOADING ***/
pref('network.dns.disablePrefetch', true);
pref('network.prefetch-next', false);
pref('network.predictor.enabled', 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);
/****************************************************************************
* 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);
/** OCSP & CERTS / HPKP ***/
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);
/** DISK AVOIDANCE ***/
pref('browser.privatebrowsing.forceMediaMemoryCache', true);
pref('browser.sessionstore.interval', 60000);
/** SHUTDOWN & SANITIZING ***/
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);
/** CONTAINERS ***/
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);
/** SAFE BROWSING ***/
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', '');
/** 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);
/** EXPERIMENTS ***/
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);
/** DETECTION ***/
pref('captivedetect.canonicalURL', '');
pref('network.captive-portal-service.enabled', false);
pref('network.connectivity-service.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);
/** 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
/** COOKIE BANNER HANDLING ***/
pref('cookiebanners.service.mode', 1);
pref('cookiebanners.service.mode.privateBrowsing', 1);
/** URL BAR ***/
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);
/*** POCKET ***/
pref('extensions.pocket.enabled', false);
/** DOWNLOADS ***/
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);
/** 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);
/****************************************************************************
* START: MY OVERRIDES *
****************************************************************************/
// visit https://github.com/yokoffing/Betterfox/wiki/Common-Overrides
// visit https://github.com/yokoffing/Betterfox/wiki/Optional-Hardening
// Enter your personal overrides below this line:
/****************************************************************************
* SECTION: SMOOTHFOX *
****************************************************************************/
// visit https://github.com/yokoffing/Betterfox/blob/main/Smoothfox.js
// Enter your scrolling overrides below this line:
/****************************************************************************
* END: BETTERFOX *
****************************************************************************/

View File

@@ -0,0 +1,640 @@
/****************************************************************************************
* Fastfox *
* "Non ducor duco" *
* priority: speedy browsing *
* version: 128 *
* url: https://github.com/yokoffing/Betterfox *
***************************************************************************************/
/****************************************************************************
* 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

@@ -1,10 +1,10 @@
diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
index 27c2d13fbd8599a131de6b70bba581d435198793..25aa7546d57e206b76838bc23b609f602af43a83 100644 index b8aa71126c2bb4521caf25f9caf845a8a429dc64..59cdc2e9998e802d6c79ff967eaa30088a3b7a21 100644
--- a/browser/app/profile/firefox.js --- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js
@@ -3061,3 +3061,5 @@ pref("startup.homepage_override_nimbus_maxVersion", ""); @@ -3110,3 +3110,5 @@ pref("toolkit.contentRelevancy.enabled", false);
pref("toolkit.contentRelevancy.enabled", false);
// Pref to enable the ingestion through the Rust component.
pref("toolkit.contentRelevancy.ingestEnabled", false); pref("toolkit.contentRelevancy.ingestEnabled", false);
// Pref to enable extra logging for the content relevancy feature
pref("toolkit.contentRelevancy.log", false);
+ +
+#include zen-browser.js +#include zen-browser.js

View File

@@ -3,44 +3,26 @@
// file, You can obtain one at http://mozilla.org/MPL/2.0/. // file, You can obtain one at http://mozilla.org/MPL/2.0/.
pref("browser.tabs.cardPreview.enabled", true); pref("browser.tabs.cardPreview.enabled", true);
pref("browser.tabs.hoverPreview.enabled", true);
pref("browser.tabs.cardPreview.delayMs", 100); pref("browser.tabs.cardPreview.delayMs", 100);
pref("browser.urlbar.suggest.calculator", true);
#ifdef MOZ_UPDATE_CHANNEL #ifdef MOZ_UPDATE_CHANNEL
pref("devtools.debugger.prompt-connection", false); pref("devtools.debugger.prompt-connection", false);
#endif #endif
// Mozilla Services
pref('browser.privatebrowsing.vpnpromourl', '');
pref("browser.vpn_promo.enabled", false);
pref("browser.contentblocking.report.show_mobile_app", false);
pref("browser.protections_panel.infoMessage.seen", true);
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', true);
pref("browser.aboutwelcome.showModal", false);
pref('browser.translations.select.enable', true);
// Theme // Theme
pref('toolkit.legacyUserProfileCustomizations.stylesheets', true); pref('toolkit.legacyUserProfileCustomizations.stylesheets', true);
pref('browser.compactmode.show', true); pref('browser.compactmode.show', true);
pref('browser.display.focus_ring_on_anything', true); pref('browser.display.focus_ring_on_anything', true);
pref('browser.display.focus_ring_style', 0); pref('browser.display.focus_ring_style', 0);
pref('browser.display.focus_ring_width', 0); pref('browser.display.focus_ring_width', 0);
pref('browser.privateWindowSeparation.enabled', false); // WINDOWS
// Cookie banner handling (reject by default) pref('browser.newtabpage.activity-stream.newtabWallpapers.enabled', true);
pref('browser.newtabpage.activity-stream.newtabWallpapers.v2.enabled', true);
pref('browser.translations.newSettingsUI.enable', true);
pref('cookiebanners.service.mode', 1); pref("browser.urlbar.trimHttps", true);
pref('cookiebanners.service.mode.privateBrowsing', 1); pref("browser.urlbar.untrimOnUserInteraction.featureGate", true);
// Url bar // Url bar
pref('browser.urlbar.unitConversion.enabled', true); pref('browser.urlbar.unitConversion.enabled', true);
@@ -52,52 +34,25 @@ pref('browser.urlbar.clipboard.featureGate', true);
// new tab page // new tab page
pref('browser.newtabpage.activity-stream.feeds.topsites', false); pref('browser.newtabpage.activity-stream.feeds.topsites', false);
pref('browser.newtabpage.activity-stream.feeds.section.topstories', false); pref('browser.newtabpage.activity-stream.feeds.section.topstories', false);
pref("browser.topsites.contile.enabled", false); pref("browser.topsites.contile.enabled", true);
// Pocket
pref('extensions.pocket.enabled', false);
// Pdf // Pdf
pref('browser.download.open_pdf_attachments_inline', true); pref('browser.download.open_pdf_attachments_inline', true);
pref('pdfjs.enableHighlightEditor', true); pref('pdfjs.enableHighlightEditor', true);
pref('pdfjs.enableHighlightFloatingButton', true); pref('pdfjs.enableHighlightFloatingButton', true);
// Tabs
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('privacy.userContext.enabled', true);
pref('privacy.userContext.ui.enabled', true);
// UA
pref('general.useragent.compatMode.firefox', true);
// Tracking protection
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('privacy.globalprivacycontrol.enabled', true);
pref('gfx.canvas.accelerated.cache-items', 4096);
pref('gfx.canvas.accelerated.cache-size', 512);
pref('gfx.content.skia-font-cache-size', 20);
pref('gfx.webrender.all', true);
pref('layout.css.backdrop-filter.enabled', true);
pref("alerts.showFavicons", true); pref("alerts.showFavicons", true);
pref('browser.toolbars.bookmarks.visibility', 'never'); pref('browser.toolbars.bookmarks.visibility', 'never');
// Enable Do Not Track and GPC by default.
pref("privacy.donottrackheader.enabled", true);
pref("privacy.globalprivacycontrol.enabled", true);
// Disable more telemetry
pref("toolkit.telemetry.enabled", false);
pref("browser.ping-centre.telemetry", false);
pref("browser.attribution.enabled", false);
pref("toolkit.telemetry.pioneer-new-studies-available", false);
// CUSTOM ZEN PREFS // CUSTOM ZEN PREFS
pref('zen.welcomeScreen.enabled', true); pref('zen.welcomeScreen.enabled', true);
@@ -105,34 +60,10 @@ pref('zen.welcomeScreen.seen', false);
pref('zen.tabs.vertical', true); pref('zen.tabs.vertical', true);
pref('zen.theme.accent-color', "#aac7ff"); pref('zen.theme.accent-color', "#aac7ff");
pref('zen.theme.toolbar-themed', true); pref('zen.theme.toolbar-themed', true);
pref('zen.theme.pill-button', false);
pref('zen.view.compact', false); pref('zen.view.compact', false);
pref('zen.view.sidebar-expanded', false);
pref('browser.cache.jsbc_compression_level', 3); pref('zen.view.sidebar-expanded.show-button', true);
pref('media.memory_cache_max_size', 65536);
pref('media.cache_readahead_limit', 7200);
pref('media.cache_resume_threshold', 3600);
pref('image.mem.decode_bytes_at_a_time', 32768);
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.dns.disablePrefetch', true);
pref('network.prefetch-next', false);
pref('network.predictor.enabled', false);
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 to enable the new profiles (TODO: Check this out!) // Pref to enable the new profiles (TODO: Check this out!)
//pref("browser.profiles.enabled", true); //pref("browser.profiles.enabled", true);
@@ -146,4 +77,21 @@ pref('zen.sidebar.floating', true);
pref('zen.splitView.working', false); pref('zen.splitView.working', false);
// Zen Workspaces // Zen Workspaces
pref('zen.workspaces.enabled', false); pref('zen.workspaces.enabled', true);
// Zen Watermark
pref('zen.watermark.enabled', true);
// Smooth scrolling
user_pref('apz.overscroll.enabled', true); // not DEFAULT on Linux
user_pref('general.smoothScroll', true); // DEFAULT
// Privacy
pref('dom.private-attribution.submission.enabled', false);
// From Librewolf
pref('media.eme.enabled', true);
pref('webgl.disabled', false);
#include fast-fox.js
#include better-fox.js

View File

@@ -0,0 +1,14 @@
diff --git a/browser/app/splash.rc b/browser/app/splash.rc
index 259a8068c3aa256b8c50487a04f1844292b90b2e..8b9c792e1484bb801246b06b6ce43fb6d6271ee8 100644
--- a/browser/app/splash.rc
+++ b/browser/app/splash.rc
@@ -6,6 +6,9 @@
#include <windows.h>
#include "nsNativeAppSupportWin.h"
+#define MANIFEST_PATH "firefox.exe.manifest"
+CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST MANIFEST_PATH
+
IDI_APPICON ICON FIREFOX_ICO
IDI_DOCUMENT ICON DOCUMENT_ICO
IDI_APPLICATION ICON FIREFOX_ICO

View File

@@ -8,6 +8,7 @@ var gZenBrowserManagerSidebar = {
_hasChangedConfig: true, _hasChangedConfig: true,
_splitterElement: null, _splitterElement: null,
_hSplitterElement: null, _hSplitterElement: null,
_hasRegisteredPinnedClickOutside: false,
_isDragging: false, _isDragging: false,
contextTab: null, contextTab: null,
@@ -19,6 +20,7 @@ var gZenBrowserManagerSidebar = {
this.update(); this.update();
this.close(); // avoid caching this.close(); // avoid caching
this.listenForPrefChanges(); this.listenForPrefChanges();
this.insertIntoContextMenu();
}, },
get sidebarData() { get sidebarData() {
@@ -105,6 +107,16 @@ var gZenBrowserManagerSidebar = {
this.update(); this.update();
this._hasChangedConfig = false; this._hasChangedConfig = false;
// 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) {
document.addEventListener("mouseup", clickOutsideHandler);
this._hasRegisteredPinnedClickOutside = true;
} else if (!Services.prefs.getBoolPref("zen.sidebar.floating") && this._hasRegisteredPinnedClickOutside) {
document.removeEventListener("mouseup", clickOutsideHandler);
this._hasRegisteredPinnedClickOutside = false;
}
const button = document.getElementById("zen-sidepanel-button"); const button = document.getElementById("zen-sidepanel-button");
if (Services.prefs.getBoolPref("zen.sidebar.enabled")) { if (Services.prefs.getBoolPref("zen.sidebar.enabled")) {
button.removeAttribute("hidden"); button.removeAttribute("hidden");
@@ -115,6 +127,25 @@ var gZenBrowserManagerSidebar = {
} }
}, },
_handleClickOutside(event) {
let sidebar = document.getElementById("zen-sidebar-web-panel");
if (!sidebar.hasAttribute("pinned") || !this._currentPanel || this._isDragging) {
return;
}
let target = event.target;
const closestSelector = [
"#zen-sidebar-web-panel",
"#zen-sidebar-panels-wrapper",
"#zenWebPanelContextMenu",
"#zen-sidebar-web-panel-splitter",
"#contentAreaContextMenu"
].join(", ");
if (target.closest(closestSelector)) {
return;
}
this.close();
},
toggle() { toggle() {
if (!this._currentPanel) { if (!this._currentPanel) {
this._currentPanel = this._lastOpenedPanel; this._currentPanel = this._lastOpenedPanel;
@@ -231,6 +262,19 @@ var gZenBrowserManagerSidebar = {
this._updateWebPanel(); this._updateWebPanel();
}, },
_createNewPanel(url) {
let data = this.sidebarData;
let newName = "p" + new Date().getTime();
data.index.push(newName);
data.data[newName] = {
url: url,
ua: false,
};
Services.prefs.setStringPref("zen.sidebar.data", JSON.stringify(data));
this._currentPanel = newName;
this.update();
},
_updateButtons() { _updateButtons() {
for (let button of this.sidebarElement.querySelectorAll(".zen-sidebar-panel-button")) { for (let button of this.sidebarElement.querySelectorAll(".zen-sidebar-panel-button")) {
if (button.getAttribute("zen-sidebar-id") === this._currentPanel) { if (button.getAttribute("zen-sidebar-id") === this._currentPanel) {
@@ -438,8 +482,7 @@ var gZenBrowserManagerSidebar = {
let data = this.sidebarData; let data = this.sidebarData;
let panel = data.data[this.contextTab]; let panel = data.data[this.contextTab];
let url = (browser == null) ? panel.url : browser.currentURI.spec; let url = (browser == null) ? panel.url : browser.currentURI.spec;
let tab = gBrowser.addTrustedTab(url); gZenUIManager.openAndChangeToTab(url);
gBrowser.selectedTab = tab;
this.close(); this.close();
}, },
@@ -478,6 +521,21 @@ var gZenBrowserManagerSidebar = {
browser.remove(); browser.remove();
this._closeSidebarPanel(); this._closeSidebarPanel();
}, },
insertIntoContextMenu() {
const sibling = document.getElementById("context-stripOnShareLink");
const menuitem = document.createXULElement("menuitem");
menuitem.setAttribute("id", "context-zenAddToWebPanel");
menuitem.setAttribute("hidden", "true");
menuitem.setAttribute("oncommand", "gZenBrowserManagerSidebar.addPanelFromContextMenu();");
menuitem.setAttribute("data-l10n-id", "zen-web-side-panel-context-add-to-panel");
sibling.insertAdjacentElement("afterend", menuitem);
},
addPanelFromContextMenu() {
const url = gContextMenu.linkURL || gContextMenu.target.ownerDocument.location.href;
this._createNewPanel(url);
},
}; };
gZenBrowserManagerSidebar.init(); gZenBrowserManagerSidebar.init();

View File

@@ -0,0 +1,64 @@
var gZenUIManager = {
openAndChangeToTab(url, options) {
if (window.ownerGlobal.parent) {
let tab = window.ownerGlobal.parent.gBrowser.addTrustedTab(url, options);
window.ownerGlobal.parent.gBrowser.selectedTab = tab;
return tab;
}
let tab = window.gBrowser.addTrustedTab(url, options);
window.gBrowser.selectedTab = tab;
return tab;
},
generateUuidv4() {
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
);
},
toogleBookmarksSidebar() {
const button = document.getElementById('zen-bookmark-button');
SidebarController.toggle('viewBookmarksSidebar', button);
},
};
var gZenVerticalTabsManager = {
init() {
//Services.prefs.addObserver('zen.view.compact', this._updateEvent.bind(this));
//Services.prefs.addObserver('zen.view.sidebar-expanded', this._updateEvent.bind(this));
},
get expanded() {
return Services.prefs.getBoolPref('zen.view.sidebar-expanded');
},
get expandButton() {
if (this._expandButton) {
return this._expandButton;
}
this._expandButton = document.getElementById('zen-expand-sidebar-button');
return this._expandButton;
},
//_updateExpandButton() {
// let isCompactMode = Services.prefs.getBoolPref('zen.view.compact');
// let button = this.expandButton;
// let expanded = this.expanded;
// if (expanded && !isCompactMode) {
// button.setAttribute('open', 'true');
// } else {
// button.removeAttribute('open');
// }
//},
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

@@ -1,8 +1,16 @@
var ZenWorkspaces = { var ZenWorkspaces = {
async init() { async init() {
let docElement = document.documentElement;
if (docElement.getAttribute("chromehidden").includes("toolbar")
|| docElement.getAttribute("chromehidden").includes("menubar")
|| docElement.hasAttribute("privatebrowsingmode")) {
console.warn("ZenWorkspaces: !!! ZenWorkspaces is disabled in hidden windows !!!");
return; // We are in a hidden window, don't initialize ZenWorkspaces
}
console.log("ZenWorkspaces: Initializing ZenWorkspaces...");
await this.initializeWorkspaces(); await this.initializeWorkspaces();
console.log("ZenWorkspaces initialized"); console.log("ZenWorkspaces: ZenWorkspaces initialized");
}, },
get workspaceEnabled() { get workspaceEnabled() {
@@ -18,46 +26,397 @@ var ZenWorkspaces = {
); );
}, },
async _workspaces() {
if (!this._workspaceCache) {
this._workspaceCache = await IOUtils.readJSON(this._storeFile);
if (!this._workspaceCache.workspaces) {
this._workspaceCache.workspaces = [];
}
}
return this._workspaceCache;
},
onWorkspacesEnabledChanged() {
if (this.workspaceEnabled) {
this.initializeWorkspaces();
} else {
this._workspaceCache = null;
document.getElementById("zen-workspaces-button")?.remove();
for (let tab of gBrowser.tabs) {
gBrowser.showTab(tab);
}
}
},
async initializeWorkspaces() { async initializeWorkspaces() {
Services.prefs.addObserver("zen.workspaces.enabled", this.onWorkspacesEnabledChanged.bind(this));
this.initializeWorkspacesButton();
let file = new FileUtils.File(this._storeFile); let file = new FileUtils.File(this._storeFile);
if (!file.exists()) { if (!file.exists()) {
await IOUtils.writeJSON(this._storeFile, {}); await IOUtils.writeJSON(this._storeFile, {});
} }
if (this.workspaceEnabled) {
let workspaces = await this._workspaces();
if (workspaces.workspaces.length === 0) {
await this.createAndSaveWorkspace("Default Workspace", true);
} else {
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.default);
if (!activeWorkspace) {
activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
activeWorkspace.used = true;
await this.saveWorkspaces();
}
if (!activeWorkspace) {
activeWorkspace = workspaces.workspaces[0];
activeWorkspace.used = true;
await this.saveWorkspaces();
}
await this.changeWorkspace(activeWorkspace);
}
this._initializeWorkspaceIcons();
}
}, },
async saveWorkspace(workspaceData, windowID) { _initializeWorkspaceIcons() {
const kIcons = ["🏠", "📄", "💹", "💼", "📧", "✅", "👥"];
let container = document.getElementById("PanelUI-zen-workspaces-create-icons-container");
for (let icon of kIcons) {
let button = document.createXULElement("toolbarbutton");
button.className = "toolbarbutton-1";
button.setAttribute("label", icon);
button.onclick = ((event) => {
for (let button of container.children) {
button.removeAttribute("selected");
}
button.setAttribute("selected", "true");
}).bind(this, button);
container.appendChild(button);
}
},
async saveWorkspace(workspaceData) {
let json = await IOUtils.readJSON(this._storeFile); let json = await IOUtils.readJSON(this._storeFile);
json[windowID] = workspaceData; if (typeof json.workspaces === "undefined") {
json.workspaces = [];
}
json.workspaces.push(workspaceData);
console.log("ZenWorkspaces: Saving workspace", workspaceData);
await IOUtils.writeJSON(this._storeFile, json); await IOUtils.writeJSON(this._storeFile, json);
}, this._workspaceCache = null;
async loadWorkspace(windowID) {
let json = await IOUtils.readJSON(this._storeFile);
return json[windowID];
}, },
async removeWorkspace(windowID) { async removeWorkspace(windowID) {
let json = await IOUtils.readJSON(this._storeFile); let json = await this._workspaces();
delete json[windowID]; console.log("ZenWorkspaces: Removing workspace", windowID);
await IOUtils.writeJSON(this._storeFile, json); await this.changeWorkspace(json.workspaces.find(workspace => workspace.uuid !== windowID));
this._deleteAllTabsInWorkspace(windowID);
json.workspaces = json.workspaces.filter(workspace => workspace.uuid !== windowID);
await this.unsafeSaveWorkspaces(json);
await this._propagateWorkspaceData();
}, },
async getWorkspaces() { async saveWorkspaces() {
let json = await IOUtils.readJSON(this._storeFile); await IOUtils.writeJSON(this._storeFile, await this._workspaces());
return json; this._workspaceCache = null;
}, },
async getWorkspace(windowID) { async unsafeSaveWorkspaces(workspaces) {
let json = await IOUtils.readJSON(this._storeFile); await IOUtils.writeJSON(this._storeFile, workspaces);
return json[windowID]; this._workspaceCache = null;
},
// Workspaces dialog UI management
openSaveDialog() {
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
PanelUI.showSubView("PanelUI-zen-workspaces-create", parentPanel);
},
cancelWorkspaceCreation() {
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
parentPanel.goBack();
},
workspaceHasIcon(workspace) {
return typeof workspace.icon !== "undefined" && workspace.icon !== "";
},
getWorkspaceIcon(workspace) {
if (this.workspaceHasIcon(workspace)) {
return workspace.icon;
}
return workspace.name[0].toUpperCase();
},
async _propagateWorkspaceData() {
let currentContainer = document.getElementById("PanelUI-zen-workspaces-current-info");
let workspaceList = document.getElementById("PanelUI-zen-workspaces-list");
const createWorkspaceElement = (workspace) => {
let element = document.createXULElement("toolbarbutton");
element.className = "subviewbutton";
element.setAttribute("tooltiptext", workspace.name);
element.setAttribute("zen-workspace-id", workspace.uuid);
//element.setAttribute("context", "zenWorkspaceActionsMenu");
let childs = window.MozXULElement.parseXULToFragment(`
<div class="zen-workspace-icon">
${this.getWorkspaceIcon(workspace)}
</div>
<div class="zen-workspace-name">
${workspace.name}
</div>
<toolbarbutton closemenu="none" class="toolbarbutton-1 zen-workspace-actions">
<image class="toolbarbutton-icon" id="zen-workspace-actions-menu-icon"></image>
</toolbarbutton>
`);
childs.querySelector(".zen-workspace-actions").addEventListener("command", ((event) => {
let button = event.target;
this._contextMenuId = button.closest("toolbarbutton[zen-workspace-id]").getAttribute("zen-workspace-id");
const popup = button.ownerDocument.getElementById(
"zenWorkspaceActionsMenu"
);
popup.openPopup(button, "after_end");
}).bind(this));
element.appendChild(childs);
element.onclick = (async () => {
if (event.target.closest(".zen-workspace-actions")) {
return; // Ignore clicks on the actions button
}
await this.changeWorkspace(workspace)
let panel = document.getElementById("PanelUI-zen-workspaces");
PanelMultiView.hidePopup(panel);
}).bind(this, workspace);
return element;
}
let workspaces = await this._workspaces();
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
currentContainer.innerHTML = "";
workspaceList.innerHTML = "";
workspaceList.parentNode.style.display = "flex";
if (workspaces.workspaces.length - 1 <= 0) {
workspaceList.innerHTML = "No workspaces available";
workspaceList.setAttribute("empty", "true");
} else {
workspaceList.removeAttribute("empty");
}
if (activeWorkspace) {
let currentWorkspace = createWorkspaceElement(activeWorkspace);
currentContainer.appendChild(currentWorkspace);
}
for (let workspace of workspaces.workspaces) {
if (workspace.used) {
continue;
}
let workspaceElement = createWorkspaceElement(workspace);
workspaceList.appendChild(workspaceElement);
}
},
async openWorkspacesDialog(event) {
if (!this.workspaceEnabled) {
return;
}
let target = event.target;
let panel = document.getElementById("PanelUI-zen-workspaces");
await this._propagateWorkspaceData();
PanelMultiView.openPopup(panel, target, {
position: "bottomright topright",
triggerEvent: event,
}).catch(console.error);
},
initializeWorkspacesButton() {
if (!this.workspaceEnabled) {
return;
} else if (document.getElementById("zen-workspaces-button")) {
let button = document.getElementById("zen-workspaces-button");
button.removeAttribute("hidden");
return;
}
let browserTabs = document.getElementById("tabbrowser-tabs");
let button = document.createElement("toolbarbutton");
button.id = "zen-workspaces-button";
button.className = "toolbarbutton-1 chromeclass-toolbar-additional";
button.setAttribute("label", "Workspaces");
button.setAttribute("tooltiptext", "Workspaces");
button.onclick = this.openWorkspacesDialog.bind(this);
browserTabs.insertAdjacentElement("beforebegin", button);
},
async _updateWorkspacesButton() {
let button = document.getElementById("zen-workspaces-button");
if (!button) {
return;
}
let activeWorkspace = (await this._workspaces()).workspaces.find(workspace => workspace.used);
if (activeWorkspace) {
button.innerHTML = `
<div class="zen-workspace-sidebar-icon">
${this.getWorkspaceIcon(activeWorkspace)}
</div>
<div class="zen-workspace-sidebar-name">
${activeWorkspace.name}
</div>
`;
if (!this.workspaceHasIcon(activeWorkspace)) {
button.querySelector(".zen-workspace-sidebar-icon").setAttribute("no-icon", "true");
}
}
}, },
// Workspaces management // Workspaces management
async saveCurrentWorkspace(windowID) { get _workspaceInput() {
let workspaceData = this._createWorkspaceData(windowID); return document.getElementById("PanelUI-zen-workspaces-create-input");
await this.saveWorkspace(workspaceData, windowID);
}, },
_deleteAllTabsInWorkspace(workspaceID) {
for (let tab of gBrowser.tabs) {
if (tab.getAttribute("zen-workspace-id") === workspaceID) {
gBrowser.removeTab(tab);
}
}
},
_prepareNewWorkspace(window) {
document.documentElement.setAttribute("zen-workspace-id", window.uuid);
let tabCount = 0;
for (let tab of gBrowser.tabs) {
if (!tab.hasAttribute("zen-workspace-id")) {
tab.setAttribute("zen-workspace-id", window.uuid);
tabCount++;
}
}
if (tabCount === 0) {
this._createNewTabForWorkspace(window);
}
},
_createNewTabForWorkspace(window) {
let tab = gZenUIManager.openAndChangeToTab(Services.prefs.getStringPref("browser.startup.homepage"));
tab.setAttribute("zen-workspace-id", window.uuid);
},
async saveWorkspaceFromInput() {
// Go to the next view
let parentPanel = document.getElementById("PanelUI-zen-workspaces-multiview");
PanelUI.showSubView("PanelUI-zen-workspaces-create-icons", parentPanel);
},
async saveWorkspaceFromIcon() {
let workspaceName = this._workspaceInput.value;
if (!workspaceName) {
return;
}
this._workspaceInput.value = "";
let icon = document.querySelector("#PanelUI-zen-workspaces-create-icons-container [selected]");
icon?.removeAttribute("selected");
await this.createAndSaveWorkspace(workspaceName, false, icon?.label);
document.getElementById("PanelUI-zen-workspaces").hidePopup(true);
},
onWorkspaceNameChange(event) {
let button = document.getElementById("PanelUI-zen-workspaces-create-save");
if (this._workspaceInput.value === "") {
button.setAttribute("disabled", "true");
return;
}
button.removeAttribute("disabled");
},
async changeWorkspace(window) {
if (!this.workspaceEnabled) {
return;
}
let firstTab = undefined;
let workspaces = await this._workspaces();
for (let workspace of workspaces.workspaces) {
workspace.used = workspace.uuid === window.uuid;
}
this.unsafeSaveWorkspaces(workspaces);
console.log("ZenWorkspaces: Changing workspace to", window.uuid);
for (let tab of gBrowser.tabs) {
if (tab.getAttribute("zen-workspace-id") === window.uuid && !tab.pinned) {
if (!firstTab) {
firstTab = tab;
gBrowser.selectedTab = firstTab;
}
gBrowser.showTab(tab);
}
}
if (typeof firstTab === "undefined") {
this._createNewTabForWorkspace(window);
}
for (let tab of gBrowser.tabs) {
if (tab.getAttribute("zen-workspace-id") !== window.uuid) {
gBrowser.hideTab(tab);
}
}
document.documentElement.setAttribute("zen-workspace-id", window.uuid);
await this.saveWorkspaces();
await this._updateWorkspacesButton();
await this._propagateWorkspaceData();
},
_createWorkspaceData(name, isDefault, icon) {
let window = {
uuid: gZenUIManager.generateUuidv4(),
default: isDefault,
used: true,
icon: icon,
name: name,
};
this._prepareNewWorkspace(window);
return window;
},
async createAndSaveWorkspace(name = "New Workspace", isDefault = false, icon = undefined) {
if (!this.workspaceEnabled) {
return;
}
let workspaceData = this._createWorkspaceData(name, isDefault, icon);
await this.saveWorkspace(workspaceData);
await this.changeWorkspace(workspaceData);
},
async onLocationChange(browser) {
let tab = gBrowser.getTabForBrowser(browser);
let workspaceID = tab.getAttribute("zen-workspace-id");
if (!workspaceID) {
let workspaces = await this._workspaces();
let activeWorkspace = workspaces.workspaces.find(workspace => workspace.used);
if (!activeWorkspace) {
return;
}
tab.setAttribute("zen-workspace-id", activeWorkspace.uuid);
}
},
// Context menu management
_contextMenuId: null,
async updateContextMenu(_) {
console.assert(this._contextMenuId, "No context menu ID set");
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) {
deleteMenuItem.setAttribute("disabled", "true");
} else {
deleteMenuItem.removeAttribute("disabled");
}
},
onContextMenuClose() {
let target = document.querySelector(`#PanelUI-zen-workspaces [zen-workspace-id="${this._contextMenuId}"] .zen-workspace-actions`);
if (target) {
target.removeAttribute("active");
}
this._contextMenuId = null;
},
async contextDelete() {
await this.removeWorkspace(this._contextMenuId);
}
}; };
ZenWorkspaces.init(); ZenWorkspaces.init();

View File

@@ -1,11 +0,0 @@
diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml b/browser/base/content/appmenu-viewcache.inc.xhtml
index 07b1765f18236835363fb74c898d3a690659cc9b..7b58cbb5de147ed29fbc48c0093c731fe5cca90b 100644
--- a/browser/base/content/appmenu-viewcache.inc.xhtml
+++ b/browser/base/content/appmenu-viewcache.inc.xhtml
@@ -765,5 +765,6 @@
</vbox>
</panelview>
+#include zen-panels-ui.inc.xhtml
#include ../../components/reportbrokensite/content/reportBrokenSitePanel.inc.xhtml
</html:template>

View File

@@ -1,12 +1,10 @@
diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml diff --git a/browser/base/content/browser-box.inc.xhtml b/browser/base/content/browser-box.inc.xhtml
index b0308911446dd6fc549401371a85faa6341f8338..3942a0b45308b110685c34e8a9367d7c5d40d8c4 100644 index 16559b2c0e3aef391b43e09281aee24007feb0bd..2579cea92a55fabb73fdd130c3706af08c3fd849 100644
--- a/browser/base/content/browser-box.inc.xhtml --- a/browser/base/content/browser-box.inc.xhtml
+++ b/browser/base/content/browser-box.inc.xhtml +++ b/browser/base/content/browser-box.inc.xhtml
@@ -18,12 +18,18 @@ @@ -21,11 +21,15 @@
<browser id="sidebar" autoscroll="false" disablehistory="true" disablefullscreen="true" tooltip="aHTMLTooltip"/>
</vbox> </vbox>
<splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/> <splitter id="sidebar-splitter" class="chromeclass-extrachrome sidebar-splitter" resizebefore="sibling" resizeafter="none" hidden="true"/>
+ <vbox id="browser">
<vbox id="appcontent" flex="1"> <vbox id="appcontent" flex="1">
+ <html:div id="zen-appcontent-navbar-container"></html:div> + <html:div id="zen-appcontent-navbar-container"></html:div>
<!-- gNotificationBox will be added here lazily. --> <!-- gNotificationBox will be added here lazily. -->
@@ -18,6 +16,5 @@ index b0308911446dd6fc549401371a85faa6341f8338..3942a0b45308b110685c34e8a9367d7c
flex="1" selectedIndex="0"/> flex="1" selectedIndex="0"/>
</tabbox> </tabbox>
+ </hbox> + </hbox>
+ </vbox>
</vbox> </vbox>
</hbox> </hbox>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css
index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f22ceab7e2 100644 index cdd08ec8f3d3cd652be9fcf6d4fb5b50dcf270ba..6cb35378aea2e7967dff0c91d09201b053645fbd 100644
--- a/browser/base/content/browser.css --- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css +++ b/browser/base/content/browser.css
@@ -2,6 +2,8 @@ @@ -2,6 +2,8 @@
@@ -10,32 +10,8 @@ index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f2
+ +
@namespace html url("http://www.w3.org/1999/xhtml"); @namespace html url("http://www.w3.org/1999/xhtml");
:root, panelmultiview {
@@ -157,8 +159,6 @@ panelview:not([visible]) { @@ -566,9 +568,9 @@ printpreview-pagination:focus-within,
flex: 100 100;
max-width: 225px;
min-width: var(--tab-min-width);
- transition: min-width 100ms ease-out,
- max-width 100ms ease-out;
}
:root[uidensity=touch] .tabbrowser-tab:not([pinned]) {
@@ -647,12 +647,12 @@ toolbar:not(#TabsToolbar) > #personal-bookmarks {
margin-inline-start: 0;
}
-#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action,
+#urlbar-input-container[pageproxystate=invalid] > #page-action-buttons > .urlbar-page-action:not(#zen-split-views-box),
#identity-box.chromeUI ~ #page-action-buttons > .urlbar-page-action:not(#star-button-box),
#urlbar[usertyping] > #urlbar-input-container > #page-action-buttons > #urlbar-zoom-button,
#urlbar:not([usertyping]) > #urlbar-input-container > #urlbar-go-button,
#urlbar:not([focused]) > #urlbar-input-container > #urlbar-go-button {
- display: none;
+ display: none !important;
}
#nav-bar:not([keyNav=true]) #identity-box,
@@ -1237,13 +1237,13 @@ printpreview-pagination:focus-within,
#sidebar-box { #sidebar-box {
@@ -47,15 +23,11 @@ index 6e776a9ce7c525e510b6466065daf755b21567a4..8668b27ec2126ed772a11aa77809b6f2
} }
/* WebExtension Sidebars */ /* WebExtension Sidebars */
-#sidebar-box[sidebarcommand$="-sidebar-action"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon { @@ -583,3 +585,43 @@ printpreview-pagination:focus-within,
+#sidebar-box[sidebarcommand$="-sidebar-action"] #sidebar-header > #sidebar-switcher-target > #sidebar-icon { toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop {
list-style-image: var(--webextension-menuitem-image, inherit); -moz-user-focus: normal;
-moz-context-properties: fill; }
fill: currentColor; +
@@ -1444,3 +1444,42 @@ toolbar[keyNav=true]:not([collapsed=true], [customizing=true]) toolbartabstop {
/**
* End Dialogs
*/
+ +
+/** +/**
+ * + *

View File

@@ -1,33 +1,14 @@
diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js diff --git a/browser/base/content/browser-init.js b/browser/base/content/browser-init.js
index 0717ce21386b73fc3399c97b34c6892a674cca77..f20e8a43fdd1d885f917948a26f1c3a1bd917707 100644 index a79a9734619f89639c15087fe28e9615354a7209..edaef604d33d76b570571e1bbb2ebc590e045d87 100644
--- a/browser/base/content/browser-init.js --- a/browser/base/content/browser-init.js
+++ b/browser/base/content/browser-init.js +++ b/browser/base/content/browser-init.js
@@ -230,6 +230,12 @@ var gBrowserInit = { @@ -237,6 +237,9 @@ var gBrowserInit = {
gURLBar.readOnly = true; gPrivateBrowsingUI.init();
BrowserSearch.init();
BrowserPageActions.init();
+
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", window);
+
if (gToolbarKeyNavEnabled) {
ToolbarKeyboardNavigator.init();
} }
+ Services.scriptloader.loadSubScript("chrome://browser/content/zenThemeModifier.js", this);
+
+ // ZEN: Propagate the current profile used to the browser UI, such as
+ // showing the avatar and profile info to the side bar
+ zenUpdateBrowserProfiles();
+
// Misc. inits.
gUIDensity.init();
TabletModeUpdater.init();
@@ -1105,3 +1111,15 @@ var gBrowserInit = {
};
gBrowserInit.idleTasksFinishedPromise = gBrowserInit.idleTasksFinished.promise;
+
+function zenUpdateBrowserProfiles() {
+ const mainWindowEl = document.documentElement;
+ // Dont override the sync avatar if it's already set
+ if (mainWindowEl.style.hasOwnProperty("--avatar-image-url")) {
+ return;
+ }
+ let profile = ProfileService.currentProfile;
+ if (!profile || profile.zenAvatarPath == "") return;
+ // TODO: actually use profile data to generate the avatar, instead of just using the name
+ mainWindowEl.style.setProperty("--avatar-image-url", `url(${profile.zenAvatarPath})`);
+}

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 5f41ca778131eedfd32043dc27d6528be978c4fb..086b01e8fdf80dd333d80b9eede190cdb5315b70 100644 index b18f371a47fec53882c3dfb68e34d1a474eaf446..2c183d7e7fc65e00403f5e40e7859b915a3ea700 100644
--- a/browser/base/content/browser.js --- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js +++ b/browser/base/content/browser.js
@@ -630,6 +630,15 @@ XPCOMUtils.defineLazyPreferenceGetter( @@ -630,6 +630,15 @@ XPCOMUtils.defineLazyPreferenceGetter(
@@ -18,16 +18,17 @@ index 5f41ca778131eedfd32043dc27d6528be978c4fb..086b01e8fdf80dd333d80b9eede190cd
customElements.setElementCreationCallback("screenshots-buttons", () => { customElements.setElementCreationCallback("screenshots-buttons", () => {
Services.scriptloader.loadSubScript( Services.scriptloader.loadSubScript(
"chrome://browser/content/screenshots/screenshots-buttons.js", "chrome://browser/content/screenshots/screenshots-buttons.js",
@@ -3668,6 +3677,8 @@ var XULBrowserWindow = { @@ -3679,6 +3688,9 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser); AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser); TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
+ gZenViewSplitter.onLocationChange(gBrowser.selectedBrowser); + gZenViewSplitter.onLocationChange(gBrowser.selectedBrowser);
+ ZenWorkspaces.onLocationChange(gBrowser.selectedBrowser);
+ +
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser); PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) { if (!gMultiProcessBrowser) {
@@ -4982,7 +4993,7 @@ function setToolbarVisibility( @@ -5001,7 +5013,7 @@ function setToolbarVisibility(
); );
} }
@@ -36,7 +37,7 @@ index 5f41ca778131eedfd32043dc27d6528be978c4fb..086b01e8fdf80dd333d80b9eede190cd
switch (isVisible) { switch (isVisible) {
case true: case true:
case "always": case "always":
@@ -7813,6 +7824,12 @@ var gDialogBox = { @@ -7832,6 +7844,12 @@ var gDialogBox = {
parentElement.showModal(); parentElement.showModal();
this._didOpenHTMLDialog = true; this._didOpenHTMLDialog = true;

View File

@@ -1,8 +1,8 @@
diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml diff --git a/browser/base/content/browser.xhtml b/browser/base/content/browser.xhtml
index aec0983a6704f09300da9a3a9ab76e627695b708..4228c96f59d6054c19c95686cafa979594e7da1f 100644 index 3063370347db9e2812ad30205e585c849e44c91e..be74d9e624b8220cb9bd009bae31fb513c4ec73f 100644
--- a/browser/base/content/browser.xhtml --- a/browser/base/content/browser.xhtml
+++ b/browser/base/content/browser.xhtml +++ b/browser/base/content/browser.xhtml
@@ -140,6 +140,8 @@ @@ -139,6 +139,8 @@
window.addEventListener("DOMContentLoaded", window.addEventListener("DOMContentLoaded",
gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true }); gBrowserInit.onDOMContentLoaded.bind(gBrowserInit), { once: true });
</script> </script>
@@ -11,7 +11,7 @@ index aec0983a6704f09300da9a3a9ab76e627695b708..4228c96f59d6054c19c95686cafa9795
</head> </head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
# All sets except for popupsets (commands, keys, and stringbundles) # All sets except for popupsets (commands, keys, and stringbundles)
@@ -161,9 +163,12 @@ @@ -160,9 +162,12 @@
</vbox> </vbox>
</html:template> </html:template>
@@ -27,3 +27,10 @@ index aec0983a6704f09300da9a3a9ab76e627695b708..4228c96f59d6054c19c95686cafa9795
<html:template id="customizationPanel"> <html:template id="customizationPanel">
<box id="customization-container" flex="1" hidden="true"><![CDATA[ <box id="customization-container" flex="1" hidden="true"><![CDATA[
@@ -176,5 +181,6 @@
<!-- Put it at the very end to make sure it's not covered by anything. -->
<html:div id="fullscr-toggler" hidden="hidden"/>
+#include zen-watermark.inc.xhtml
</html:body>
</html>

View File

@@ -1,5 +1,5 @@
diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml diff --git a/browser/base/content/navigator-toolbox.inc.xhtml b/browser/base/content/navigator-toolbox.inc.xhtml
index 0a67afa81ff5e10dcbfb53149f7ed9109de084ac..bdcce262b5fc18767efd1054fd724b97c42471e4 100644 index 390a1300a1213af2b411ba09c67e3c25750ee6c3..7c80c54dd43b5414bf5ea9101d53431c0b4a140b 100644
--- a/browser/base/content/navigator-toolbox.inc.xhtml --- a/browser/base/content/navigator-toolbox.inc.xhtml
+++ b/browser/base/content/navigator-toolbox.inc.xhtml +++ b/browser/base/content/navigator-toolbox.inc.xhtml
@@ -32,10 +32,11 @@ @@ -32,10 +32,11 @@

View File

@@ -0,0 +1,16 @@
diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js
index b5c8dd44daaab18397cf01d0ef9f5288f5113925..f59b494dc287edaa148f726902244224330d81c5 100644
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -1047,6 +1047,11 @@ class nsContextMenu {
!this.isSecureAboutPage()
);
+ this.showItem(
+ "context-zenAddToWebPanel",
+ this.onLink && !this.onMailtoLink && !this.onTelLink
+ );
+
let copyLinkSeparator = document.getElementById("context-sep-copylink");
// Show "Copy Link", "Copy" and "Copy Clean Link" with no divider, and "copy link" and "Send link to Device" with no divider between.
// Other cases will show a divider.

View File

@@ -1,16 +0,0 @@
diff --git a/browser/base/content/tabbrowser.js b/browser/base/content/tabbrowser.js
index 3bca0b6d30468dc3a755219723f673ec80dfce6e..200a609ea31a8c904e2d3e39a3a06ff67fb313ed 100644
--- a/browser/base/content/tabbrowser.js
+++ b/browser/base/content/tabbrowser.js
@@ -7623,6 +7623,11 @@ var TabContextMenu = {
this.contextTab.linkedBrowser,
document.getElementById("context_sendTabToDevice")
);
+
+ document
+ .getElementById("context_zenSplitTabs")
+ .setAttribute("data-l10n-args", tabCountInfo);
+ document.getElementById("context_zenSplitTabs").disabled = !gZenViewSplitter.contextCanSplitTabs();
},
handleEvent(aEvent) {

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="10" fill="#232226" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="10" fill="#DCD7C2" transform="translate(6 -6) rotate(236 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 -12) rotate(112 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(1 1) rotate(43 18 18) scale(1.1)" fill="#e290ff" rx="36"></rect><g transform="translate(-3 -1) rotate(-3 18 18)"><path d="M15 20c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 785 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#5E9188"></rect><rect x="10" y="30" width="80" height="80" fill="#3E5954" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#253342" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#232226" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFC1B2"></rect><rect x="10" y="30" width="80" height="80" fill="#FFDBC8" transform="translate(-8 -8) rotate(222 40 40)"></rect><circle cx="40" cy="40" fill="#FFF6C7" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DCD7C2" transform="translate(-4 4) rotate(84 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(-2 6) rotate(106 18 18) scale(1.1)" fill="#fac89a" rx="36"></rect><g transform="translate(-2 3) rotate(-6 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="13" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="21" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 756 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="80" fill="#253342" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 675 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="80" fill="#FFF6C7" transform="translate(16 -16) rotate(214 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 8) rotate(68 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 675 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(4 4) rotate(110 18 18) scale(1.2)" fill="#fac89a" rx="6"></rect><g transform="translate(6 -3) rotate(0 18 18)"><path d="M15 21c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="14" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="20" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 783 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 672 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(20 20) rotate(276 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(192 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 672 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(8 8) rotate(178 18 18) scale(1.1)" fill="#fac89a" rx="6"></rect><g transform="translate(4 4) rotate(-8 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 753 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 673 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(88 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(18 -18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(176 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 673 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(6 2) rotate(52 18 18) scale(1.1)" fill="#fac89a" rx="6"></rect><g transform="translate(4 -1) rotate(-2 18 18)"><path d="M15 20c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="12" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="22" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 783 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 672 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-10 10) rotate(64 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(128 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 672 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(6 -2) rotate(236 18 18) scale(1.2)" fill="#fac89a" rx="6"></rect><g transform="translate(4 -4) rotate(6 18 18)"><path d="M15 21c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="13" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="21" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 784 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#253342"></rect><rect x="10" y="30" width="80" height="80" fill="#232226" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#DDDDDD" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#5E9188" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFF6C7"></rect><rect x="10" y="30" width="80" height="80" fill="#DCD7C2" transform="translate(-20 20) rotate(106 40 40)"></rect><circle cx="40" cy="40" fill="#9D9382" r="16" transform="translate(9 -9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFC1B2" transform="translate(12 12) rotate(212 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(0 8) rotate(124 18 18) scale(1.1)" fill="#fac89a" rx="36"></rect><g transform="translate(-4 4) rotate(4 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="10" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="24" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 754 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(0 0) rotate(28 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(56 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(6 6) rotate(192 18 18) scale(1)" fill="#fac89a" rx="6"></rect><g transform="translate(0 2) rotate(-2 18 18)"><path d="M13,19 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="12" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="22" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 751 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 673 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(-20 20) rotate(184 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(18 18)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 -8) rotate(8 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 673 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(0 8) rotate(164 18 18) scale(1.2)" fill="#fac89a" rx="36"></rect><g transform="translate(-4 4) rotate(4 18 18)"><path d="M13,21 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="10" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="24" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 754 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(-14 -14) rotate(68 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-9 9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(136 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 675 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(-14 -14) rotate(68 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-9 9)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(136 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 675 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(5 5) rotate(35 18 18) scale(1.2)" fill="#e290ff" rx="6"></rect><g transform="translate(3 6) rotate(-5 18 18)"><path d="M13,21 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="14" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="20" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 752 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#3E5954"></rect><rect x="10" y="30" width="80" height="10" fill="#253342" transform="translate(14 -14) rotate(14 40 40)"></rect><circle cx="40" cy="40" fill="#232226" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#DDDDDD" transform="translate(-8 8) rotate(28 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#FFDBC8"></rect><rect x="10" y="30" width="80" height="10" fill="#FFF6C7" transform="translate(14 -14) rotate(14 40 40)"></rect><circle cx="40" cy="40" fill="#DCD7C2" r="16" transform="translate(-15 -15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#9D9382" transform="translate(-8 8) rotate(28 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(8 0) rotate(254 18 18) scale(1.2)" fill="#fac89a" rx="6"></rect><g transform="translate(4 -1) rotate(-4 18 18)"><path d="M15 21c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="10" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="24" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 784 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(14 14) rotate(218 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(76 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(14 14) rotate(218 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-15 15)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(76 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(3 3) rotate(201 18 18) scale(1)" fill="#e290ff" rx="36"></rect><g transform="translate(-1 -2) rotate(-1 18 18)"><path d="M15 19c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="13" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="21" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 784 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="80" fill="#DDDDDD" transform="translate(-14 14) rotate(228 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(-6 6)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 -16) rotate(96 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="80" fill="#9D9382" transform="translate(-14 14) rotate(228 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(-6 6)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 -16) rotate(96 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(1 1) rotate(243 18 18) scale(1)" fill="#e290ff" rx="36"></rect><g transform="translate(-3 -1) rotate(3 18 18)"><path d="M15 19c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 783 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="80" fill="#5E9188" transform="translate(0 0) rotate(20 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(12 -12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(40 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 669 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="80" fill="#FFC1B2" transform="translate(0 0) rotate(20 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(12 -12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(40 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 669 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(1 7) rotate(223 18 18) scale(1.1)" fill="#e290ff" rx="36"></rect><g transform="translate(-7 3.5) rotate(-3 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 757 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#232226"></rect><rect x="10" y="30" width="80" height="10" fill="#DDDDDD" transform="translate(16 16) rotate(158 40 40)"></rect><circle cx="40" cy="40" fill="#5E9188" r="16" transform="translate(12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#3E5954" transform="translate(16 16) rotate(316 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DCD7C2"></rect><rect x="10" y="30" width="80" height="10" fill="#9D9382" transform="translate(16 16) rotate(158 40 40)"></rect><circle cx="40" cy="40" fill="#FFC1B2" r="16" transform="translate(12 12)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFDBC8" transform="translate(16 16) rotate(316 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(8 -4) rotate(238 18 18) scale(1.1)" fill="#fac89a" rx="6"></rect><g transform="translate(4 0) rotate(-8 18 18)"><path d="M15 20c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 784 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="10" fill="#5E9188" transform="translate(16 -16) rotate(70 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(-3 3)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(140 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="10" fill="#FFC1B2" transform="translate(16 -16) rotate(70 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(-3 3)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(140 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 671 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(1 7) rotate(223 18 18) scale(1.1)" fill="#e290ff" rx="36"></rect><g transform="translate(-7 3.5) rotate(-3 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="11" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="23" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 757 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="10" fill="#5E9188" transform="translate(4 -4) rotate(90 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(180 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 668 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="10" fill="#FFC1B2" transform="translate(4 -4) rotate(90 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(180 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 668 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#fac89a"></rect><rect x="0" y="0" width="36" height="36" transform="translate(3 3) rotate(341 18 18) scale(1.2)" fill="#e290ff" rx="36"></rect><g transform="translate(-5 -6) rotate(1 18 18)"><path d="M15 21c2 1 4 1 6 0" stroke="#000000" fill="none" stroke-linecap="round"></path><rect x="13" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="21" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 785 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#DDDDDD"></rect><rect x="10" y="30" width="80" height="10" fill="#5E9188" transform="translate(-6 6) rotate(340 40 40)"></rect><circle cx="40" cy="40" fill="#3E5954" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#253342" transform="translate(0 0) rotate(320 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 669 B

View File

@@ -0,0 +1 @@
<svg viewBox="0 0 80 80" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__bauhaus" maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80"><rect width="80" height="80" rx="160" fill="#FFFFFF"></rect></mask><g mask="url(#mask__bauhaus)"><rect width="80" height="80" fill="#9D9382"></rect><rect x="10" y="30" width="80" height="10" fill="#FFC1B2" transform="translate(-6 6) rotate(340 40 40)"></rect><circle cx="40" cy="40" fill="#FFDBC8" r="16" transform="translate(0 0)"></circle><line x1="0" y1="40" x2="80" y2="40" stroke-width="2" stroke="#FFF6C7" transform="translate(0 0) rotate(320 40 40)"></line></g></svg>

After

Width:  |  Height:  |  Size: 669 B

View File

@@ -1 +0,0 @@
<svg viewBox="0 0 36 36" fill="none" role="img" xmlns="http://www.w3.org/2000/svg" width="120" height="120"><mask id="mask__beam" maskUnits="userSpaceOnUse" x="0" y="0" width="36" height="36"><rect width="36" height="36" rx="72" fill="#FFFFFF"></rect></mask><g mask="url(#mask__beam)"><rect width="36" height="36" fill="#e290ff"></rect><rect x="0" y="0" width="36" height="36" transform="translate(8 8) rotate(34 18 18) scale(1.1)" fill="#fac89a" rx="6"></rect><g transform="translate(4 4) rotate(-4 18 18)"><path d="M13,20 a1,0.75 0 0,0 10,0" fill="#000000"></path><rect x="10" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect><rect x="24" y="14" width="1.5" height="2" rx="1" stroke="none" fill="#000000"></rect></g></g></svg>

Before

Width:  |  Height:  |  Size: 752 B

Some files were not shown because too many files have changed in this diff Show More