From 2d6fa679c68c92e67c1ce9056f71fc6dbfe8be32 Mon Sep 17 00:00:00 2001 From: Stefan Junker Date: Thu, 10 Nov 2022 16:29:37 +0100 Subject: [PATCH] WIP: package evolution-decsync --- nix/pkgs/default.nix | 5 ++ nix/pkgs/evolution-decsync/default.nix | 48 +++++++++++++ nix/pkgs/libdecsync-python/default.nix | 21 ++++++ nix/pkgs/libdecsync/default.nix | 96 ++++++++++++++++++++++++++ 4 files changed, 170 insertions(+) create mode 100644 nix/pkgs/evolution-decsync/default.nix create mode 100644 nix/pkgs/libdecsync-python/default.nix create mode 100644 nix/pkgs/libdecsync/default.nix diff --git a/nix/pkgs/default.nix b/nix/pkgs/default.nix index 2ab8ee7..a320e90 100644 --- a/nix/pkgs/default.nix +++ b/nix/pkgs/default.nix @@ -82,6 +82,11 @@ in rec { libgcrypt = pkgs.libgcrypt_1_5; }; + libdecsync = pkgs.callPackage ../pkgs/libdecsync { }; + libdecsync-python = pkgs.callPackage ../pkgs/libdecsync-python { }; + evolution-decsync = + pkgs.callPackage ../pkgs/evolution-decsync { inherit libdecsync; }; + pythonPackages = myPython; myPython = pkgs.python310.withPackages (ps: with ps; diff --git a/nix/pkgs/evolution-decsync/default.nix b/nix/pkgs/evolution-decsync/default.nix new file mode 100644 index 0000000..579535e --- /dev/null +++ b/nix/pkgs/evolution-decsync/default.nix @@ -0,0 +1,48 @@ +{ fetchFromGitHub, git, makeWrapper, meson, ninja, pkg-config, lib, stdenv +, libe-book, evolution-data-server, evolution, gtk3, webkitgtk, cmake +, libdecsync }: + +stdenv.mkDerivation rec { + pname = "Evolution-DecSync"; + version = "v2.1.0-evolution-3.44"; + + src = fetchFromGitHub { + owner = "39aldo39"; + repo = pname; + rev = version; + sha256 = "sha256-5AdL3sKQjMe+gINebWivSAqoVRUbQjCIm8bNoDZTP4A="; + }; + + patches = [ ]; + + buildInputs = + [ evolution-data-server libe-book evolution gtk3 webkitgtk libdecsync ]; + + nativeBuildInputs = [ meson ninja pkg-config cmake ]; + + # mesonFlags = [ + # # use locales from cinnamon-translations + # "--localedir=${cinnamon-translations}/share/locale" + # ]; + + # postPatch = '' + # chmod +x data/meson_install_schemas.py # patchShebangs requires executable file + # patchShebangs data/meson_install_schemas.py + # ''; + + # preFixup = '' + # gappsWrapperArgs+=( + # --prefix XDG_DATA_DIRS : "${cinnamon-desktop}/share" + # --prefix XDG_CONFIG_DIRS : "${cinnamon-settings-daemon}/etc/xdg" + # ) + # ''; + + meta = with lib; { + homepage = "https://github.com/39aldo39/Evolution-DecSync"; + description = + " Evolution plugin to sync contacts and calendars without a server using DecSync "; + # license = licenses.gpl2; + platforms = platforms.linux; + maintainers = [ ]; + }; +} diff --git a/nix/pkgs/libdecsync-python/default.nix b/nix/pkgs/libdecsync-python/default.nix new file mode 100644 index 0000000..75aa24c --- /dev/null +++ b/nix/pkgs/libdecsync-python/default.nix @@ -0,0 +1,21 @@ +{ lib, python3Packages, libdecsync }: + +python3Packages.buildPythonPackage rec { + pname = "libdecsync"; + version = "2.2.1"; + + src = python3Packages.fetchPypi { + inherit pname version; + hash = "sha256-Mukjzjumv9VL+A0maU0K/SliWrgeRjAeiEdN5a83G0I="; + }; + + propagatedBuildInputs = [ libdecsync ]; + meta = with lib; { + description = + "libdecsync is a Python3 wrapper around libdecsync for synchronizing using DecSync"; + homepage = "https://github.com/39aldo39/libdecsync-bindings-python3"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ ethancedwards8 ]; + platforms = platforms.linux; + }; +} diff --git a/nix/pkgs/libdecsync/default.nix b/nix/pkgs/libdecsync/default.nix new file mode 100644 index 0000000..75bd7c1 --- /dev/null +++ b/nix/pkgs/libdecsync/default.nix @@ -0,0 +1,96 @@ +{ fetchFromGitHub, stdenv, lib, pkg-config, ncurses, jdk8, gradle_6, perl +, writeText }: + +let + + pname = "libdecsync"; + version = "v2.2.1"; + + src = fetchFromGitHub { + owner = "39aldo39"; + repo = pname; + rev = version; + sha256 = "sha256-MHIp8r9L8Am8h7+26eN0d/dD1A3ZK6nN0jo5aCPC2Jk="; + }; + + gradle = gradle_6; + + deps = stdenv.mkDerivation { + name = "${pname}-deps"; + inherit src; + + nativeBuildInputs = [ jdk8 perl gradle ]; + + buildPhase = '' + export GRADLE_USER_HOME=$(mktemp -d); + gradle --no-daemon build -x test + ''; + + # Mavenize dependency paths + # e.g. org.codehaus.groovy/groovy/2.4.0/{hash}/groovy-2.4.0.jar -> org/codehaus/groovy/groovy/2.4.0/groovy-2.4.0.jar + installPhase = '' + find $GRADLE_USER_HOME/caches/modules-2 -type f -regex '.*\.\(jar\|pom\)' \ + | perl -pe 's#(.*/([^/]+)/([^/]+)/([^/]+)/[0-9a-f]{30,40}/([^/\s]+))$# ($x = $2) =~ tr|\.|/|; "install -Dm444 $1 \$out/$x/$3/$4/$5" #e' \ + | sh + ''; + + outputHashAlgo = "sha256"; + outputHashMode = "recursive"; + outputHash = lib.fakeSha256; + }; + + # Point to our local deps repo + gradleInit = writeText "init.gradle" '' + settingsEvaluated { settings -> + settings.pluginManagement { + repositories { + clear() + maven { url '${deps}' } + } + } + } + logger.lifecycle 'Replacing Maven repositories with ${deps}...' + gradle.projectsLoaded { + rootProject.allprojects { + buildscript { + repositories { + clear() + maven { url '${deps}' } + } + } + repositories { + clear() + maven { url '${deps}' } + } + } + } + ''; + +in stdenv.mkDerivation rec { + inherit pname version src; + + patches = [ ]; + + buildInputs = [ ncurses ]; + + nativeBuildInputs = [ jdk8 gradle pkg-config ]; + + patchPhase = let + gradleCmd = + "gradle -PVERSION=${version} --offline --no-daemon --info --init-script ${gradleInit}"; + in '' + substituteInPlace Makefile --replace "./gradlew" "${gradleCmd}" + # patchShebangs gradlew + # ln -sf ${gradle}/bin/gradle gradlew + ''; + + meta = with lib; { + homepage = "https://github.com/39aldo39/libdecsync"; + description = + " Evolution plugin to sync contacts and calendars without a server using DecSync "; + # license = licenses.gpl2; + platforms = platforms.linux; + maintainers = [ ]; + }; +} +