biome: 1.9.2 -> 1.9.3
[NixPkgs.git] / pkgs / by-name / ra / radicle-explorer / package.nix
blob21c37268662bfadd31bae5b3c226b8675aab0028
2   radicle-httpd,
3   fetchFromGitHub,
4   fetchgit,
5   lib,
6   buildNpmPackage,
7   writeText,
8   jq,
9   runCommand,
12 let
13   # radicle-explorer bundles these freely available Emoji assets, but does not
14   # redistribute them.
15   twemojiAssets = fetchFromGitHub {
16     owner = "twitter";
17     repo = "twemoji";
18     rev = "v14.0.2";
19     hash = "sha256-YoOnZ5uVukzi/6bLi22Y8U5TpplPzB7ji42l+/ys5xI=";
20     meta.license = [ lib.licenses.cc-by-40 ];
21   };
23   mkPassthru = self: args: {
24     # radicle-explorer is configured through static build time configuration.
25     #
26     # Using this function you can override the this configuration, for example,
27     # to configure alternative preferred peers (which are shown in the UI by
28     # default).
29     #
30     # Example usage:
31     #
32     # ```nix
33     # radicle-explorer.withConfig {
34     #   preferredSeeds = [{
35     #     hostname = "seed.example.com";
36     #     port = 443;
37     #     scheme = "https";
38     #   }];
39     # }
40     # ```
41     withConfig =
42       config:
43       let
44         overrides = writeText "config-overrides.json" (builtins.toJSON config);
45         newConfig = runCommand "config.json" { } ''
46           ${jq}/bin/jq -s '.[0] * .[1]' ${(self args).src}/config/default.json ${overrides} > $out
47         '';
48       in
49       lib.fix (
50         final:
51         (self args).overrideAttrs (prev: {
52           preBuild = ''
53             ${prev.preBuild or ""}
54             cp ${newConfig} config/local.json
55           '';
57           passthru = prev.passthru // mkPassthru final args;
58         })
59       );
61     # By default, radicle-explorer includes a dependency that sends requests
62     # to a web analytics tracking service. Using this attribute yields a
63     # version of radicle-explorer with this dependency removed.
64     withoutTrackers = self {
65       patches = [ ./0001-remove-dependency-on-plausible.patch ];
66       npmDepsHash = "sha256:1hbrzfjkfc0q8qk03yi6qb9zqm57h7hnkn7fl0yxkrzbrljaljaz";
67     };
68   };
70 lib.fix (
71   self:
72   lib.makeOverridable (
73     {
74       npmDepsHash ? "sha256:0kw6rvqm0s21j1rss35idvgcrzzczfy6qi3323y385djw4ygk5xs",
75       patches ? [ ],
76     }@args:
77     buildNpmPackage {
78       pname = "radicle-explorer";
79       version = radicle-httpd.version;
80       inherit patches npmDepsHash;
82       # radicle-explorer uses the radicle-httpd API, and they are developed in the
83       # same repo. For this reason we pin the sources to each other, but due to
84       # radicle-httpd using a more limited sparse checkout we need to carry a
85       # separate hash.
86       src = fetchgit {
87         inherit (radicle-httpd.src) url rev;
88         hash = "sha256:09m13238h6j7g02r6332ihgyyzbjx90pgz14rz29pgv7936h6il8";
89       };
91       postPatch = ''
92         patchShebangs --build ./scripts
93         mkdir -p "public/twemoji"
94         cp -t public/twemoji -r -- ${twemojiAssets}/assets/svg/*
95         : >scripts/install-twemoji-assets
96       '';
98       dontConfigure = true;
99       doCheck = false;
101       installPhase = ''
102         runHook preInstall
103         mkdir -p "$out"
104         cp -r -t "$out" build/*
105         runHook postInstall
106       '';
108       passthru = mkPassthru self args;
110       meta = {
111         description = "Web frontend for Radicle";
112         longDescription = ''
113           Radicle Explorer is a web-frontend for Radicle which supports browsing
114           repositories, issues and patches on publicly available Radicle seeds.
116           This package builds the web interface, ready to be served by any web
117           server.
118         '';
120         homepage = "https://radicle.xyz";
121         license = lib.licenses.gpl3;
123         maintainers = with lib.maintainers; [
124           tazjin
125           lorenzleutgeb
126         ];
127       };
128     }
129   )
130 ) { }