diff options
author | Robert Schütz <nix@dotlambda.de> | 2023-02-09 16:54:30 -0800 |
---|---|---|
committer | Robert Schütz <github@dotlambda.de> | 2023-03-08 15:18:26 -0800 |
commit | ea0070a5189adcd3e16bd15f0609d34b5abbbcfe (patch) | |
tree | cf49fe56bc2fad47e96caf009cc9fa30c6cf74e5 /pkgs/applications/networking/sync | |
parent | 6d9f07d8fe1b965e9dffdda2ac9638347e8b9bd9 (diff) | |
download | nixpkgs-ea0070a5189adcd3e16bd15f0609d34b5abbbcfe.tar nixpkgs-ea0070a5189adcd3e16bd15f0609d34b5abbbcfe.tar.gz nixpkgs-ea0070a5189adcd3e16bd15f0609d34b5abbbcfe.tar.bz2 nixpkgs-ea0070a5189adcd3e16bd15f0609d34b5abbbcfe.tar.lz nixpkgs-ea0070a5189adcd3e16bd15f0609d34b5abbbcfe.tar.xz nixpkgs-ea0070a5189adcd3e16bd15f0609d34b5abbbcfe.tar.zst nixpkgs-ea0070a5189adcd3e16bd15f0609d34b5abbbcfe.zip |
celeste: init at 0.4.6
Diffstat (limited to 'pkgs/applications/networking/sync')
3 files changed, 161 insertions, 0 deletions
diff --git a/pkgs/applications/networking/sync/celeste/default.nix b/pkgs/applications/networking/sync/celeste/default.nix new file mode 100644 index 00000000000..701172cbd28 --- /dev/null +++ b/pkgs/applications/networking/sync/celeste/default.nix @@ -0,0 +1,114 @@ +{ 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 ]; + }; +} diff --git a/pkgs/applications/networking/sync/celeste/librclone-path.patch b/pkgs/applications/networking/sync/celeste/librclone-path.patch new file mode 100644 index 00000000000..21af74dfde5 --- /dev/null +++ b/pkgs/applications/networking/sync/celeste/librclone-path.patch @@ -0,0 +1,31 @@ +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") diff --git a/pkgs/applications/networking/sync/celeste/target-dir.patch b/pkgs/applications/networking/sync/celeste/target-dir.patch new file mode 100644 index 00000000000..a8da72e77f7 --- /dev/null +++ b/pkgs/applications/networking/sync/celeste/target-dir.patch @@ -0,0 +1,16 @@ +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); |