diff --git a/doc/release-notes/rl-2511.section.md b/doc/release-notes/rl-2511.section.md index 494193a145f3..3a09d70d93a5 100644 --- a/doc/release-notes/rl-2511.section.md +++ b/doc/release-notes/rl-2511.section.md @@ -120,6 +120,8 @@ - `python3Packages.triton` no longer takes an `enableRocm` argument and supports ROCm in all build configurations via runtime binding. In most cases no action will be needed. If triton is unable to find the HIP SDK add `rocmPackages.clr` as a build input or set the environment variable `HIP_PATH="${rocmPackages.clr}"`. +- `floorp` has been replaced with a binary build, available as `floorp-bin`. Due to major changes in the upstream project structure and build system, building Floorp from source has become unfeasible. No configuration or state migration is necessary. + - `inspircd` has been updated to the v4 release series. Please refer to the upstream documentation for [general information](https://docs.inspircd.org/4/overview/#v4-overview) and a list of [breaking changes](https://docs.inspircd.org/4/breaking-changes/). - `lima` package now only includes the guest agent for the host's architecture by default. If your guest VM's architecture differs from your Lima host's, you'll need to enable the `lima-additional-guestagents` package by setting `withAdditionalGuestAgents = true` when overriding lima with this input. diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 70de75dc6355..46fa3160cb69 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -559,10 +559,6 @@ in flannel = runTestOn [ "x86_64-linux" ] ./flannel.nix; flaresolverr = runTest ./flaresolverr.nix; flood = runTest ./flood.nix; - floorp = runTest { - imports = [ ./firefox.nix ]; - _module.args.firefoxPackage = pkgs.floorp; - }; fluent-bit = runTest ./fluent-bit.nix; fluentd = runTest ./fluentd.nix; fluidd = runTest ./fluidd.nix; diff --git a/pkgs/applications/networking/browsers/floorp/default.nix b/pkgs/applications/networking/browsers/floorp/default.nix deleted file mode 100644 index 8587583633e8..000000000000 --- a/pkgs/applications/networking/browsers/floorp/default.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - stdenv, - lib, - fetchFromGitHub, - buildMozillaMach, - nixosTests, -}: - -( - (buildMozillaMach rec { - pname = "floorp"; - packageVersion = "11.30.0"; - applicationName = "Floorp"; - binaryName = "floorp"; - branding = "browser/branding/official"; - requireSigning = false; - allowAddonSideload = true; - - # Must match the contents of `browser/config/version.txt` in the source tree - version = "128.14.0"; - - src = fetchFromGitHub { - owner = "Floorp-Projects"; - repo = "Floorp"; - fetchSubmodules = true; - rev = "v${packageVersion}"; - hash = "sha256-4IAN0S9JWjaGXtnRUJz3HqUm+ZWL7KmryLu8ojSXiqg="; - }; - - extraConfigureFlags = [ - "--with-app-basename=${applicationName}" - "--with-unsigned-addon-scopes=app,system" - "--enable-proxy-bypass-protection" - ]; - - extraPostPatch = '' - # Fix .desktop files for PWAs generated by Floorp - # The executable path returned by Services.dirsvc.get() is absolute and - # thus is the full /nix/store/[..] path. To avoid breaking PWAs with each - # update, rely on `floorp` being in $PATH, as before. - substituteInPlace floorp/browser/base/content/modules/ssb/LinuxSupport.mjs \ - --replace-fail 'Services.dirsvc.get("XREExeF",Ci.nsIFile).path' '"floorp"' - ''; - - updateScript = ./update.sh; - - meta = { - description = "Fork of Firefox that seeks balance between versatility, privacy and web openness"; - homepage = "https://floorp.app/"; - maintainers = with lib.maintainers; [ christoph-heiss ]; - platforms = lib.platforms.unix; - broken = stdenv.buildPlatform.is32bit; - # since Firefox 60, build on 32-bit platforms fails with "out of memory". - # not in `badPlatforms` because cross-compilation on 64-bit machine might work. - maxSilent = 14400; # 4h, double the default of 7200s (c.f. #129212, #129115) - license = lib.licenses.mpl20; - mainProgram = "floorp"; - }; - tests = { - inherit (nixosTests) floorp; - }; - }).override - { - # Upstream build configuration can be found at - # .github/workflows/src/linux/shared/mozconfig_linux_base - privacySupport = true; - webrtcSupport = true; - enableOfficialBranding = false; - geolocationSupport = true; - # https://github.com/NixOS/nixpkgs/issues/418473 - ltoSupport = false; - } -).overrideAttrs - (prev: { - MOZ_DATA_REPORTING = ""; - MOZ_TELEMETRY_REPORTING = ""; - }) diff --git a/pkgs/applications/networking/browsers/floorp/update.sh b/pkgs/applications/networking/browsers/floorp/update.sh deleted file mode 100755 index 4f367f29e776..000000000000 --- a/pkgs/applications/networking/browsers/floorp/update.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p curl nix-prefetch-github jq gnused - -set -e - -owner=Floorp-Projects -repo=Floorp -dirname="$(dirname "$0")" - -updateVersion() { - sed -i "s/packageVersion = \"[0-9.]*\";/packageVersion = \"$1\";/g" "$dirname/default.nix" -} - -updateBaseVersion() { - local base - base=$(curl -s "https://raw.githubusercontent.com/$owner/$repo/v$1/browser/config/version.txt") - sed -i "s/version = \"[0-9.]*\";/version = \"$base\";/g" "$dirname/default.nix" -} - -updateHash() { - local hash - hash=$(nix-prefetch-github --fetch-submodules --rev "v$1" $owner $repo | jq -r .hash) - sed -i "s|hash = \"[a-zA-Z0-9\/+-=]*\";|hash = \"$hash\";|g" "$dirname/default.nix" -} - -currentVersion=$(cd "$dirname" && nix eval --raw -f ../../../../.. floorp.version) - -latestTag=$(curl -s https://api.github.com/repos/Floorp-Projects/Floorp/releases/latest | jq -r ".tag_name") -latestVersion="$(expr "$latestTag" : 'v\(.*\)')" - -if [[ "$currentVersion" == "$latestVersion" ]]; then - echo "Floorp is up-to-date: ${currentVersion}" - exit 0 -fi - -updateVersion "$latestVersion" -updateBaseVersion "$latestVersion" -updateHash "$latestVersion" diff --git a/pkgs/by-name/fl/floorp-bin-unwrapped/package.nix b/pkgs/by-name/fl/floorp-bin-unwrapped/package.nix new file mode 100644 index 000000000000..10514ec51d32 --- /dev/null +++ b/pkgs/by-name/fl/floorp-bin-unwrapped/package.nix @@ -0,0 +1,139 @@ +{ + lib, + stdenv, + fetchurl, + wrapGAppsHook3, + autoPatchelfHook, + alsa-lib, + curl, + dbus-glib, + gtk3, + libXtst, + libva, + pciutils, + pipewire, + adwaita-icon-theme, + patchelfUnstable, # have to use patchelfUnstable to support --no-clobber-old-sections + undmg, + writeText, +}: + +let + inherit (lib.importJSON ./sources.json) version sources; + + binaryName = "floorp"; + policies = { + DisableAppUpdate = true; + }; + + policiesJson = writeText "floorp-policies.json" (builtins.toJSON { inherit policies; }); + +in +stdenv.mkDerivation (finalAttrs: { + pname = "floorp-bin-unwrapped"; + inherit version; + + src = fetchurl { + inherit (sources.${stdenv.hostPlatform.system}) url sha256; + }; + + sourceRoot = lib.optional stdenv.hostPlatform.isDarwin "."; + + nativeBuildInputs = [ + wrapGAppsHook3 + ] + ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [ + autoPatchelfHook + patchelfUnstable + ] + ++ lib.optionals stdenv.hostPlatform.isDarwin [ + undmg + ]; + + buildInputs = lib.optionals (!stdenv.hostPlatform.isDarwin) [ + gtk3 + adwaita-icon-theme + alsa-lib + dbus-glib + libXtst + ]; + + runtimeDependencies = [ + curl + pciutils + ] + ++ lib.optionals (!stdenv.hostPlatform.isDarwin) [ + libva.out + ]; + + appendRunpaths = lib.optionals (!stdenv.hostPlatform.isDarwin) [ + "${pipewire}/lib" + ]; + + # Firefox uses "relrhack" to manually process relocations from a fixed offset + patchelfFlags = [ "--no-clobber-old-sections" ]; + + # don't break code signing + dontFixup = stdenv.hostPlatform.isDarwin; + + installPhase = '' + runHook preInstall + '' + + ( + if stdenv.hostPlatform.isDarwin then + '' + # it's disabled, so remove these unused files + rm -v \ + Floorp.app/Contents/Resources/updater.ini \ + Floorp.app/Contents/Library/LaunchServices/org.mozilla.updater + rm -rvf Floorp.app/Contents/MacOS/updater.app + + mkdir -p $out/Applications + mv Floorp.app $out/Applications/ + '' + else + '' + # it's disabled, so remove these unused files + rm -v updater icons/updater.png updater.ini update-settings.ini + + mkdir -p "$prefix/lib" "$prefix/bin" + cp -r . "$prefix/lib/floorp-bin-${finalAttrs.version}" + ln -s "$prefix/lib/floorp-bin-${finalAttrs.version}/floorp" "$out/bin/${binaryName}" + + # See: https://github.com/mozilla/policy-templates/blob/master/README.md + mkdir -p "$out/lib/floorp-bin-${finalAttrs.version}/distribution"; + ln -s ${policiesJson} "$out/lib/floorp-bin-${finalAttrs.version}/distribution/policies.json"; + '' + ) + + '' + runHook postInstall + ''; + + passthru = { + inherit binaryName; + applicationName = "Floorp"; + libName = "floorp-bin-${finalAttrs.version}"; + ffmpegSupport = true; + gssSupport = true; + gtk3 = gtk3; + updateScript = ./update.sh; + }; + + meta = { + changelog = "https://blog.floorp.app/en/release/${finalAttrs.version}.html"; + description = "Fork of Firefox that seeks balance between versatility, privacy and web openness"; + homepage = "https://floorp.app/"; + # https://github.com/Floorp-Projects/Floorp#-floorp-license-notices- + license = with lib.licenses; [ + mpl20 + mit + ]; + platforms = builtins.attrNames sources; + hydraPlatforms = [ ]; + maintainers = with lib.maintainers; [ + christoph-heiss + ]; + mainProgram = "floorp"; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + }; +}) diff --git a/pkgs/by-name/fl/floorp-bin-unwrapped/sources.json b/pkgs/by-name/fl/floorp-bin-unwrapped/sources.json new file mode 100644 index 000000000000..1d0457e61e1c --- /dev/null +++ b/pkgs/by-name/fl/floorp-bin-unwrapped/sources.json @@ -0,0 +1,21 @@ +{ + "version": "12.1.4", + "sources": { + "aarch64-linux": { + "url": "https://github.com/Floorp-Projects/Floorp/releases/download/v12.1.4/floorp-linux-aarch64.tar.xz", + "sha256": "3221bc1299edacf061f0c66a3543532fd67ef0b7f998f4c41b4c7f062f79685b" + }, + "x86_64-linux": { + "url": "https://github.com/Floorp-Projects/Floorp/releases/download/v12.1.4/floorp-linux-amd64.tar.xz", + "sha256": "86a5d86a52f3778ca3d3b7b250c3e36820ab792232e8dd8cd4482586e9c1f2f1" + }, + "aarch64-darwin": { + "url": "https://github.com/Floorp-Projects/Floorp/releases/download/v12.1.4/floorp-macOS-universal.dmg", + "sha256": "482723722b6bab68ce5353d49502b1db6d3d43d3f918de273ef8de77c5d7f03a" + }, + "x86_64-darwin": { + "url": "https://github.com/Floorp-Projects/Floorp/releases/download/v12.1.4/floorp-macOS-universal.dmg", + "sha256": "482723722b6bab68ce5353d49502b1db6d3d43d3f918de273ef8de77c5d7f03a" + } + } +} diff --git a/pkgs/by-name/fl/floorp-bin-unwrapped/update.sh b/pkgs/by-name/fl/floorp-bin-unwrapped/update.sh new file mode 100755 index 000000000000..5be8138e7af5 --- /dev/null +++ b/pkgs/by-name/fl/floorp-bin-unwrapped/update.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl jq gnused gawk + +set -e + +dirname="$(dirname "$0")" +currentVersion=$(nix eval --raw -f . floorp-bin-unwrapped.version) + +owner=Floorp-Projects +repo=Floorp + +release=$(curl -s "https://api.github.com/repos/$owner/$repo/releases/latest") + +latestTag=$(jq -r ".tag_name" <<<"$release") +latestVersion="$(expr "$latestTag" : 'v\(.*\)')" + +if [[ "$currentVersion" == "$latestVersion" ]]; then + echo "Floorp is up-to-date: ${currentVersion}" + exit 0 +fi + +jq ' + { + version: .tag_name[1:], + sources: ( + .assets + | map( + select(.name | (endswith(".tar.xz") or endswith(".dmg"))) + | {url: .browser_download_url, sha256: (.digest | split(":").[1])} + ) + | map( + if .url | contains("linux-aarch64") then + {key: "aarch64-linux", value: .} + elif .url | contains("linux-amd64") then + {key: "x86_64-linux", value: .} + elif .url | contains("macOS-universal") then + [{key: "aarch64-darwin", value: .}, {key: "x86_64-darwin", value: .}] + else null end + ) + | flatten + | from_entries + ) + } +' <<<"$release" > "$dirname/sources.json" diff --git a/pkgs/by-name/fl/floorp-bin/package.nix b/pkgs/by-name/fl/floorp-bin/package.nix new file mode 100644 index 000000000000..0928354e1a39 --- /dev/null +++ b/pkgs/by-name/fl/floorp-bin/package.nix @@ -0,0 +1,8 @@ +{ + wrapFirefox, + floorp-bin-unwrapped, +}: + +wrapFirefox floorp-bin-unwrapped { + pname = "floorp-bin"; +} diff --git a/pkgs/top-level/aliases.nix b/pkgs/top-level/aliases.nix index c0a8bebea550..57c8b5c2fd42 100644 --- a/pkgs/top-level/aliases.nix +++ b/pkgs/top-level/aliases.nix @@ -912,6 +912,8 @@ mapAliases { flashrom-stable = flashprog; # Added 2024-03-01 flatbuffers_2_0 = flatbuffers; # Added 2022-05-12 flatcam = throw "flatcam has been removed because it is unmaintained since 2022 and doesn't support Python > 3.10"; # Added 2025-01-25 + floorp = throw "floorp has been replaced with floorp-bin, as building from upstream sources has become unfeasible starting with version 12.x"; # Added 2025-09-06 + floorp-unwrapped = throw "floorp-unwrapped has been replaced with floorp-bin-unwrapped, as building from upstream sources has become unfeasible starting with version 12.x"; # Added 2025-09-06 flow-editor = flow-control; # Added 2025-03-05 flut-renamer = throw "flut-renamer is unmaintained and has been removed"; # Added 2025-08-26 flutter313 = throw "flutter313 has been removed because it isn't updated anymore, and no packages in nixpkgs use it. If you still need it, use flutter.mkFlutter to get a custom version"; # Added 2024-10-05 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 0b0531700509..2b7ee0a96cd5 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11632,18 +11632,6 @@ with pkgs; ]; }; - floorp-unwrapped = import ../applications/networking/browsers/floorp { - inherit - stdenv - lib - fetchFromGitHub - buildMozillaMach - nixosTests - ; - }; - - floorp = wrapFirefox floorp-unwrapped { }; - formiko = with python3Packages; callPackage ../applications/editors/formiko {