├── .github └── workflows │ └── pre-deploy.yml ├── CNAME ├── README.md ├── appimage.sh ├── favicon.svg ├── install-twilight.sh ├── install.sh ├── robots.txt ├── scripts └── write_redirects.py └── updates └── browser ├── Darwin_aarch64-gcc3 ├── release │ └── update.xml └── twilight │ └── update.xml ├── Darwin_x86-gcc3-u-i386-x86_64 ├── release │ └── update.xml └── twilight │ └── update.xml ├── Darwin_x86-gcc3 ├── release │ └── update.xml └── twilight │ └── update.xml ├── Darwin_x86_64-gcc3-u-i386-x86_64 ├── release │ └── update.xml └── twilight │ └── update.xml ├── Darwin_x86_64-gcc3 ├── release │ └── update.xml └── twilight │ └── update.xml ├── Linux_aarch64-gcc3 ├── release │ └── update.xml └── twilight │ └── update.xml ├── Linux_x86_64-gcc3 ├── release │ └── update.xml └── twilight │ └── update.xml ├── WINNT_aarch64-msvc-aarch64 ├── release │ └── update.xml └── twilight │ └── update.xml ├── WINNT_x86_64-msvc-x64 ├── release │ └── update.xml └── twilight │ └── update.xml └── WINNT_x86_64-msvc ├── release └── update.xml └── twilight └── update.xml /.github/workflows/pre-deploy.yml: -------------------------------------------------------------------------------- 1 | name: Pre-Deploy Updates Server 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v4 15 | with: 16 | token: ${{ secrets.DEPLOY_KEY }} 17 | 18 | - name: Setup Python 19 | uses: actions/setup-python@v5 20 | with: 21 | python-version: '3.x' 22 | 23 | - name: Fetch and override deploy branch 24 | run: | 25 | git checkout main 26 | git pull 27 | 28 | git branch -D deploy || true 29 | git checkout -b deploy 30 | 31 | - name: Write redirects 32 | run: | 33 | python scripts/write_redirects.py 34 | 35 | - name: Add confirm message 36 | run: | 37 | echo "Ready to deploy!" 38 | 39 | - name: Commit 40 | uses: stefanzweifel/git-auto-commit-action@v5 41 | with: 42 | commit_message: 🔖 Updated update server 43 | commit_user_name: Zen Browser Robot 44 | commit_user_email: zen-browser-auto@users.noreply.github.com 45 | branch: deploy 46 | push_options: '--force' 47 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | updates.zen-browser.app -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ### `Zen Browser Update Server` 4 | 5 | Resource server used for automatic updates system in Zen 6 | -------------------------------------------------------------------------------- /appimage.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # LICENSE: 4 | # Done by: https://github.com/Muko-Tabi 5 | # Twilight support added by: https://github.com/LeMoonStar 6 | # This script is licensed under the MIT License. 7 | 8 | set -euo pipefail 9 | function log() { 10 | local RED='\033[0;31m' 11 | local YELLOW='\033[1;33m' 12 | local GREEN='\033[0;32m' 13 | local YELLOW_BG='\033[43m' 14 | local BLACK_FG='\033[30m' 15 | NC='\033[0m' 16 | if [[ "${1}" == "info" ]]; then 17 | printf "${GREEN}[i] ${2}${NC}\n" 18 | elif [[ "${1}" == "warn" ]]; then 19 | printf "${YELLOW}[w] ${2}${NC}\n" 20 | elif [[ "${1}" == "err" ]]; then 21 | printf "${RED}[e] ${2}${NC}\n" 22 | elif [[ "${1}" == "highlight" ]]; then 23 | printf "${YELLOW_BG}[h] ${BLACK_FG}${2}${NC}\n" 24 | else 25 | echo "WRONG SEVERITY : $1" 26 | exit 1 27 | fi 28 | } 29 | 30 | function log_info() { log "info" "$1"; } 31 | function log_warn() { log "warn" "$1"; } 32 | function log_err() { log "err" "$1"; } 33 | function log_highlight() { log "highlight" "$1"; } 34 | 35 | # Download URL globals 36 | # Zen Stable 37 | ZEN_STABLE="https://github.com/zen-browser/desktop/releases/latest/download/zen-x86_64.AppImage" 38 | # Zen Twilight 39 | ZEN_TWILIGHT="https://github.com/zen-browser/desktop/releases/download/twilight/zen-x86_64.AppImage" 40 | 41 | # Filename base globals 42 | ZEN_STABLE_NAME_BASE="ZenBrowser" 43 | ZEN_TWILIGHT_NAME_BASE="ZenTwilight" 44 | 45 | # Function to check if AVX2 is supported 46 | check_avx2_support() { 47 | if grep -q avx2 /proc/cpuinfo; then 48 | return 0 # AVX2 supported 49 | else 50 | return 1 # AVX2 not supported 51 | fi 52 | } 53 | 54 | # Function to check if Zen Browser is installed 55 | check_installation_status() { 56 | local app_name="$1" 57 | if [ -f ~/.local/share/AppImage/$app_name.AppImage ]; then 58 | return 0 # Zen Browser installed 59 | else 60 | return 1 # Zen Browser not installed 61 | fi 62 | } 63 | 64 | # Function to check if zsync is installed 65 | check_zsync_installed() { 66 | if command -v zsync &> /dev/null; then 67 | return 0 # zsync is installed 68 | else 69 | return 1 # zsync is not installed 70 | fi 71 | } 72 | 73 | # Kawaii ASCII Art for the script 74 | kawaii_art() { 75 | local is_twilight="$1" 76 | local file_base 77 | 78 | if [[ "$is_twilight" == "1" ]]; then 79 | file_base="$ZEN_TWILIGHT_NAME_BASE" 80 | else 81 | file_base="$ZEN_STABLE_NAME_BASE" 82 | fi 83 | 84 | log_info "╔════════════════════════════════════════════════════╗" 85 | log_info "║ ║" 86 | log_info "║ (ノ◕ヮ◕)ノ*:・゚✧ Zen Browser Installer ║" 87 | log_info "║ ║" 88 | 89 | if check_installation_status "$file_base"; then 90 | log_info "║ Status: Zen Browser Installed ║" 91 | else 92 | log_info "║ Status: Zen Browser Not Installed ║" 93 | fi 94 | 95 | if check_zsync_installed; then 96 | log_info "║ zsync: Installed (Needed for Updates) ║" 97 | else 98 | log_info "║ zsync: Not Installed (Needed for Updates) ║" 99 | fi 100 | 101 | log_info "║ ║" 102 | log_info "╚════════════════════════════════════════════════════╝" 103 | log_info "" 104 | } 105 | 106 | # Function to download a file with unlimited retries 107 | download_until_success() { 108 | local url="$1" 109 | local output_path="$2" 110 | local mode="$3" # New parameter to indicate the mode 111 | 112 | while true; do 113 | case "$mode" in 114 | "zsync") 115 | log_info "Checking for Update..." 116 | ;; 117 | "update") 118 | log_info "Updating Zen Browser..." 119 | ;; 120 | "install") 121 | log_info "Installing Zen Browser..." 122 | ;; 123 | esac 124 | if curl -# -L --connect-timeout 30 --max-time 600 "$url" -o "$output_path"; then 125 | case "$mode" in 126 | "zsync") 127 | log_info "Checking for Update successfully!" 128 | ;; 129 | "update") 130 | log_info "Update completed successfully!" 131 | ;; 132 | "install") 133 | log_info "Install completed successfully!" 134 | ;; 135 | esac 136 | break 137 | else 138 | case "$mode" in 139 | "zsync") 140 | log_err "(⌣_⌣” ) Checking for Update failed, retrying..." 141 | ;; 142 | "update") 143 | log_err "(⌣_⌣” ) Update failed, retrying..." 144 | ;; 145 | "install") 146 | log_err "(⌣_⌣” ) Install failed, retrying..." 147 | ;; 148 | esac 149 | sleep 5 # Optional: wait a bit before retrying 150 | fi 151 | done 152 | } 153 | 154 | process_appimage() { 155 | local appimage_path="$1" 156 | local app_name="$2" 157 | 158 | # Make AppImage executable 159 | chmod +x "${appimage_path}" 160 | 161 | # Extract all files from AppImage 162 | "${appimage_path}" --appimage-extract 163 | 164 | # Move .desktop file (from /squashfs-root only) 165 | desktop_file=$(find -L squashfs-root -maxdepth 1 -name "*.desktop" | head -n 1) 166 | mv "${desktop_file}" ~/.local/share/applications/${app_name}.desktop 167 | 168 | # Find PNG icon (from /squashfs-root only) 169 | icon_file=$(find -L squashfs-root -maxdepth 1 -name "*.png" | head -n 1) 170 | 171 | # Resolve symlink if the icon is a symlink 172 | if [ -L "${icon_file}" ]; then 173 | icon_file=$(readlink -f "${icon_file}") 174 | fi 175 | 176 | # Copy the icon to the icons directory 177 | cp "${icon_file}" ~/.local/share/icons/${app_name}.png 178 | 179 | # Move AppImage to final location, only if it's not already there 180 | if [ "${appimage_path}" != "$HOME/.local/share/AppImage/${app_name}.AppImage" ]; then 181 | mv "${appimage_path}" ~/.local/share/AppImage/ 182 | fi 183 | 184 | # Edit .desktop file to update paths 185 | desktop_file=~/.local/share/applications/${app_name}.desktop 186 | awk -v home="$HOME" -v app_name="$app_name" ' 187 | BEGIN { in_action = 0 } 188 | /^\[Desktop Action/ { in_action = 1 } 189 | /^Exec=/ { 190 | if (in_action) { 191 | split($0, parts, "=") 192 | sub(/^[^ ]+/, "", parts[2]) # Remove the first word (original command) 193 | print "Exec=" home "/.local/share/AppImage/" app_name ".AppImage" parts[2] 194 | } else { 195 | print "Exec=" home "/.local/share/AppImage/" app_name ".AppImage %u" 196 | } 197 | next 198 | } 199 | /^Icon=/ { print "Icon=" home "/.local/share/icons/" app_name ".png"; next } 200 | { print } 201 | ' "${desktop_file}" > "${desktop_file}.tmp" && mv "${desktop_file}.tmp" "${desktop_file}" 202 | 203 | # Clean up extracted files 204 | rm -rf squashfs-root AppDir 205 | } 206 | 207 | uninstall_appimage() { 208 | local app_name="$1" 209 | log_info "" 210 | # Remove AppImage 211 | log_warn "Removing Zen Browser AppImage..." 212 | rm -f ~/.local/share/AppImage/${app_name}.AppImage 213 | 214 | # Remove .desktop file 215 | log_warn "Removing Zen Browser .desktop file..." 216 | rm -f ~/.local/share/applications/${app_name}.desktop 217 | 218 | # Remove icon 219 | log_warn "Removing Zen Browser icon..." 220 | rm -f ~/.local/share/icons/${app_name}.png 221 | 222 | log_info "" 223 | log_info "(︶︹︺) Uninstalled ${app_name}" 224 | } 225 | 226 | check_for_updates() { 227 | local is_twilight="$1" 228 | local zsync_url 229 | local zsync_file 230 | local appimage_url 231 | local file_base 232 | 233 | if [[ "$is_twilight" == 1 ]]; then 234 | file_base="$ZEN_TWILIGHT_NAME_BASE" 235 | else 236 | file_base="$ZEN_STABLE_NAME_BASE" 237 | fi 238 | 239 | log_info "" 240 | 241 | 242 | if [[ "$is_twilight" == 1 ]]; then 243 | zsync_url="$ZEN_TWILIGHT.zsync" 244 | appimage_url="$ZEN_TWILIGHT" 245 | else 246 | zsync_url="$ZEN_STABLE.zsync" 247 | appimage_url="$ZEN_STABLE" 248 | fi 249 | 250 | # Get the download directory using xdg-user-dir, using Downloads as default value 251 | DOWNLOAD_DIR=$(xdg-user-dir DOWNLOAD || echo "${HOME}/Downloads") 252 | 253 | # Set zsync file path 254 | zsync_file="${DOWNLOAD_DIR}/${file_base}.AppImage.zsync" 255 | 256 | if check_installation_status "$file_base"; then 257 | log_info "Checking for updates..." 258 | if ! check_zsync_installed; then 259 | log_err "Zsync is not installed. Please install zsync to enable update functionality." 260 | return 1 261 | fi 262 | download_until_success "$zsync_url" "$zsync_file" "zsync" 263 | update_output=$(zsync -i ~/.local/share/AppImage/$file_base.AppImage -o ~/.local/share/AppImage/$file_base.AppImage "$zsync_file" 2>&1) 264 | if echo "$update_output" | grep -q "verifying download...checksum matches OK"; then 265 | log_info "(。♥‿♥。) Congrats! Zen Browser is up-to-date!" 266 | else 267 | echo "Updating Zen Browser..." 268 | download_until_success "$appimage_url" ~/.local/share/AppImage/$file_base.AppImage "update" 269 | process_appimage ~/.local/share/AppImage/$file_base.AppImage $file_base 270 | log_info "(。♥‿♥。) Zen Browser updated to the latest!" 271 | fi 272 | rm -f "$zsync_file" 273 | else 274 | log_err "Zen Browser is not installed!" 275 | main_menu 276 | fi 277 | } 278 | 279 | install_zen_browser() { 280 | local is_twilight="$1" 281 | local appimage_url 282 | local file_base 283 | 284 | if [[ "$is_twilight" == 1 ]]; then 285 | file_base="$ZEN_TWILIGHT_NAME_BASE" 286 | else 287 | file_base="$ZEN_STABLE_NAME_BASE" 288 | fi 289 | 290 | log_info "" 291 | 292 | if [[ "$is_twilight" == 1 ]]; then 293 | appimage_url="$ZEN_TWILIGHT" 294 | else 295 | appimage_url="$ZEN_STABLE" 296 | fi 297 | 298 | log_warn "Downloading Zen from $appimage_url" 299 | log_info "" 300 | temp_file="/tmp/$file_base.AppImage" 301 | download_until_success "$appimage_url" "$temp_file" "install" 302 | process_appimage "$temp_file" $file_base 303 | log_info "" 304 | log_info "(。♥‿♥。) Zen Browser installed successfully!" 305 | rm -f "$temp_file" 306 | } 307 | 308 | main_menu() { 309 | # Check if the script is in twilight mode. 310 | local is_twilight 311 | if [[ "$1" == "twilight" ]]; then 312 | is_twilight=1 313 | log_warn "The installer is in Twilight mode!" 314 | else 315 | is_twilight=0 316 | fi 317 | 318 | # Show kawaii ASCII art 319 | kawaii_art $is_twilight 320 | 321 | log_info "(★^O^★) What would you like to do?" 322 | log_info " 1) Install" 323 | log_info " 2) Uninstall" 324 | if check_zsync_installed; then 325 | log_info " 3) Check for Updates" 326 | fi 327 | log_info " 0) Exit" 328 | if check_zsync_installed; then 329 | read -p "Enter your choice (0-3): " main_choice 330 | else 331 | read -p "Enter your choice (0-2): " main_choice 332 | fi 333 | 334 | case $main_choice in 335 | 1) 336 | install_zen_browser $is_twilight 337 | ;; 338 | 2) 339 | if [[ "$is_twilight" == 1 ]]; then 340 | uninstall_appimage "$ZEN_TWILIGHT_NAME_BASE" 341 | else 342 | uninstall_appimage "$ZEN_STABLE_NAME_BASE" 343 | fi 344 | ;; 345 | 3) 346 | if check_zsync_installed; then 347 | check_for_updates $is_twilight 348 | else 349 | log_err "(•ˋ _ ˊ•) Invalid choice. Exiting..." 350 | exit 1 351 | fi 352 | ;; 353 | 0) 354 | log_info "(⌒‿⌒) Exiting..." 355 | exit 0 356 | ;; 357 | *) 358 | log_err "(•ˋ _ ˊ•) Invalid choice. Exiting..." 359 | exit 1 360 | ;; 361 | esac 362 | } 363 | 364 | # Create necessary directories 365 | mkdir -p ~/.local/share/applications 366 | mkdir -p ~/.local/share/icons 367 | mkdir -p ~/.local/share/AppImage 368 | 369 | # Execute the main menu 370 | main_menu "${1:-stable}" 371 | 372 | # End of script 373 | log_info "" 374 | log_info "Thank you for using Zen Browser Installer!" 375 | -------------------------------------------------------------------------------- /favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /install-twilight.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euo pipefail 4 | 5 | app_name=zen-twilight 6 | literal_name_of_installation_directory=".tarball-installations" 7 | universal_path_for_installation_directory="$HOME/$literal_name_of_installation_directory" 8 | app_installation_directory="$universal_path_for_installation_directory/zen-twilight" 9 | official_package_location="https://github.com/zen-browser/desktop/releases/download/twilight/zen.linux-x86_64.tar.xz" 10 | tar_location=$(mktemp /tmp/zen.XXXXXX.tar.xz) 11 | open_tar_application_data_location="zen" 12 | local_bin_path="$HOME/.local/bin" 13 | local_application_path="$HOME/.local/share/applications" 14 | app_bin_in_local_bin="$local_bin_path/$app_name" 15 | desktop_in_local_applications="$local_application_path/$app_name.desktop" 16 | icon_path="$app_installation_directory/browser/chrome/icons/default/default128.png" 17 | executable_path=$app_installation_directory/zen 18 | 19 | echo "Welcome to Zen Twilight tarball installer, just chill and wait for the installation to complete!" 20 | 21 | sleep 1 22 | 23 | echo "Downloading the latest package" 24 | curl -L -o $tar_location $official_package_location 25 | if [ $? -eq 0 ]; then 26 | echo OK 27 | else 28 | echo "Download failed. Curl not found or not installed" 29 | exit 30 | fi 31 | 32 | echo "Extracting Zen Twilight..." 33 | tar -xvJf $tar_location 34 | 35 | echo "Untarred successfully!" 36 | 37 | echo "Checking to see if an older installation exists" 38 | if [ -f "$app_bin_in_local_bin" ]; then 39 | echo "Old bin file detected, removing..." 40 | rm "$app_bin_in_local_bin" 41 | fi 42 | 43 | if [ -d "$app_installation_directory" ]; then 44 | echo "Old app files are found, removing..." 45 | rm -rf "$app_installation_directory" 46 | fi 47 | 48 | if [ -f "$desktop_in_local_applications" ]; then 49 | echo "Old app files are found, removing..." 50 | rm "$desktop_in_local_applications" 51 | fi 52 | 53 | if [ ! -d $universal_path_for_installation_directory ]; then 54 | echo "Creating the $universal_path_for_installation_directory directory for installation" 55 | mkdir $universal_path_for_installation_directory 56 | fi 57 | 58 | mv $open_tar_application_data_location $app_installation_directory 59 | 60 | echo "Zen Twilight successfully moved to your safe place!" 61 | 62 | rm $tar_location 63 | 64 | if [ ! -d $local_bin_path ]; then 65 | echo "$local_bin_path not found, creating it for you" 66 | mkdir $local_bin_path 67 | fi 68 | 69 | touch $app_bin_in_local_bin 70 | chmod u+x $app_bin_in_local_bin 71 | echo "#!/bin/bash 72 | $executable_path" >> $app_bin_in_local_bin 73 | 74 | echo "Created executable for your \$PATH if you ever need" 75 | 76 | if [ ! -d $local_application_path ]; then 77 | echo "Creating the $local_application_path directory for desktop file" 78 | mkdir $local_application_path 79 | fi 80 | 81 | 82 | touch $desktop_in_local_applications 83 | echo " 84 | [Desktop Entry] 85 | Name=Zen Twilight 86 | Comment=Development build of Zen Browser with latest experimental features and updates 87 | Keywords=web;browser;internet 88 | Exec=$executable_path %u 89 | Icon=$icon_path 90 | Terminal=false 91 | StartupNotify=true 92 | StartupWMClass=zen 93 | NoDisplay=false 94 | Type=Application 95 | MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; 96 | Categories=Network;WebBrowser; 97 | Actions=new-window;new-private-window;profile-manager-window; 98 | [Desktop Action new-window] 99 | Name=Open a New Window 100 | Exec=$executable_path --new-window %u 101 | [Desktop Action new-private-window] 102 | Name=Open a New Private Window 103 | Exec=$executable_path --private-window %u 104 | [Desktop Action profile-manager-window] 105 | Name=Open the Profile Manager 106 | Exec=$executable_path --ProfileManager 107 | " >> $desktop_in_local_applications 108 | 109 | echo "Created desktop entry successfully" 110 | echo "Installation is successful" 111 | echo "Done, and done, have fun! 🐷" 112 | 113 | exit 0 114 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euo pipefail 4 | 5 | app_name=zen 6 | literal_name_of_installation_directory=".tarball-installations" 7 | universal_path_for_installation_directory="$HOME/$literal_name_of_installation_directory" 8 | app_installation_directory="$universal_path_for_installation_directory/zen" 9 | official_package_location="https://github.com/zen-browser/desktop/releases/latest/download/zen.linux-x86_64.tar.xz" 10 | tar_location=$(mktemp /tmp/zen.XXXXXX.tar.xz) 11 | open_tar_application_data_location="zen" 12 | local_bin_path="$HOME/.local/bin" 13 | local_application_path="$HOME/.local/share/applications" 14 | app_bin_in_local_bin="$local_bin_path/$app_name" 15 | desktop_in_local_applications="$local_application_path/$app_name.desktop" 16 | icon_path="$app_installation_directory/browser/chrome/icons/default/default128.png" 17 | executable_path=$app_installation_directory/zen 18 | 19 | echo "Welcome to Zen tarball installer, just chill and wait for the installation to complete!" 20 | 21 | sleep 1 22 | 23 | echo "Downloading the latest package" 24 | curl -L -o $tar_location $official_package_location 25 | if [ $? -eq 0 ]; then 26 | echo OK 27 | else 28 | echo "Download failed. Curl not found or not installed" 29 | exit 30 | fi 31 | 32 | echo "Extracting Zen Browser..." 33 | tar -xvJf $tar_location 34 | 35 | echo "Untarred successfully!" 36 | 37 | echo "Checking to see if an older installation exists" 38 | if [ -f "$app_bin_in_local_bin" ]; then 39 | echo "Old bin file detected, removing..." 40 | rm "$app_bin_in_local_bin" 41 | fi 42 | 43 | if [ -d "$app_installation_directory" ]; then 44 | echo "Old app files are found, removing..." 45 | rm -rf "$app_installation_directory" 46 | fi 47 | 48 | if [ -f "$desktop_in_local_applications" ]; then 49 | echo "Old app files are found, removing..." 50 | rm "$desktop_in_local_applications" 51 | fi 52 | 53 | if [ ! -d $universal_path_for_installation_directory ]; then 54 | echo "Creating the $universal_path_for_installation_directory directory for installation" 55 | mkdir $universal_path_for_installation_directory 56 | fi 57 | 58 | mv $open_tar_application_data_location $app_installation_directory 59 | 60 | echo "Zen successfully moved to your safe place!" 61 | 62 | rm $tar_location 63 | 64 | if [ ! -d $local_bin_path ]; then 65 | echo "$local_bin_path not found, creating it for you" 66 | mkdir $local_bin_path 67 | fi 68 | 69 | touch $app_bin_in_local_bin 70 | chmod u+x $app_bin_in_local_bin 71 | echo "#!/bin/bash 72 | $executable_path" >> $app_bin_in_local_bin 73 | 74 | echo "Created executable for your \$PATH if you ever need" 75 | 76 | if [ ! -d $local_application_path ]; then 77 | echo "Creating the $local_application_path directory for desktop file" 78 | mkdir $local_application_path 79 | fi 80 | 81 | 82 | touch $desktop_in_local_applications 83 | echo " 84 | [Desktop Entry] 85 | Name=Zen Browser 86 | Comment=Experience tranquillity while browsing the web without people tracking you! 87 | Keywords=web;browser;internet 88 | Exec=$executable_path %u 89 | Icon=$icon_path 90 | Terminal=false 91 | StartupNotify=true 92 | StartupWMClass=zen 93 | NoDisplay=false 94 | Type=Application 95 | MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;x-scheme-handler/http;x-scheme-handler/https; 96 | Categories=Network;WebBrowser; 97 | Actions=new-window;new-private-window;profile-manager-window; 98 | [Desktop Action new-window] 99 | Name=Open a New Window 100 | Exec=$executable_path --new-window %u 101 | [Desktop Action new-private-window] 102 | Name=Open a New Private Window 103 | Exec=$executable_path --private-window %u 104 | [Desktop Action profile-manager-window] 105 | Name=Open the Profile Manager 106 | Exec=$executable_path --ProfileManager 107 | " >> $desktop_in_local_applications 108 | 109 | echo "Created desktop entry successfully" 110 | echo "Installation is successful" 111 | echo "Done, and done, have fun! 🐷" 112 | 113 | exit 0 114 | -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / 3 | -------------------------------------------------------------------------------- /scripts/write_redirects.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # For branch redirects. E.g. if we want to convert 'alpha' -> 'beta' in all URLs, 4 | # but still maintain the old URLs just in case someone has not updated 5 | # broken branch -> fixed branch 6 | REDIRECTS = { 7 | "twilightundefined": "twilight", # A bug there was with previous twilight updates 8 | "alpha": "release", # Alpha -> Beta 9 | "alpha-generic": "release", # Alpha -> Beta 10 | "beta-generic": "release", # Beta (Generic) -> Beta 11 | "twilight-generic": "twilight", # Twilight (Generic) -> Twilight 12 | "beta": "release", # Beta -> Release 13 | "release-generic": "release", # Generic release -> release 14 | } 15 | 16 | UPDATES_ROOT = "updates/browser" 17 | 18 | for new, old in REDIRECTS.items(): 19 | print(f"Redirecting {old} -> {new}") 20 | # just create and copy the content of the old file to the new file 21 | # the structure of the updates server is updates/browser///update.xml 22 | # we want to replace the branch with the new branch 23 | for target in os.listdir(UPDATES_ROOT): 24 | target_path = os.path.join(UPDATES_ROOT, target) 25 | for branch in os.listdir(target_path): 26 | if branch == old: 27 | # The directory doesnt exist, so we create a new one 28 | new_branch_path = os.path.join(target_path, new) 29 | old_branch_path = os.path.join(target_path, old) 30 | os.makedirs(new_branch_path) 31 | for update in os.listdir(old_branch_path): 32 | update_path = os.path.join(old_branch_path, update) 33 | with open(update_path, "r") as f: 34 | content = f.read() 35 | new_update_path = os.path.join(new_branch_path, update) 36 | with open(new_update_path, "w") as nf: 37 | nf.write(content) 38 | print(f"Redirected {old} -> {new} in {target}/{branch}") 39 | 40 | print("Done! Let's build the site next!") 41 | 42 | -------------------------------------------------------------------------------- /updates/browser/Darwin_aarch64-gcc3/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_aarch64-gcc3/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86-gcc3-u-i386-x86_64/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86-gcc3-u-i386-x86_64/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86-gcc3/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86-gcc3/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86_64-gcc3-u-i386-x86_64/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86_64-gcc3-u-i386-x86_64/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86_64-gcc3/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Darwin_x86_64-gcc3/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Linux_aarch64-gcc3/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Linux_aarch64-gcc3/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Linux_x86_64-gcc3/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/Linux_x86_64-gcc3/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/WINNT_aarch64-msvc-aarch64/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/WINNT_aarch64-msvc-aarch64/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/WINNT_x86_64-msvc-x64/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/WINNT_x86_64-msvc-x64/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/WINNT_x86_64-msvc/release/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /updates/browser/WINNT_x86_64-msvc/twilight/update.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | --------------------------------------------------------------------------------