diff --git a/flake.nix b/flake.nix index 35fb627..04df18f 100644 --- a/flake.nix +++ b/flake.nix @@ -96,6 +96,11 @@ homeManagerModules = { devenv = ./modules/home-manager/devenv.nix; + zen-browser = ./modules/home-manager/zen-browser.nix; }; + + packages = forAllSystems (pkgs: { + zen-browser = pkgs.callPackage ./packages/zen-browser {}; + }); }; } diff --git a/home/default.nix b/home/default.nix index 5107da7..4f0e389 100644 --- a/home/default.nix +++ b/home/default.nix @@ -4,11 +4,14 @@ imports = [ self.homeManagerModules.devenv + self.homeManagerModules.zen-browser ./desktop.nix ./keymaps.nix ]; + programs.zen-browser.enable = true; + # The *state version* indicates which default # settings are in effect and will therefore help avoid breaking # program configurations. Switching to a higher state version diff --git a/modules/home-manager/zen-browser.nix b/modules/home-manager/zen-browser.nix new file mode 100644 index 0000000..535894e --- /dev/null +++ b/modules/home-manager/zen-browser.nix @@ -0,0 +1,27 @@ +{ + config, + lib, + pkgs, + self, + ... +}: let + cfg = config.programs.zen-browser; +in { + # This could be extended when https://github.com/NixOS/nixpkgs/issues/327982 is + # fixed. + # mkFirefoxModule (https://github.com/nix-community/home-manager/blob/f99c704fe3a4cf8d72b2d568ec80bc38be1a9407/modules/programs/firefox/mkFirefoxModule.nix) + # can be used to create a module that handles extensions just like firefox and librewolf + # modules. + options.programs.zen-browser = with lib; { + enable = mkEnableOption ""; + package = mkOption { + type = with types; package; + default = self.packages.${pkgs.system}.zen-browser; + }; + }; + config = lib.mkIf cfg.enable { + home.packages = [ + cfg.package + ]; + }; +} diff --git a/packages/zen-browser/COPYRIGHT b/packages/zen-browser/COPYRIGHT new file mode 100644 index 0000000..42a3f96 --- /dev/null +++ b/packages/zen-browser/COPYRIGHT @@ -0,0 +1,22 @@ +The contents of this directory were copied from the repository https://github.com/0xc000022070/zen-browser-flake, +licensed under the MIT License. The full license text is provided bellow: + +Copyright (c) 2024 Luis QuiƱones + +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. diff --git a/packages/zen-browser/default.nix b/packages/zen-browser/default.nix new file mode 100644 index 0000000..2045e94 --- /dev/null +++ b/packages/zen-browser/default.nix @@ -0,0 +1,153 @@ +{pkgs ? import , ...}: let + name = "beta"; + + variant = + { + beta.x86_64-linux = rec { + version = "1.7.4b"; + sha1 = "5259fa7cbd661f137c5a84d34e48882074a1a20e"; + url = "https://github.com/zen-browser/desktop/releases/download/${version}/zen.linux-x86_64.tar.bz2"; + sha256 = "sha256-hiGb2oyAueKa6Xs6BvtEmgPTRlOXvJ5YDseS8kZ1VbQ="; + }; + beta.aarch64-linux = rec { + version = "1.7.4b"; + sha1 = "5259fa7cbd661f137c5a84d34e48882074a1a20e"; + url = "https://github.com/zen-browser/desktop/releases/download/${version}/zen.linux-aarch64.tar.bz2"; + sha256 = "sha256-/fdgw97Ocg7AYGchHhXSWhFOS0bMb5GVAgZDw6/yh3I="; + }; + } + .${name} + .${pkgs.system}; + + runtimeLibs = with pkgs; + [ + libGL + libGLU + libevent + libffi + libjpeg + libpng + libstartup_notification + libvpx + libwebp + stdenv.cc.cc + fontconfig + libxkbcommon + zlib + freetype + gtk3 + libxml2 + dbus + xcb-util-cursor + alsa-lib + libpulseaudio + pango + atk + cairo + gdk-pixbuf + glib + udev + libva + mesa + libnotify + cups + pciutils + ffmpeg + libglvnd + pipewire + speechd + ] + ++ (with pkgs.xorg; [ + libxcb + libX11 + libXcursor + libXrandr + libXi + libXext + libXcomposite + libXdamage + libXfixes + libXScrnSaver + ]); + + policiesJson = pkgs.writeText "firefox-policies.json" (builtins.toJSON { + # https://mozilla.github.io/policy-templates/#disableappupdates + policies = { + DisableAppUpdate = true; + }; + }); + + desktopFile = + if name == "beta" + then "zen.desktop" + else "zen_${name}.desktop"; +in + pkgs.stdenv.mkDerivation { + inherit (variant) version; + + pname = "zen-browser"; + + src = builtins.fetchTarball {inherit (variant) url sha256;}; + desktopSrc = ./.; + + phases = ["installPhase" "fixupPhase"]; + + nativeBuildInputs = with pkgs; [makeWrapper copyDesktopItems wrapGAppsHook]; + + installPhase = '' + mkdir -p $out/{bin,opt/zen,lib/zen-${variant.version}/distribution} && cp -r $src/* $out/opt/zen + ln -s $out/opt/zen/zen $out/bin/zen + ln -s ${policiesJson} "$out/lib/zen-${variant.version}/distribution/policies.json" + ln -s $out/bin/zen $out/bin/zen-${name} + + install -D $desktopSrc/zen-${name}.desktop $out/share/applications/${desktopFile} + + install -D $src/browser/chrome/icons/default/default16.png $out/share/icons/hicolor/16x16/apps/zen-${name}.png + install -D $src/browser/chrome/icons/default/default32.png $out/share/icons/hicolor/32x32/apps/zen-${name}.png + install -D $src/browser/chrome/icons/default/default48.png $out/share/icons/hicolor/48x48/apps/zen-${name}.png + install -D $src/browser/chrome/icons/default/default64.png $out/share/icons/hicolor/64x64/apps/zen-${name}.png + install -D $src/browser/chrome/icons/default/default128.png $out/share/icons/hicolor/128x128/apps/zen-${name}.png + ''; + + fixupPhase = '' + chmod 755 $out/bin/zen $out/opt/zen/* + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zen/zen + wrapProgram $out/opt/zen/zen --set LD_LIBRARY_PATH "${ + pkgs.lib.makeLibraryPath runtimeLibs + }" \ + --set MOZ_LEGACY_PROFILES 1 --set MOZ_ALLOW_DOWNGRADE 1 --set MOZ_APP_LAUNCHER zen --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zen/zen-bin + wrapProgram $out/opt/zen/zen-bin --set LD_LIBRARY_PATH "${ + pkgs.lib.makeLibraryPath runtimeLibs + }" \ + --set MOZ_LEGACY_PROFILES 1 --set MOZ_ALLOW_DOWNGRADE 1 --set MOZ_APP_LAUNCHER zen --prefix XDG_DATA_DIRS : "$GSETTINGS_SCHEMAS_PATH" + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zen/glxtest + wrapProgram $out/opt/zen/glxtest --set LD_LIBRARY_PATH "${ + pkgs.lib.makeLibraryPath runtimeLibs + }" + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zen/updater + wrapProgram $out/opt/zen/updater --set LD_LIBRARY_PATH "${ + pkgs.lib.makeLibraryPath runtimeLibs + }" + + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" $out/opt/zen/vaapitest + wrapProgram $out/opt/zen/vaapitest --set LD_LIBRARY_PATH "${ + pkgs.lib.makeLibraryPath runtimeLibs + }" + ''; + + meta = { + inherit desktopFile; + + description = "Experience tranquillity while browsing the web without people tracking you!"; + homepage = "https://zen-browser.app"; + downloadPage = "https://zen-browser.app/download/"; + changelog = "https://github.com/zen-browser/desktop/releases"; + platforms = pkgs.lib.platforms.linux; + mainProgram = "zen"; + }; + } diff --git a/packages/zen-browser/zen-beta.desktop b/packages/zen-browser/zen-beta.desktop new file mode 100644 index 0000000..a44e8f3 --- /dev/null +++ b/packages/zen-browser/zen-beta.desktop @@ -0,0 +1,25 @@ +[Desktop Entry] +Name=Zen Browser +Exec=zen-beta %u +Icon=zen-beta +Type=Application +MimeType=text/html;text/xml;application/xhtml+xml;x-scheme-handler/http;x-scheme-handler/https;application/x-xpinstall;application/pdf;application/json; +StartupWMClass=zen-beta +Categories=Network;WebBrowser; +StartupNotify=true +Terminal=false +X-MultipleArgs=false +Keywords=Internet;WWW;Browser;Web;Explorer; +Actions=new-window;new-private-window;profilemanager; + +[Desktop Action new-window] +Name=Open a New Window +Exec=zen-beta %u + +[Desktop Action new-private-window] +Name=Open a New Private Window +Exec=zen-beta --private-window %u + +[Desktop Action profilemanager] +Name=Open the Profile Manager +Exec=zen-beta --ProfileManager %u