Files
zen-browser-flake/package.nix

222 lines
5.8 KiB
Nix
Raw Normal View History

2025-04-02 20:18:24 +05:00
{
name,
variant,
policies ? {},
2025-04-02 20:18:24 +05:00
lib,
stdenv,
config,
wrapGAppsHook3,
autoPatchelfHook,
alsa-lib,
curl,
dbus-glib,
gtk3,
libXtst,
libva,
libGL,
2025-04-02 20:18:24 +05:00
pciutils,
pipewire,
adwaita-icon-theme,
undmg,
2025-04-02 20:18:24 +05:00
writeText,
fetchurl,
fetchzip,
makeDesktopItem,
copyDesktopItems,
2025-04-02 20:18:24 +05:00
patchelfUnstable, # have to use patchelfUnstable to support --no-clobber-old-sections
applicationName ?
"Zen Browser"
+ (
2025-04-03 18:14:58 -05:00
if name == "beta"
then " (Beta)"
else if name == "twilight"
then " (Twilight)"
else if name == "twilight-official"
then " (Twilight)"
else ""
),
2025-04-03 18:14:58 -05:00
}: let
2025-04-02 20:18:24 +05:00
binaryName = "zen-${name}";
libName = "zen-bin-${variant.version}";
2025-04-02 20:18:24 +05:00
mozillaPlatforms = {
x86_64-linux = "linux-x86_64";
aarch64-linux = "linux-aarch64";
aarch64-darwin = "darwin-aarch64";
2025-04-02 20:18:24 +05:00
};
firefoxPolicies =
(config.firefox.policies or {})
// policies;
2025-04-02 20:18:24 +05:00
policiesJson = writeText "firefox-policies.json" (builtins.toJSON {policies = firefoxPolicies;});
2025-04-02 20:18:24 +05:00
pname = "zen-${name}-bin-unwrapped";
installDarwin = ''
runHook preInstall
mkdir -p "$out/Applications" "$out/bin"
cp -r *.app "$out/Applications/${applicationName}.app"
ln -s zen "$out/Applications/${applicationName}.app/Contents/MacOS/${binaryName}"
cat > "$out/bin/${binaryName}" << EOF
#!/bin/bash
exec /usr/bin/open -na "$out/Applications/${applicationName}.app" --args "\$@"
EOF
chmod +x "$out/bin/${binaryName}"
ln -s "$out/bin/${binaryName}" "$out/bin/zen"
runHook postInstall
'';
installLinux = ''
runHook preInstall
# Linux tarball installation
mkdir -p "$prefix/lib/${libName}"
cp -r "$src"/* "$prefix/lib/${libName}"
mkdir -p "$out/bin"
ln -s "$prefix/lib/${libName}/zen" "$out/bin/${binaryName}"
ln -s "$out/bin/${binaryName}" "$out/bin/zen"
mkdir -p "$out/lib/${libName}/distribution"
ln -s ${policiesJson} "$out/lib/${libName}/distribution/policies.json"
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
runHook postInstall
'';
2025-04-02 20:18:24 +05:00
in
2025-04-03 18:14:58 -05:00
stdenv.mkDerivation {
inherit pname;
inherit (variant) version;
2025-04-02 20:18:24 +05:00
src =
if stdenv.hostPlatform.isDarwin
then
fetchurl {
inherit (variant) url;
hash = variant.sha256;
}
else
fetchzip {
inherit (variant) url;
hash = variant.sha256;
};
sourceRoot = lib.optionalString stdenv.hostPlatform.isDarwin ".";
desktopItems = [
(makeDesktopItem {
name = binaryName;
desktopName = "Zen Browser${lib.optionalString (name == "twilight") " Twilight"}";
exec = "${binaryName} %u";
icon = binaryName;
type = "Application";
mimeTypes = [
"text/html"
"text/xml"
"application/xhtml+xml"
"x-scheme-handler/http"
"x-scheme-handler/https"
"application/x-xpinstall"
"application/pdf"
"application/json"
];
startupWMClass = binaryName;
categories = ["Network" "WebBrowser"];
startupNotify = true;
terminal = false;
keywords = ["Internet" "WWW" "Browser" "Web" "Explorer"];
extraConfig.X-MultipleArgs = "false";
actions = {
new-windows = {
name = "Open a New Window";
exec = "${binaryName} %u";
};
new-private-window = {
name = "Open a New Private Window";
exec = "${binaryName} --private-window %u";
};
profilemanager = {
name = "Open the Profile Manager";
exec = "${binaryName} --ProfileManager %u";
};
};
})
];
2025-04-02 20:18:24 +05:00
nativeBuildInputs =
lib.optionals stdenv.hostPlatform.isLinux [
wrapGAppsHook3
autoPatchelfHook
patchelfUnstable
copyDesktopItems
]
++ lib.optionals stdenv.hostPlatform.isDarwin [
undmg
];
buildInputs = lib.optionals stdenv.hostPlatform.isLinux [
2025-04-03 18:14:58 -05:00
gtk3
adwaita-icon-theme
alsa-lib
dbus-glib
libXtst
];
runtimeDependencies = lib.optionals stdenv.hostPlatform.isLinux [
2025-04-03 18:14:58 -05:00
curl
libva.out
pciutils
libGL
2025-04-03 18:14:58 -05:00
];
appendRunpaths = lib.optionals stdenv.hostPlatform.isLinux [
"${libGL}/lib"
2025-04-03 18:14:58 -05:00
"${pipewire}/lib"
];
2025-04-03 18:14:58 -05:00
# Firefox uses "relrhack" to manually process relocations from a fixed offset
patchelfFlags = ["--no-clobber-old-sections"];
2025-04-02 20:18:24 +05:00
preFixup = ''
gappsWrapperArgs+=(
--add-flags "--name=''${MOZ_APP_LAUNCHER:-${binaryName}}"
)
'';
installPhase =
if stdenv.hostPlatform.isDarwin
then installDarwin
else installLinux;
2025-04-02 20:18:24 +05:00
2025-04-03 18:14:58 -05:00
passthru = {
inherit applicationName binaryName libName;
2025-04-03 18:14:58 -05:00
ffmpegSupport = true;
gssSupport = true;
gtk3 = gtk3;
};
2025-04-02 20:18:24 +05:00
2025-04-03 18:14:58 -05:00
meta = {
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";
sourceProvenance = with lib.sourceTypes; [binaryNativeCode];
platforms = builtins.attrNames mozillaPlatforms;
hydraPlatforms = [];
mainProgram = binaryName;
desktopFileName = "${binaryName}.desktop";
2025-04-03 18:14:58 -05:00
};
}