rewrite
This commit is contained in:
27
flake.lock
generated
27
flake.lock
generated
@@ -1,12 +1,32 @@
|
||||
{
|
||||
"nodes": {
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1743604125,
|
||||
"narHash": "sha256-ZD61DNbsBt1mQbinAaaEqKaJk2RFo9R/j+eYWeGMx7A=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "180fd43eea296e62ae68e079fcf56aba268b9a1a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1742288794,
|
||||
"narHash": "sha256-Txwa5uO+qpQXrNG4eumPSD+hHzzYi/CdaM80M9XRLCo=",
|
||||
"lastModified": 1743448293,
|
||||
"narHash": "sha256-bmEPmSjJakAp/JojZRrUvNcDX2R5/nuX6bm+seVaGhs=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b6eaf97c6960d97350c584de1b6dcff03c9daf42",
|
||||
"rev": "77b584d61ff80b4cef9245829a6f1dfad5afdfa3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -18,6 +38,7 @@
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
|
||||
214
flake.nix
214
flake.nix
@@ -2,161 +2,75 @@
|
||||
description = "Zen Browser";
|
||||
|
||||
inputs.nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
||||
inputs.home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
outputs = {
|
||||
self,
|
||||
nixpkgs,
|
||||
}: let
|
||||
mkZen = name: system: entry: let
|
||||
pkgs = import nixpkgs {inherit system;};
|
||||
variant = (builtins.fromJSON (builtins.readFile ./sources.json)).${entry}.${system};
|
||||
outputs =
|
||||
{
|
||||
self,
|
||||
nixpkgs,
|
||||
home-manager,
|
||||
}:
|
||||
let
|
||||
mkZen =
|
||||
name: system: entry:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
variant = (builtins.fromJSON (builtins.readFile ./sources.json)).${entry}.${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
|
||||
libgbm
|
||||
vulkan-loader
|
||||
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.callPackage ./package.nix {
|
||||
inherit name desktopFile variant;
|
||||
};
|
||||
|
||||
mkZenWrapped =
|
||||
name: system: entry:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
pkgs.wrapFirefox entry {
|
||||
icon = "zen-${name}";
|
||||
wmClass = "zen";
|
||||
hasMozSystemDirPatch = false;
|
||||
};
|
||||
|
||||
supportedSystems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
||||
in
|
||||
{
|
||||
packages = forAllSystems (system: rec {
|
||||
beta-unwrapped = mkZen "beta" system "beta";
|
||||
twilight-unwrapped = mkZen "twilight" system "twilight";
|
||||
twilight-official-unwrapped = mkZen "twilight" system "twilight-official";
|
||||
|
||||
beta = mkZenWrapped "beta" system beta-unwrapped;
|
||||
twilight = mkZenWrapped "twilight" system twilight-unwrapped;
|
||||
twilight-official = mkZenWrapped "twilight" system twilight-official-unwrapped;
|
||||
|
||||
default = beta;
|
||||
});
|
||||
|
||||
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 = [pkgs.makeWrapper pkgs.copyDesktopItems pkgs.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";
|
||||
homeModules = rec {
|
||||
beta = import ./hm-module.nix {
|
||||
inherit self home-manager;
|
||||
name = "beta";
|
||||
};
|
||||
twilight = import ./hm-module.nix {
|
||||
inherit self home-manager;
|
||||
name = "twilight";
|
||||
};
|
||||
twilight-official = import ./hm-module.nix {
|
||||
inherit self home-manager;
|
||||
name = "twilight-official";
|
||||
};
|
||||
default = beta;
|
||||
};
|
||||
|
||||
supportedSystems = [
|
||||
"x86_64-linux"
|
||||
"aarch64-linux"
|
||||
];
|
||||
|
||||
forAllSystems = nixpkgs.lib.genAttrs supportedSystems;
|
||||
in {
|
||||
packages = forAllSystems (system: {
|
||||
default = mkZen "beta" system "beta";
|
||||
beta = mkZen "beta" system "beta";
|
||||
twilight = mkZen "twilight" system "twilight";
|
||||
twilight-official = mkZen "twilight" system "twilight-official";
|
||||
});
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
50
hm-module.nix
Normal file
50
hm-module.nix
Normal file
@@ -0,0 +1,50 @@
|
||||
{
|
||||
home-manager,
|
||||
self,
|
||||
name,
|
||||
}:
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
applicationName = "Zen Browser";
|
||||
modulePath = [
|
||||
"programs"
|
||||
"zen-browser"
|
||||
];
|
||||
|
||||
mkFirefoxModule = import "${home-manager.outPath}/modules/programs/firefox/mkFirefoxModule.nix";
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
(mkFirefoxModule {
|
||||
inherit modulePath;
|
||||
name = applicationName;
|
||||
wrappedPackageName = "zen-${name}-unwrapped";
|
||||
unwrappedPackageName = "zen-${name}";
|
||||
visible = true;
|
||||
platforms = {
|
||||
linux = {
|
||||
vendorPath = ".zen";
|
||||
configPath = ".zen";
|
||||
};
|
||||
darwin = {
|
||||
configPath = "Library/Application Support/Zen";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
|
||||
config = lib.mkIf config.programs.zen-browser.enable {
|
||||
programs.zen-browser = {
|
||||
package = self.packages.${pkgs.stdenv.system}.${name};
|
||||
policies = {
|
||||
DisableAppUpdate = true;
|
||||
DisableTelemetry = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
113
package.nix
Normal file
113
package.nix
Normal file
@@ -0,0 +1,113 @@
|
||||
{
|
||||
name,
|
||||
variant,
|
||||
desktopFile,
|
||||
|
||||
lib,
|
||||
stdenv,
|
||||
config,
|
||||
wrapGAppsHook3,
|
||||
autoPatchelfHook,
|
||||
alsa-lib,
|
||||
curl,
|
||||
dbus-glib,
|
||||
gtk3,
|
||||
libXtst,
|
||||
libva,
|
||||
pciutils,
|
||||
pipewire,
|
||||
adwaita-icon-theme,
|
||||
writeText,
|
||||
patchelfUnstable, # have to use patchelfUnstable to support --no-clobber-old-sections
|
||||
applicationName ? "Zen Browser",
|
||||
}:
|
||||
|
||||
let
|
||||
binaryName = "zen-${name}";
|
||||
|
||||
mozillaPlatforms = {
|
||||
x86_64-linux = "linux-x86_64";
|
||||
aarch64-linux = "linux-aarch64";
|
||||
};
|
||||
|
||||
policies = {
|
||||
DisableAppUpdate = true;
|
||||
} // config.firefox.policies or { };
|
||||
|
||||
policiesJson = writeText "firefox-policies.json" (builtins.toJSON { inherit policies; });
|
||||
|
||||
pname = "zen-${name}-bin-unwrapped";
|
||||
in
|
||||
|
||||
stdenv.mkDerivation {
|
||||
inherit pname;
|
||||
inherit (variant) version;
|
||||
|
||||
src = builtins.fetchTarball { inherit (variant) url sha256; };
|
||||
desktopSrc = ./.;
|
||||
|
||||
nativeBuildInputs = [
|
||||
wrapGAppsHook3
|
||||
autoPatchelfHook
|
||||
patchelfUnstable
|
||||
];
|
||||
buildInputs = [
|
||||
gtk3
|
||||
adwaita-icon-theme
|
||||
alsa-lib
|
||||
dbus-glib
|
||||
libXtst
|
||||
];
|
||||
runtimeDependencies = [
|
||||
curl
|
||||
libva.out
|
||||
pciutils
|
||||
];
|
||||
appendRunpaths = [
|
||||
"${pipewire}/lib"
|
||||
];
|
||||
# Firefox uses "relrhack" to manually process relocations from a fixed offset
|
||||
patchelfFlags = [ "--no-clobber-old-sections" ];
|
||||
|
||||
preFixup = ''
|
||||
gappsWrapperArgs+=(
|
||||
--set MOZ_ALLOW_DOWNGRADE 1
|
||||
--set MOZ_APP_LAUNCHER zen
|
||||
)
|
||||
'';
|
||||
|
||||
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
|
||||
'';
|
||||
|
||||
passthru = {
|
||||
inherit applicationName binaryName;
|
||||
libName = "zen-bin-${variant.version}";
|
||||
ffmpegSupport = true;
|
||||
gssSupport = true;
|
||||
gtk3 = gtk3;
|
||||
};
|
||||
|
||||
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";
|
||||
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
|
||||
platforms = builtins.attrNames mozillaPlatforms;
|
||||
hydraPlatforms = [];
|
||||
mainProgram = binaryName;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user