celeste: init at 0.4.6

Changed files
+163
pkgs
applications
top-level
+114
pkgs/applications/networking/sync/celeste/default.nix
···
+
{ lib
+
, stdenv
+
, rust
+
, rustPlatform
+
, fetchFromGitHub
+
, substituteAll
+
, fetchpatch
+
, pkg-config
+
, wrapGAppsHook4
+
, cairo
+
, gdk-pixbuf
+
, glib
+
, graphene
+
, gtk3
+
, gtk4
+
, libadwaita
+
, libappindicator-gtk3
+
, librclone
+
, pango
+
, rclone
+
}:
+
+
let
+
# https://github.com/trevyn/librclone/pull/8
+
librclone-mismatched-types-patch = fetchpatch {
+
name = "use-c_char-to-be-platform-independent.patch";
+
url = "https://github.com/trevyn/librclone/commit/91fdf3fa5f5eea0dfd06981ba72e09034974fdad.patch";
+
hash = "sha256-8YDyUNP/ISP5jCliT6UCxZ89fdRFud+6u6P29XdPy58=";
+
};
+
in rustPlatform.buildRustPackage rec {
+
pname = "celeste";
+
version = "0.4.6";
+
+
src = fetchFromGitHub {
+
owner = "hwittenborn";
+
repo = "celeste";
+
rev = "v${version}";
+
hash = "sha256-VEyQlycpqsGKqtV/QvqBfVHqQhl/H6HsWPRDBtQO3qM=";
+
};
+
+
cargoHash = "sha256-fqt0XklJJAXi2jO7eo0tIwRo2Y3oM56qYwoaelKY8iU=";
+
+
patches = [
+
(substituteAll {
+
src = ./target-dir.patch;
+
rustTarget = rust.toRustTarget stdenv.hostPlatform;
+
})
+
];
+
+
postPatch = ''
+
pushd $cargoDepsCopy/librclone-sys
+
oldHash=$(sha256sum build.rs | cut -d " " -f 1)
+
patch -p2 < ${./librclone-path.patch}
+
substituteInPlace build.rs \
+
--subst-var-by librclone ${librclone}
+
substituteInPlace .cargo-checksum.json \
+
--replace $oldHash $(sha256sum build.rs | cut -d " " -f 1)
+
popd
+
pushd $cargoDepsCopy/librclone
+
oldHash=$(sha256sum src/lib.rs | cut -d " " -f 1)
+
patch -p1 < ${librclone-mismatched-types-patch}
+
substituteInPlace .cargo-checksum.json \
+
--replace $oldHash $(sha256sum src/lib.rs | cut -d " " -f 1)
+
popd
+
'';
+
+
# Cargo.lock is outdated
+
preConfigure = ''
+
cargo update --offline
+
'';
+
+
# We need to build celeste-tray first because celeste/src/launch.rs reads that file at build time.
+
# Upstream does the same: https://github.com/hwittenborn/celeste/blob/765dfa2/justfile#L1-L3
+
cargoBuildFlags = [ "--bin" "celeste-tray" ];
+
postConfigure = ''
+
cargoBuildHook
+
cargoBuildFlags=
+
'';
+
+
RUSTC_BOOTSTRAP = 1;
+
+
nativeBuildInputs = [
+
pkg-config
+
rustPlatform.bindgenHook
+
wrapGAppsHook4
+
];
+
+
buildInputs = [
+
cairo
+
gdk-pixbuf
+
glib
+
graphene
+
gtk3
+
gtk4
+
libadwaita
+
librclone
+
pango
+
];
+
+
preFixup = ''
+
gappsWrapperArgs+=(
+
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libappindicator-gtk3 ]}"
+
--prefix PATH : "${lib.makeBinPath [ rclone ]}"
+
)
+
'';
+
+
meta = {
+
changelog = "https://github.com/hwittenborn/celeste/blob/${src.rev}/CHANGELOG.md";
+
description = "GUI file synchronization client that can sync with any cloud provider";
+
homepage = "https://github.com/hwittenborn/celeste";
+
license = lib.licenses.gpl3Only;
+
maintainers = with lib.maintainers; [ dotlambda ];
+
};
+
}
+31
pkgs/applications/networking/sync/celeste/librclone-path.patch
···
+
diff --git a/librclone-sys/build.rs b/librclone-sys/build.rs
+
index 10e45bc..7d04c08 100644
+
--- a/librclone-sys/build.rs
+
+++ b/librclone-sys/build.rs
+
@@ -16,15 +16,8 @@ fn main() {
+
println!("cargo:rerun-if-changed=go.mod");
+
println!("cargo:rerun-if-changed=go.sum");
+
+
- Command::new("go")
+
- .args(["build", "--buildmode=c-archive", "-o"])
+
- .arg(&format!("{}/librclone.a", out_dir))
+
- .arg("github.com/rclone/rclone/librclone")
+
- .status()
+
- .expect("`go build` failed. Is `go` installed and latest version?");
+
-
+
- println!("cargo:rustc-link-search=native={}", out_dir);
+
- println!("cargo:rustc-link-lib=static=rclone");
+
+ println!("cargo:rustc-link-search=native={}", "@librclone@/lib");
+
+ println!("cargo:rustc-link-lib=dylib=rclone");
+
+
if target_triple.ends_with("darwin") {
+
println!("cargo:rustc-link-lib=framework=CoreFoundation");
+
@@ -32,7 +25,7 @@ fn main() {
+
}
+
+
let bindings = bindgen::Builder::default()
+
- .header(format!("{}/librclone.h", out_dir))
+
+ .header(format!("{}/librclone.h", "@librclone@/include"))
+
.allowlist_function("RcloneRPC")
+
.allowlist_function("RcloneInitialize")
+
.allowlist_function("RcloneFinalize")
+16
pkgs/applications/networking/sync/celeste/target-dir.patch
···
+
diff --git a/celeste/src/launch.rs b/celeste/src/launch.rs
+
index 5227170..e3cf189 100644
+
--- a/celeste/src/launch.rs
+
+++ b/celeste/src/launch.rs
+
@@ -172,10 +172,7 @@ impl TrayApp {
+
perms.set_mode(0o755);
+
file.set_permissions(perms).unwrap();
+
+
- #[cfg(debug_assertions)]
+
- let tray_file = include_bytes!("../../target/debug/celeste-tray");
+
- #[cfg(not(debug_assertions))]
+
- let tray_file = include_bytes!("../../target/release/celeste-tray");
+
+ let tray_file = include_bytes!(concat!("../../target/@rustTarget@/", env!("cargoBuildType"), "/celeste-tray"));
+
+
file.write_all(tray_file).unwrap();
+
drop(file);
+2
pkgs/top-level/all-packages.nix
···
inherit (darwin.apple_sdk.frameworks) Carbon;
+
celeste = callPackage ../applications/networking/sync/celeste { };
+
cyan = callPackage ../applications/graphics/cyan {};
cyanrip = callPackage ../applications/audio/cyanrip { };