summaryrefslogtreecommitdiff
path: root/pkgs/fetchFirefoxAddon/package.nix
blob: 283e92cef6300e9e1a5f8c8f347ed233a2f27572 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
{
  lib,
  stdenvNoCC,
  fetchurl,
}:

lib.makeOverridable (
  lib.fetchers.withNormalizedHash { } (
    {
      url,
      addonId ? null,
      addonSlug ? args.pname or null,
      firefoxVendor ? "mozilla",
      # Keep in sync with https://github.com/nix-community/home-manager/blob/e1ae908bcc30af792b0bb0a52e53b03d2577255e/modules/programs/firefox/mkFirefoxModule.nix#L52-L54
      extensionPath ? "extensions/{ec8030f7-c20a-464f-9b0e-13a3a9e97384}",
      outputHash,
      outputHashAlgo,
      ...
    }@args:

    assert lib.assertMsg (
      addonId != null || addonSlug != null
    ) "One of `addonId` or `addonSlug` must be passed";

    let
      addonRef = if addonId != null then addonId else addonSlug;

      knownArgs = [
        "url"
        "addonId"
        "firefoxVendor"
        "extensionPath"
        "outputHash"
        "outputHashAlgo"
      ];
    in

    stdenvNoCC.mkDerivation (
      finalAttrs:
      lib.removeAttrs args knownArgs
      // {
        name =
          "firefox-addons"
          + lib.optionalString (
            finalAttrs ? "pname" && finalAttrs ? "version"
          ) "-${finalAttrs.pname}-${finalAttrs.version}";

        src = fetchurl {
          inherit url outputHash outputHashAlgo;
        };

        dontConfigure = args.dontConfigure or true;
        dontBuild = args.dontBuild or true;

        installPhase =
          args.installPhase or ''
            runHook preInstall

            extensionDir=$out/share/${firefoxVendor}/${extensionPath}
            install -d $extensionDir
            install -Dm644 $src $extensionDir

            runHook postInstall
          '';

        preferLocalBuild = args.preferLocalBuild or true;
        impureEnvVars = lib.fetchers.proxyImpureEnvVars;

        passthru = args.passthru or { } // {
          inherit
            addonId
            addonRef
            addonSlug
            extensionPath
            firefoxVendor
            ;
        };

        meta = args.meta or { } // {
          position = builtins.unsafeGetAttrPos "url" args;
        };
      }
    )
  )
)