anvil-editor: init at 0.4
[NixPkgs.git] / pkgs / servers / homepage-dashboard / default.nix
blob96c58a598187d1b215ab0e4b29a8910d57bbf10f
2   buildNpmPackage,
3   fetchFromGitHub,
4   nodePackages,
5   python3,
6   stdenv,
7   cctools,
8   IOKit,
9   lib,
10   nixosTests,
11   enableLocalIcons ? false,
12   nix-update-script,
13   git,
15 let
16   dashboardIcons = fetchFromGitHub {
17     owner = "walkxcode";
18     repo = "dashboard-icons";
19     rev = "be82e22c418f5980ee2a13064d50f1483df39c8c"; # Until 2024-07-21
20     hash = "sha256-z69DKzKhCVNnNHjRM3dX/DD+WJOL9wm1Im1nImhBc9Y=";
21   };
23   installLocalIcons = ''
24     mkdir -p $out/share/homepage/public/icons
25     cp ${dashboardIcons}/png/* $out/share/homepage/public/icons
26     cp ${dashboardIcons}/svg/* $out/share/homepage/public/icons
27     cp ${dashboardIcons}/LICENSE $out/share/homepage/public/icons/
28   '';
30 buildNpmPackage rec {
31   pname = "homepage-dashboard";
32   version = "0.9.10";
34   src = fetchFromGitHub {
35     owner = "gethomepage";
36     repo = "homepage";
37     rev = "v${version}";
38     hash = "sha256-qDbYgitMbjOMIZUyQuFSNAyb/ZRAcStm/jDrsIutKno=";
39   };
41   npmDepsHash = "sha256-gAti4y4Ios7XjJ3nVOhzjwPzcAC2upODZ64qQjx17JE=";
43   preBuild = ''
44     mkdir -p config
45   '';
47   postBuild = ''
48     # Add a shebang to the server js file, then patch the shebang.
49     sed -i '1s|^|#!/usr/bin/env node\n|' .next/standalone/server.js
50     patchShebangs .next/standalone/server.js
51   '';
53   nativeBuildInputs = [ git ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ cctools ];
55   buildInputs = [
56     nodePackages.node-gyp-build
57   ] ++ lib.optionals stdenv.hostPlatform.isDarwin [ IOKit ];
59   env.PYTHON = "${python3}/bin/python";
61   installPhase = ''
62     runHook preInstall
64     mkdir -p $out/{share,bin}
66     cp -r .next/standalone $out/share/homepage/
67     cp -r public $out/share/homepage/public
69     mkdir -p $out/share/homepage/.next
70     cp -r .next/static $out/share/homepage/.next/static
72     chmod +x $out/share/homepage/server.js
74     # This patch must be applied here, as it's patching the `dist` directory
75     # of NextJS. Without this, homepage-dashboard errors when trying to
76     # write its prerender cache.
77     #
78     # This patch ensures that the cache implementation respects the env
79     # variable `HOMEPAGE_CACHE_DIR`, which is set by default in the
80     # wrapper below.
81     pushd $out
82     git apply ${./prerender_cache_path.patch}
83     popd
85     makeWrapper $out/share/homepage/server.js $out/bin/homepage \
86       --set-default PORT 3000 \
87       --set-default HOMEPAGE_CONFIG_DIR /var/lib/homepage-dashboard \
88       --set-default HOMEPAGE_CACHE_DIR /var/cache/homepage-dashboard
90     ${if enableLocalIcons then installLocalIcons else ""}
92     runHook postInstall
93   '';
95   doDist = false;
97   passthru = {
98     tests = {
99       inherit (nixosTests) homepage-dashboard;
100     };
101     updateScript = nix-update-script { };
102   };
104   meta = {
105     description = "Highly customisable dashboard with Docker and service API integrations";
106     changelog = "https://github.com/gethomepage/homepage/releases/tag/v${version}";
107     mainProgram = "homepage";
108     homepage = "https://gethomepage.dev";
109     license = lib.licenses.gpl3;
110     maintainers = with lib.maintainers; [ jnsgruk ];
111     platforms = lib.platforms.all;
112     broken = stdenv.hostPlatform.isDarwin;
113   };