about summary refs log tree commit diff
path: root/nixpkgs/pkgs/by-name/fi/firefoxpwa/package.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/by-name/fi/firefoxpwa/package.nix')
-rw-r--r--nixpkgs/pkgs/by-name/fi/firefoxpwa/package.nix133
1 files changed, 133 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/by-name/fi/firefoxpwa/package.nix b/nixpkgs/pkgs/by-name/fi/firefoxpwa/package.nix
new file mode 100644
index 000000000000..971d5ac16fde
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/fi/firefoxpwa/package.nix
@@ -0,0 +1,133 @@
+{ lib
+, rustPlatform
+, fetchFromGitHub
+, makeWrapper
+, pkg-config
+, installShellFiles
+, firefox-unwrapped
+, openssl
+, stdenv
+, udev
+, libva
+, mesa
+, libnotify
+, xorg
+, cups
+, pciutils
+, libcanberra-gtk3
+, extraLibs ? [ ]
+, nixosTests
+}:
+
+rustPlatform.buildRustPackage rec {
+  pname = "firefoxpwa";
+  version = "2.11.1";
+
+  src = fetchFromGitHub {
+    owner = "filips123";
+    repo = "PWAsForFirefox";
+    rev = "v${version}";
+    hash = "sha256-ZD/bTziVmHtQVKejzj+fUXVazCm2PaulS2NZjTribSk=";
+  };
+
+  sourceRoot = "${src.name}/native";
+  buildFeatures = [ "immutable-runtime" ];
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+    outputHashes = {
+      "mime-0.4.0-a.0" = "sha256-LjM7LH6rL3moCKxVsA+RUL9lfnvY31IrqHa9pDIAZNE=";
+      "web_app_manifest-0.0.0" = "sha256-G+kRN8AEmAY1TxykhLmgoX8TG8y2lrv7SCRJlNy0QzA=";
+    };
+  };
+
+  preConfigure = ''
+    sed -i 's;version = "0.0.0";version = "${version}";' Cargo.toml
+    sed -zi 's;name = "firefoxpwa"\nversion = "0.0.0";name = "firefoxpwa"\nversion = "${version}";' Cargo.lock
+    sed -i $'s;DISTRIBUTION_VERSION = \'0.0.0\';DISTRIBUTION_VERSION = \'${version}\';' userchrome/profile/chrome/pwa/chrome.jsm
+  '';
+
+  nativeBuildInputs = [ makeWrapper pkg-config installShellFiles ];
+  buildInputs = [ openssl ];
+
+  FFPWA_EXECUTABLES = ""; # .desktop entries generated without any store path references
+  FFPWA_SYSDATA = "${placeholder "out"}/share/firefoxpwa";
+  completions = "target/${stdenv.targetPlatform.config}/release/completions";
+
+  gtk_modules = map (x: x + x.gtkModule) [ libcanberra-gtk3 ];
+  libs = let libs = lib.optionals stdenv.isLinux [ udev libva mesa libnotify xorg.libXScrnSaver cups pciutils ] ++ gtk_modules ++ extraLibs; in lib.makeLibraryPath libs + ":" + lib.makeSearchPathOutput "lib" "lib64" libs;
+
+  postInstall = ''
+    # Runtime
+    mkdir -p $out/share/firefoxpwa
+    cp -Lr ${firefox-unwrapped}/lib/firefox $out/share/firefoxpwa/runtime
+    chmod -R +w $out/share/firefoxpwa
+
+    # UserChrome
+    cp -r userchrome $out/share/firefoxpwa
+
+    # Runtime patching
+    FFPWA_USERDATA=$out/share/firefoxpwa $out/bin/firefoxpwa runtime patch
+
+    # Manifest
+    sed -i "s!/usr/libexec!$out/bin!" manifests/linux.json
+    install -Dm644 manifests/linux.json $out/lib/mozilla/native-messaging-hosts/firefoxpwa.json
+
+    installShellCompletion --cmd firefoxpwa \
+      --bash $completions/firefoxpwa.bash \
+      --fish $completions/firefoxpwa.fish \
+      --zsh $completions/_firefoxpwa
+
+    # AppStream Metadata
+    install -Dm644 packages/appstream/si.filips.FirefoxPWA.metainfo.xml $out/share/metainfo/si.filips.FirefoxPWA.metainfo.xml
+    install -Dm644 packages/appstream/si.filips.FirefoxPWA.svg $out/share/icons/hicolor/scalable/apps/si.filips.FirefoxPWA.svg
+
+    wrapProgram $out/bin/firefoxpwa \
+      --prefix FFPWA_SYSDATA : "$out/share/firefoxpwa" \
+      --prefix LD_LIBRARY_PATH : "$libs" \
+      --suffix-each GTK_PATH : "$gtk_modules"
+
+    wrapProgram $out/bin/firefoxpwa-connector \
+      --prefix FFPWA_SYSDATA : "$out/share/firefoxpwa" \
+      --prefix LD_LIBRARY_PATH : "$libs" \
+      --suffix-each GTK_PATH : "$gtk_modules"
+  '';
+
+  passthru.tests.firefoxpwa = nixosTests.firefoxpwa;
+
+  meta = with lib; {
+    description = "A tool to install, manage and use Progressive Web Apps (PWAs) in Mozilla Firefox (native component)";
+    longDescription = ''
+      Progressive Web Apps (PWAs) are web apps that use web APIs and features along
+      with progressive enhancement strategy to bring a native app-like user experience
+      to cross-platform web applications. Although Firefox supports many of Progressive
+      Web App APIs, it does not support functionality to install them as a standalone
+      system app with an app-like experience.
+
+      This project creates a custom modified Firefox runtime to allow websites to be
+      installed as standalone apps and provides a console tool and browser extension
+      to install, manage and use them.
+
+      This package contains only the native part of the PWAsForFirefox project. You
+      should also install the browser extension if you haven't already. You can download
+      it from the [Firefox Add-ons](https://addons.mozilla.org/firefox/addon/pwas-for-firefox/)
+      website.
+
+      To install the package on NixOS, you need to add the following options:
+
+      ```
+      programs.firefox.nativeMessagingHosts.packages = [ pkgs.firefoxpwa ];
+      environment.systemPackages = [ pkgs.firefoxpwa ];
+      ```
+
+      As it needs to be both in the `PATH` and in the `nativeMessagingHosts` to make it
+      possible for the extension to detect and use it.
+    '';
+    homepage = "https://pwasforfirefox.filips.si/";
+    changelog = "https://github.com/filips123/PWAsForFirefox/releases/tag/v${version}";
+    license = licenses.mpl20;
+    platforms = platforms.unix;
+    maintainers = with maintainers; [ camillemndn pasqui23 ];
+    mainProgram = "firefoxpwa";
+  };
+}