# Zen Browser This is a nix flake for the Zen browser. ## Features - Linux support - Available for _x86_64_ and _aarch64_ - Support for _twilight_ and _beta_ - Policies can be modified via Home Manager and unwrapped package override - Fast & Automatic updates via GitHub Actions - Browser update checks are disabled by default - The default twilight version is reliable and reproducible ## Installation Just add it to your NixOS `flake.nix` or home-manager: ```nix inputs = { zen-browser = { url = "github:0xc000022070/zen-browser-flake"; # IMPORTANT: we're using "libgbm" and is only available in unstable so ensure # to have it up-to-date or simply don't specify the nixpkgs input inputs.nixpkgs.follows = "nixpkgs"; }; # ... } ``` ### Integration > [!IMPORTANT] > Use the **twilight** package to guarantee reproducibility, the artifacts of that package are re-uploaded > to this repository. However, if you don't agree with that and want to use the official artifacts, use **twilight-official**.

Home Manager

```nix { # home.nix imports = [ inputs.zen-browser.homeModules.beta # or inputs.zen-browser.homeModules.twilight # or inputs.zen-browser.homeModules.twilight-official ]; programs.zen-browser.enable = true; } ``` Then build your Home Manager configuration ```shell $ home-manager switch ``` Check the [Home Manager Reference](#home-manager-reference) and my rice [here](https://github.com/luisnquin/nixos-config/blob/main/home/modules/browser.nix)! :)

With environment.systemPackages or home.packages

To integrate `Zen Browser` to your NixOS/Home Manager configuration, add the following to your `environment.systemPackages` or `home.packages`: ```nix # system: only 'x86_64-linux' and 'aarch64-linux' are supported inputs.zen-browser.packages."${system}".default # beta inputs.zen-browser.packages."${system}".beta # or "beta-unwrapped" inputs.zen-browser.packages."${system}".twilight # or "twilight-unwrapped" # IMPORTANT: this package relies on the twilight release artifacts from the # official zen repo and no new release is created, the artifacts are replaced inputs.zen-browser.packages."${system}".twilight-official # or "twilight-official-unwrapped" # you can even override the package policies inputs.zen-browser.packages."${system}".default.override { policies = { DisableAppUpdate = true; DisableTelemetry = true; # find more options here: https://mozilla.github.io/policy-templates/ }; } ``` Afterwards you can just build your configuration ```shell $ sudo nixos-rebuild switch # or home-manager switch ```
### Start the browser ```shell # it's a symlink, if you install two versions they will collide and you should either specify "zen-twilight" or "zen-beta" $ zen ``` ## Home Manager reference This is only an attempt to document some of the options provided by the [mkFirefoxModule](https://github.com/nix-community/home-manager/blob/67f60ebce88a89939fb509f304ac554bcdc5bfa6/modules/programs/firefox/mkFirefoxModule.nix#L207) module, so feel free to experiment with other program options and help with further documentation. `programs.zen-browser.*` - `enable` (_boolean_): Enable the home manager config. - `nativeMessagingHosts` (listOf package): To [enable communication between the browser and native applications](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging). **Example:** ```nix { # Add any other native connectors here programs.zen-browser.nativeMessagingHosts = [pkgs.firefoxpwa]; } ``` - `policies` (attrsOf anything): You can also modify the **extensions** and **preferences** from here. **Some common policies:** ```nix { programs.zen-browser.policies = { AutofillAddressEnabled = true; AutofillCreditCardEnabled = false; DisableAppUpdate = true; DisableFeedbackCommands = true; DisableFirefoxStudies = true; DisablePocket = true; DisableTelemetry = true; DontCheckDefaultBrowser = true; NoDefaultBookmarks = true; OfferToSaveLogins = false; EnableTrackingProtection = { Value = true; Locked = true; Cryptomining = true; Fingerprinting = true; }; }; } ``` For more policies [read this](https://mozilla.github.io/policy-templates/). **Preferences:** ```nix { programs.zen-browser.policies = { Preferences = { "browser.tabs.warnOnClose" = { "Value" = false; "Status" = "locked"; }; # and so on... }; }; } ``` **Zen-specific preferences:** Check [this comment](https://github.com/0xc000022070/zen-browser-flake/issues/59#issuecomment-2964607780). **Extensions:** ```nix { programs.zen-browser.policies = { ExtensionSettings = { "wappalyzer@crunchlabz.com" = { install_url = "https://addons.mozilla.org/firefox/downloads/file/4482384/wappalyzer-6.10.82.xpi"; installation_mode = "force_installed"; }; "{85860b32-02a8-431a-b2b1-40fbd64c9c69}" = { install_url = "https://addons.mozilla.org/firefox/downloads/file/4156831/github_file_icons-1.5.1.xpi"; installation_mode = "force_installed"; }; }; }; } ``` To setup your own extensions you should: 1. [Go to Add-ons for Firefox](https://addons.mozilla.org/en-US/firefox/) 2. Go to the page of the extension that you want to declare 3. Go to "_See all versions_" 4. Copy the link to the latest "Download file" 5. Download the file with wget 6. Run `unzip -*.xpi -d my-extension && cd my-extension` 7. Run `cat manifest.json | jq -r '.browser_specific_settings.gecko.id'` and use the result for the entry key. 8. Don't forget to add the `install_url` and set `installation_mode` to `force_installed`. ## 1Password Zen has to be manually added to the list of browsers that 1Password will communicate with. See [this wiki article](https://wiki.nixos.org/wiki/1Password) for more information. To enable 1Password integration, you need to add the browser identifier to the file `/etc/1password/custom_allowed_browsers`. ```nix environment.etc = { "1password/custom_allowed_browsers" = { text = '' .zen-wrapped ''; # or just "zen" if you use unwrapped package mode = "0755"; }; }; ``` ## Native Messaging To [enable communication between the browser and native applications](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Native_messaging), you can use the following configuration pattern. ### With Home Manager Check the [Home Manager Reference](#home-manager-reference). ### With package override ```nix { home.packages = [ ( inputs.zen-browser.packages."${system}".default.override { nativeMessagingHosts = [pkgs.firefoxpwa]; } ) ]; } ``` ## Troubleshooting #### 1Password constantly requires password You may want to set `policies.DisableAppUpdate = false;` in your policies.json file. See . ## Contributing Before contributing, please make sure that your code is formatted correctly by running ```shell $ nix fmt ``` ## LICENSE This project is licensed under the [MIT License](./LICENSE).