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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
{ lib
, cargo-tauri
, cmake
, dbus
, fetchgit
, fetchYarnDeps
, freetype
, gsettings-desktop-schemas
, gtk3
, libsoup
, stdenv
, yarnConfigHook
, yarnBuildHook
, nodejs
, openssl
, pkg-config
, rustPlatform
, webkitgtk
, wrapGAppsHook3
, sqlite
}:
let
pname = "treedome";
version = "0.4.5";
src = fetchgit {
url = "https://codeberg.org/solver-orgz/treedome";
rev = version;
hash = "sha256-YkyjG/ee5WeO5OD4FZnWaqcOJO3YC0uQkbwGkCNBxC8=";
fetchLFS = true;
};
frontend-build = stdenv.mkDerivation (finalAttrs: {
pname = "treedome-ui";
inherit version src;
offlineCache = fetchYarnDeps {
yarnLock = "${src}/yarn.lock";
hash = "sha256-CrD/n8z5fJKkBKEcvpRHJaqXBt1gbON7VsuLb2JGu1A=";
};
nativeBuildInputs = [
yarnConfigHook
yarnBuildHook
nodejs
];
installPhase = ''
runHook preInstall
mkdir -p $out/dist
cp -r dist/** $out/dist
runHook postInstall
'';
});
in
rustPlatform.buildRustPackage {
inherit version pname src;
sourceRoot = "${src.name}/src-tauri";
cargoLock = {
lockFile = ./Cargo.lock;
outputHashes = {
"fix-path-env-0.0.0" = "sha256-ewE3CwqLC8dvi94UrQsWbp0mjmrzEJIGPDYtdmQ/sGs=";
};
};
env = {
VERGEN_GIT_DESCRIBE = version;
};
preConfigure = ''
mkdir -p dist
cp -R ${frontend-build}/dist/** dist
'';
# copy the frontend static resources to final build directory
# Also modify tauri.conf.json so that it expects the resources at the new location
postPatch = ''
substituteInPlace ./tauri.conf.json \
--replace '"distDir": "../dist",' '"distDir": "dist",' \
--replace '"beforeBuildCommand": "yarn run build",' '"beforeBuildCommand": "",'
'';
nativeBuildInputs = [
cmake
pkg-config
cargo-tauri
wrapGAppsHook3
];
buildInputs = [
dbus
openssl
freetype
libsoup
gtk3
webkitgtk
gsettings-desktop-schemas
sqlite
];
buildPhase = ''
runHook preBuild
cargo tauri build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out/bin/
mkdir -p $out/share/
cp target/release/bundle/deb/treedome_0.0.0_amd64/data/usr/bin/treedome $out/bin/treedome
cp -R target/release/bundle/deb/treedome_0.0.0_amd64/data/usr/share/** $out/share/
runHook postInstall
'';
# WEBKIT_DISABLE_COMPOSITING_MODE essential in NVIDIA + compositor https://github.com/NixOS/nixpkgs/issues/212064#issuecomment-1400202079
postFixup = ''
wrapProgram "$out/bin/treedome" \
--set WEBKIT_DISABLE_COMPOSITING_MODE 1
'';
meta = with lib; {
description = "Local-first, encrypted, note taking application organized in tree-like structures";
homepage = " https://codeberg.org/solver-orgz/treedome";
license = licenses.agpl3Only;
platforms = [ "x86_64-linux" ];
mainProgram = "treedome";
maintainers = with maintainers; [ tengkuizdihar ];
changelog = "https://codeberg.org/solver-orgz/treedome/releases/tag/${version}";
};
}
|