lol
1{ lib
2, stdenv
3, rustPlatform
4, fetchFromGitHub
5, substituteAll
6, just
7, pkg-config
8, wrapGAppsHook4
9, cairo
10, dbus
11, gdk-pixbuf
12, glib
13, graphene
14, gtk4
15, libadwaita
16, librclone
17, pango
18, rclone
19}:
20
21rustPlatform.buildRustPackage rec {
22 pname = "celeste";
23 version = "0.8.0";
24
25 src = fetchFromGitHub {
26 owner = "hwittenborn";
27 repo = "celeste";
28 rev = "v${version}";
29 hash = "sha256-U+2imF4hUDJAwwf/RFZXfOgTxA+O8c6C+CzQoEQreJw=";
30 };
31
32 cargoHash = "sha256-9DrJoXT/uD8y7y2r58DMuURSaic+TtlnPPbw/gq9jPA=";
33
34 postPatch = ''
35 pushd $cargoDepsCopy/librclone-sys
36 oldHash=$(sha256sum build.rs | cut -d " " -f 1)
37 patch -p2 < ${./librclone-path.patch}
38 substituteInPlace build.rs \
39 --subst-var-by librclone ${librclone}
40 substituteInPlace .cargo-checksum.json \
41 --replace $oldHash $(sha256sum build.rs | cut -d " " -f 1)
42 popd
43
44 substituteInPlace justfile \
45 --replace "{{ env_var('DESTDIR') }}/usr" "${placeholder "out"}"
46 # buildRustPackage takes care of installing the binary
47 sed -i "#/bin/celeste#d" justfile
48 '';
49
50 # Cargo.lock is outdated
51 preConfigure = ''
52 cargo update --offline
53 '';
54
55 RUSTC_BOOTSTRAP = 1;
56
57 nativeBuildInputs = [
58 just
59 pkg-config
60 rustPlatform.bindgenHook
61 wrapGAppsHook4
62 ];
63
64 buildInputs = [
65 cairo
66 dbus
67 gdk-pixbuf
68 glib
69 graphene
70 gtk4
71 libadwaita
72 librclone
73 pango
74 ];
75
76 preFixup = ''
77 gappsWrapperArgs+=(
78 --prefix PATH : "${lib.makeBinPath [ rclone ]}"
79 )
80 '';
81
82 postInstall = ''
83 just install
84 '';
85
86 meta = {
87 changelog = "https://github.com/hwittenborn/celeste/blob/${src.rev}/CHANGELOG.md";
88 description = "GUI file synchronization client that can sync with any cloud provider";
89 homepage = "https://github.com/hwittenborn/celeste";
90 license = lib.licenses.gpl3Only;
91 maintainers = with lib.maintainers; [ dotlambda ];
92 };
93}