nixpkgs/pkgs/applications/networking/browsers/palemoon/bin.nix

225 lines
6.2 KiB
Nix

{ stdenv
, lib
, fetchzip
, alsa-lib
, autoPatchelfHook
, copyDesktopItems
, dbus-glib
, ffmpeg
, gtk2-x11
, withGTK3 ? true
, gtk3
, libglvnd
, libXt
, libpulseaudio
, makeDesktopItem
, wrapGAppsHook
, writeScript
, testers
}:
stdenv.mkDerivation (finalAttrs: {
pname = "palemoon-bin";
version = "33.0.2";
src = finalAttrs.passthru.sources."gtk${if withGTK3 then "3" else "2"}";
preferLocalBuild = true;
strictDeps = true;
nativeBuildInputs = [
autoPatchelfHook
copyDesktopItems
wrapGAppsHook
];
buildInputs = [
alsa-lib
dbus-glib
gtk2-x11
libXt
stdenv.cc.cc.lib
] ++ lib.optionals withGTK3 [
gtk3
];
desktopItems = [(makeDesktopItem rec {
name = "palemoon-bin";
desktopName = "Pale Moon Web Browser";
comment = "Browse the World Wide Web";
keywords = [
"Internet"
"WWW"
"Browser"
"Web"
"Explorer"
];
exec = "palemoon %u";
terminal = false;
type = "Application";
icon = "palemoon";
categories = [
"Network"
"WebBrowser"
];
mimeTypes = [
"text/html"
"text/xml"
"application/xhtml+xml"
"application/xml"
"application/rss+xml"
"application/rdf+xml"
"image/gif"
"image/jpeg"
"image/png"
"x-scheme-handler/http"
"x-scheme-handler/https"
"x-scheme-handler/ftp"
"x-scheme-handler/chrome"
"video/webm"
"application/x-xpinstall"
];
startupNotify = true;
startupWMClass = "Pale moon";
extraConfig = {
X-MultipleArgs = "false";
};
actions = {
"NewTab" = {
name = "Open new tab";
exec = "palemoon -new-tab https://start.palemoon.org";
};
"NewWindow" = {
name = "Open new window";
exec = "palemoon -new-window";
};
"NewPrivateWindow" = {
name = "Open new private window";
exec = "palemoon -private-window";
};
"ProfileManager" = {
name = "Open the Profile Manager";
exec = "palemoon --ProfileManager";
};
};
})];
dontConfigure = true;
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/{bin,lib/palemoon}
cp -R * $out/lib/palemoon/
ln -s $out/{lib/palemoon,bin}/palemoon
for iconpath in chrome/icons/default/default{16,32,48} icons/mozicon128; do
n=''${iconpath//[^0-9]/}
size=$n"x"$n
mkdir -p $out/share/icons/hicolor/$size/apps
ln -s $out/lib/palemoon/browser/"$iconpath".png $out/share/icons/hicolor/$size/apps/palemoon.png
done
# Disable built-in updater
# https://forum.palemoon.org/viewtopic.php?f=5&t=25073&p=197771#p197747
# > Please do not take this as permission to change, remove, or alter any other preferences as that is forbidden
# > without express permission according to the Pale Moon Redistribution License.
# > We are allowing this one and **ONLY** one exception in order to properly facilitate [package manager] repacks.
install -Dm644 ${./zz-disableUpdater.js} $out/lib/palemoon/browser/defaults/preferences/zz-disableUpdates.js
runHook postInstall
'';
dontWrapGApps = true;
preFixup = ''
# Make optional dependencies available
gappsWrapperArgs+=(
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [
ffmpeg
libglvnd
libpulseaudio
]}"
)
wrapGApp $out/lib/palemoon/palemoon
'';
passthru = {
sources = let
urlRegionVariants = buildVariant: map
(region: "https://rm-${region}.palemoon.org/release/palemoon-${finalAttrs.version}.linux-x86_64-${buildVariant}.tar.xz")
[
"eu"
"us"
];
in {
gtk3 = fetchzip {
urls = urlRegionVariants "gtk3";
hash = "sha256-Kahnwlj9PIWB24lvH6h9cZK459NW2Vo2g6ckuv0Ax48=";
};
gtk2 = fetchzip {
urls = urlRegionVariants "gtk2";
hash = "sha256-XOiLGmU8O96clUpnp/OkzXmWR1PJ2AdzbVFj6adbcvY=";
};
};
tests.version = testers.testVersion {
package = finalAttrs.finalPackage;
};
updateScript = writeScript "update-palemoon-bin" ''
#!/usr/bin/env nix-shell
#!nix-shell -i bash -p common-updater-scripts curl libxml2
set -eu -o pipefail
# Only release note announcement == finalized release
version="$(
curl -s 'http://www.palemoon.org/releasenotes.shtml' |
xmllint --html --xpath 'html/body/table/tbody/tr/td/h3/text()' - 2>/dev/null | head -n1 |
sed 's/v\(\S*\).*/\1/'
)"
for variant in gtk3 gtk2; do
# The script will not perform an update when the version attribute is up to date from previous platform run
# We need to clear it before each run
update-source-version palemoon-bin 0 "${lib.fakeHash}" --source-key="sources.$variant"
update-source-version palemoon-bin "$version" --source-key="sources.$variant"
done
'';
};
meta = with lib; {
homepage = "https://www.palemoon.org/";
description = "An Open Source, Goanna-based web browser focusing on efficiency and customization";
longDescription = ''
Pale Moon is an Open Source, Goanna-based web browser focusing on
efficiency and customization.
Pale Moon offers you a browsing experience in a browser completely built
from its own, independently developed source that has been forked off from
Firefox/Mozilla code a number of years ago, with carefully selected
features and optimizations to improve the browser's stability and user
experience, while offering full customization and a growing collection of
extensions and themes to make the browser truly your own.
'';
changelog = "https://repo.palemoon.org/MoonchildProductions/Pale-Moon/releases/tag/${version}_Release";
license = [
licenses.mpl20
{
fullName = "Pale Moon Redistribution License";
url = "https://www.palemoon.org/redist.shtml";
# TODO free, redistributable? Has strict limitations on what modifications may be done & shipped by packagers
}
];
maintainers = with maintainers; [ AndersonTorres OPNA2608 ];
sourceProvenance = with sourceTypes; [ binaryNativeCode ];
mainProgram = "palemoon";
platforms = [ "x86_64-linux" ];
hydraPlatforms = [];
};
})