nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 makeWrapper,
5 makeDesktopItem,
6 pnpm,
7 pnpmConfigHook,
8 nodejs,
9 electron,
10 unstableGitUpdater,
11 fetchFromGitHub,
12 fetchPnpmDeps,
13 vikunja,
14}:
15
16let
17 executableName = "vikunja-desktop";
18 version = "0.24.6";
19 src = fetchFromGitHub {
20 owner = "go-vikunja";
21 repo = "vikunja";
22 rev = "v${version}";
23 hash = "sha256-yUUZ6gPI2Bte36HzfUE6z8B/I1NlwWDSJA2pwkuzd34=";
24 };
25in
26stdenv.mkDerivation (finalAttrs: {
27 name = "vikunja-desktop-${version}";
28 pname = finalAttrs.name;
29 inherit version src;
30
31 sourceRoot = "${finalAttrs.src.name}/desktop";
32 pnpmInstallFlags = [ "--shamefully-hoist" ];
33
34 pnpmDeps = fetchPnpmDeps {
35 inherit (finalAttrs)
36 pname
37 version
38 src
39 sourceRoot
40 pnpmInstallFlags
41 ;
42 fetcherVersion = 1;
43 hash = "sha256-orFwjmS1KF82JiQa+BE92YOtKsnYiKVzLXrpjtbe1z8=";
44 };
45
46 env = {
47 ELECTRON_SKIP_BINARY_DOWNLOAD = 1;
48 };
49
50 nativeBuildInputs = [
51 makeWrapper
52 nodejs
53 pnpm
54 pnpmConfigHook
55 vikunja.passthru.frontend
56 ];
57
58 buildPhase = ''
59 runHook preBuild
60
61 sed -i "s/\$${version}/${version}/g" package.json
62 sed -i "s/\"version\": \".*\"/\"version\": \"${version}\"/" package.json
63 ln -s '${vikunja.passthru.frontend}' frontend
64 pnpm run pack -c.electronDist="${electron.dist}" -c.electronVersion="${electron.version}"
65
66 runHook postBuild
67 '';
68
69 doCheck = false;
70
71 installPhase = ''
72 runHook preInstall
73
74 mkdir -p "$out/share/lib/vikunja-desktop"
75 cp -r ./dist/*-unpacked/{locales,resources{,.pak}} "$out/share/lib/vikunja-desktop"
76 cp -r ./node_modules "$out/share/lib/vikunja-desktop/resources"
77
78 install -Dm644 "build/icon.png" "$out/share/icons/hicolor/256x256/apps/vikunja-desktop.png"
79
80 # use makeShellWrapper (instead of the makeBinaryWrapper provided by wrapGAppsHook3) for proper shell variable expansion
81 # see https://github.com/NixOS/nixpkgs/issues/172583
82 makeShellWrapper "${lib.getExe electron}" "$out/bin/vikunja-desktop" \
83 --add-flags "$out/share/lib/vikunja-desktop/resources/app.asar" \
84 "''${gappsWrapperArgs[@]}" \
85 --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=UseOzonePlatform,WaylandWindowDecorations,WebRTCPipeWireCapturer}}" \
86 --set-default ELECTRON_IS_DEV 0 \
87 --inherit-argv0
88
89 runHook postInstall
90 '';
91
92 # Do not attempt generating a tarball for vikunja-frontend again.
93 distPhase = ''
94 true
95 '';
96
97 passthru.updateScript = unstableGitUpdater {
98 url = "${src.meta.homepage}.git";
99 };
100
101 # The desktop item properties should be kept in sync with data from upstream:
102 desktopItem = makeDesktopItem {
103 name = "vikunja-desktop";
104 exec = executableName;
105 icon = "vikunja";
106 desktopName = "Vikunja Desktop";
107 genericName = "To-Do list app";
108 comment = finalAttrs.meta.description;
109 categories = [
110 "ProjectManagement"
111 "Office"
112 ];
113 };
114
115 meta = with lib; {
116 description = "Desktop App of the Vikunja to-do list app";
117 homepage = "https://vikunja.io/";
118 license = licenses.gpl3Plus;
119 maintainers = with lib.maintainers; [ kolaente ];
120 mainProgram = "vikunja-desktop";
121 inherit (electron.meta) platforms;
122 };
123})