ripasso-cursive: cosmetic changes (#361736)
[NixPkgs.git] / pkgs / by-name / fi / firefoxpwa / package.nix
blobd669709c228d307e7951c52c1844e8721201ffca
2   extraLibs ? [ ],
4   lib,
5   fetchFromGitHub,
6   installShellFiles,
7   makeWrapper,
8   rustPlatform,
10   cups,
11   ffmpeg,
12   firefox-unwrapped,
13   libcanberra-gtk3,
14   libglvnd,
15   libnotify,
16   libpulseaudio,
17   libva,
18   mesa,
19   nixosTests,
20   openssl,
21   pciutils,
22   pipewire,
23   pkg-config,
24   stdenv,
25   udev,
26   xorg,
29 rustPlatform.buildRustPackage rec {
30   pname = "firefoxpwa";
31   version = "2.13.1";
33   src = fetchFromGitHub {
34     owner = "filips123";
35     repo = "PWAsForFirefox";
36     rev = "v${version}";
37     hash = "sha256-eZNbM2T7Owu11b7NHqHExm3MYF+LfMGOYKOhZRxjZ28=";
38   };
40   sourceRoot = "${src.name}/native";
41   buildFeatures = [ "immutable-runtime" ];
43   cargoLock = {
44     lockFile = ./Cargo.lock;
45     outputHashes = {
46       "mime-0.4.0-a.0" = "sha256-LjM7LH6rL3moCKxVsA+RUL9lfnvY31IrqHa9pDIAZNE=";
47       "web_app_manifest-0.0.0" = "sha256-G+kRN8AEmAY1TxykhLmgoX8TG8y2lrv7SCRJlNy0QzA=";
48     };
49   };
51   preConfigure = ''
52     sed -i 's;version = "0.0.0";version = "${version}";' Cargo.toml
53     sed -zi 's;name = "firefoxpwa"\nversion = "0.0.0";name = "firefoxpwa"\nversion = "${version}";' Cargo.lock
54     sed -i $'s;DISTRIBUTION_VERSION = \'0.0.0\';DISTRIBUTION_VERSION = \'${version}\';' userchrome/profile/chrome/pwa/chrome.jsm
55   '';
57   nativeBuildInputs = [
58     installShellFiles
59     makeWrapper
60     pkg-config
61   ];
62   buildInputs = [ openssl ];
64   FFPWA_EXECUTABLES = ""; # .desktop entries generated without any store path references
65   FFPWA_SYSDATA = "${placeholder "out"}/share/firefoxpwa";
66   completions = "target/${stdenv.targetPlatform.config}/release/completions";
68   gtk_modules = map (x: x + x.gtkModule) [ libcanberra-gtk3 ];
69   libs =
70     let
71       libs =
72         lib.optionals stdenv.hostPlatform.isLinux [
73           cups
74           ffmpeg
75           libglvnd
76           libnotify
77           libpulseaudio
78           libva
79           mesa
80           pciutils
81           pipewire
82           udev
83           xorg.libXScrnSaver
84         ]
85         ++ gtk_modules
86         ++ extraLibs;
87     in
88     lib.makeLibraryPath libs + ":" + lib.makeSearchPathOutput "lib" "lib64" libs;
90   postInstall = ''
91     # Runtime
92     mkdir -p $out/share/firefoxpwa
93     cp -Lr ${firefox-unwrapped}/lib/firefox $out/share/firefoxpwa/runtime
94     chmod -R +w $out/share/firefoxpwa
96     # UserChrome
97     cp -r userchrome $out/share/firefoxpwa
99     # Runtime patching
100     FFPWA_USERDATA=$out/share/firefoxpwa $out/bin/firefoxpwa runtime patch
102     # Manifest
103     sed -i "s!/usr/libexec!$out/bin!" manifests/linux.json
104     install -Dm644 manifests/linux.json $out/lib/mozilla/native-messaging-hosts/firefoxpwa.json
106     installShellCompletion --cmd firefoxpwa \
107       --bash $completions/firefoxpwa.bash \
108       --fish $completions/firefoxpwa.fish \
109       --zsh $completions/_firefoxpwa
111     # AppStream Metadata
112     install -Dm644 packages/appstream/si.filips.FirefoxPWA.metainfo.xml $out/share/metainfo/si.filips.FirefoxPWA.metainfo.xml
113     install -Dm644 packages/appstream/si.filips.FirefoxPWA.svg $out/share/icons/hicolor/scalable/apps/si.filips.FirefoxPWA.svg
115     wrapProgram $out/bin/firefoxpwa \
116       --prefix FFPWA_SYSDATA : "$out/share/firefoxpwa" \
117       --prefix LD_LIBRARY_PATH : "$libs" \
118       --suffix-each GTK_PATH : "$gtk_modules"
120     wrapProgram $out/bin/firefoxpwa-connector \
121       --prefix FFPWA_SYSDATA : "$out/share/firefoxpwa" \
122       --prefix LD_LIBRARY_PATH : "$libs" \
123       --suffix-each GTK_PATH : "$gtk_modules"
124   '';
126   passthru.tests.firefoxpwa = nixosTests.firefoxpwa;
128   meta = {
129     description = "Tool to install, manage and use Progressive Web Apps (PWAs) in Mozilla Firefox (native component)";
130     longDescription = ''
131       Progressive Web Apps (PWAs) are web apps that use web APIs and features along
132       with progressive enhancement strategy to bring a native app-like user experience
133       to cross-platform web applications. Although Firefox supports many of Progressive
134       Web App APIs, it does not support functionality to install them as a standalone
135       system app with an app-like experience.
137       This project creates a custom modified Firefox runtime to allow websites to be
138       installed as standalone apps and provides a console tool and browser extension
139       to install, manage and use them.
141       This package contains only the native part of the PWAsForFirefox project. You
142       should also install the browser extension if you haven't already. You can download
143       it from the [Firefox Add-ons](https://addons.mozilla.org/firefox/addon/pwas-for-firefox/)
144       website.
146       To install the package on NixOS, you need to add the following options:
148       ```
149       programs.firefox.nativeMessagingHosts.packages = [ pkgs.firefoxpwa ];
150       environment.systemPackages = [ pkgs.firefoxpwa ];
151       ```
153       As it needs to be both in the `PATH` and in the `nativeMessagingHosts` to make it
154       possible for the extension to detect and use it.
155     '';
156     homepage = "https://pwasforfirefox.filips.si/";
157     changelog = "https://github.com/filips123/PWAsForFirefox/releases/tag/v${version}";
158     license = lib.licenses.mpl20;
159     platforms = lib.platforms.unix;
160     maintainers = with lib.maintainers; [
161       adamcstephens
162       camillemndn
163       pasqui23
164     ];
165     mainProgram = "firefoxpwa";
166   };