Hey there,
I began upgrading this package: nixpkgs/default.nix at 9e570d0034df2923b8b4ad158cdc23ddc7d34f1e · NixOS/nixpkgs · GitHub.
After having tried many years ago to make this package and having to give up, thankfully someone posted it, but it’s now pretty much out of date.
Armed with an example, I realized maybe I now can do it!
After having spent more than 3 hours, I came up with this:
{ lib
, stdenv
, fetchFromGitHub
, autoPatchelfHook
, fuse
, packer
, maven3
, openjdk17
, jre
, makeWrapper
, glib
, wrapGAppsHook
}:
let
pname = "cryptomator";
version = "1.6.4";
src = fetchFromGitHub {
owner = "cryptomator";
repo = "cryptomator";
rev = version;
sha256 = "15pp4fg8q2b9p9zcqqb8lfp3hr5170yj3md5qc9i3lx0dn58qd2i";
};
# perform fake build to make a fixed-output derivation out of the files downloaded from maven central (120MB)
deps = stdenv.mkDerivation {
name = "cryptomator-${version}-deps";
inherit src;
nativeBuildInputs = [ openjdk17 maven3 ];
preConfigure = ''
sed '/isKeyLocked/c\//removed temporarily (do we have old OpenJFX on Nix?)' -i src/main/java/org/cryptomator/ui/controls/SecurePasswordField.java
'';
buildPhase = ''
mvn -Plinux package -Dmaven.repo.local=$out/.m2
'';
# keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
installPhase = ''
find $out/.m2 -type f -regex '.+\(\.lastUpdated\|resolver-status\.properties\|_remote\.repositories\)' -delete
find $out/.m2 -type f -iname '*.pom' -exec sed -i -e 's/\r\+$//' {} \;
'';
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "0qp9z2di31dx24s62kb8py93payjbifs4j7727myvz9pss4vv2j2";
};
in
stdenv.mkDerivation rec {
inherit pname version src;
preConfigure = ''
sed '/isKeyLocked/c\//removed temporarily (do we have old OpenJFX on Nix?)' -i src/main/java/org/cryptomator/ui/controls/SecurePasswordField.java
'';
buildPhase = ''
mvn -Plinux package --offline -Dmaven.repo.local=${deps}/.m2
'';
installPhase = ''
mkdir -p $out/bin $out/lib
# moving over all libs
cp -r ${deps}/.m2/* $out/lib
cp target/cryptomator-1.6.4.jar $out/lib
makeWrapper ${jre}/bin/java $out/bin/cryptomator \
--add-flags "-classpath '$out/lib/*'" \
--add-flags "-Dcryptomator.settingsPath='~/.config/Cryptomator/settings.json'" \
--add-flags "-Dcryptomator.ipcPortPath='~/.config/Cryptomator/ipcPort.bin'" \
--add-flags "-Dcryptomator.logDir='~/.local/share/Cryptomator/logs'" \
--add-flags "-Dcryptomator.mountPointsDir='~/.local/share/Cryptomator/mnt'" \
--add-flags "-Djdk.gtk.version=3" \
--add-flags "-Xss20m" \
--add-flags "-Xmx512m" \
--add-flags "org.cryptomator.launcher.Cryptomator" \
--prefix PATH : "$out/usr/share/cryptomator/libs/:${lib.makeBinPath [ jre glib ]}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ fuse ]}" \
--set JAVA_HOME "${jre.home}"
# install desktop entry and icons
cp -r ${src}/dist/linux/appimage/resources/AppDir/usr/* $out/
'';
nativeBuildInputs = [ autoPatchelfHook maven3 makeWrapper wrapGAppsHook openjdk17 ];
buildInputs = [ fuse packer jre glib ];
meta = with lib; {
description = "Free client-side encryption for your cloud files";
homepage = "https://cryptomator.org";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ bachp ];
platforms = platforms.linux;
};
}
Note that the script is building, but calling cryptomator
in the terminal now gives this:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/inject/Provider
at org.cryptomator.launcher.Cryptomator.<clinit>(Cryptomator.java:34)
Caused by: java.lang.ClassNotFoundException: javax.inject.Provider
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
... 1 more
I’ve looked everywhere trying to fix this and as it stands now I’m at a dead end. It’s getting late here and have to put this in the fridge once again, even tho I feel like I’m close. I hope you maybe find the error much quicker than I do, thanks a lot in advance.
Edit 1
I managed to get much further right now. I now get the following error:
01:45:43.787 [JavaFX Application Thread] INFO o.c.ui.launcher.FxApplicationStarter - JavaFX Runtime started.
Exception in thread "JavaFX Application Thread" java.util.ServiceConfigurationError: org.cryptomator.integrations.keychain.KeychainAccessProvider: Provider org.cryptomator.linux.keychain.KDEWalletKeychainAccess could not be instantiated
at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:586)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:813)
at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:729)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at org.cryptomator.common.keychain.KeychainModule.provideSupportedKeychainAccessProviders(KeychainModule.java:31)
at org.cryptomator.common.keychain.KeychainModule_ProvideSupportedKeychainAccessProvidersFactory.provideSupportedKeychainAccessProviders(KeychainModule_ProvideSupportedKeychainAccessProvidersFactory.java:38)
at org.cryptomator.launcher.DaggerCryptomatorComponent$SwitchingProvider.get(DaggerCryptomatorComponent.java:7725)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at org.cryptomator.launcher.DaggerCryptomatorComponent$SwitchingProvider.get(DaggerCryptomatorComponent.java:7720)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at org.cryptomator.launcher.DaggerCryptomatorComponent$SwitchingProvider.get(DaggerCryptomatorComponent.java:7714)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at org.cryptomator.launcher.DaggerCryptomatorComponent$MainWindowComponentImpl$SwitchingProvider.get(DaggerCryptomatorComponent.java:5533)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at org.cryptomator.ui.common.FxmlLoaderFactory.constructController(FxmlLoaderFactory.java:74)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:940)
at javafx.fxml/javafx.fxml.FXMLLoader$InstanceDeclarationElement.processAttribute(FXMLLoader.java:982)
at javafx.fxml/javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:229)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:754)
at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2808)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2634)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml/javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1156)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:756)
at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2808)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2634)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml/javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1156)
at javafx.fxml/javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:756)
at javafx.fxml/javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2808)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2634)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2517)
at org.cryptomator.ui.common.FxmlLoaderFactory.load(FxmlLoaderFactory.java:42)
at org.cryptomator.ui.common.FxmlLoaderFactory.createScene(FxmlLoaderFactory.java:59)
at org.cryptomator.ui.common.FxmlLoaderFactory.createScene(FxmlLoaderFactory.java:47)
at org.cryptomator.ui.mainwindow.MainWindowModule.provideMainScene(MainWindowModule.java:76)
at org.cryptomator.ui.mainwindow.MainWindowModule_ProvideMainSceneFactory.provideMainScene(MainWindowModule_ProvideMainSceneFactory.java:31)
at org.cryptomator.launcher.DaggerCryptomatorComponent$MainWindowComponentImpl$SwitchingProvider.get(DaggerCryptomatorComponent.java:5470)
at dagger.internal.DoubleCheck.get(DoubleCheck.java:47)
at org.cryptomator.ui.mainwindow.MainWindowComponent.showMainWindow(MainWindowComponent.java:28)
at org.cryptomator.ui.fxapp.FxApplication.lambda$showMainWindow$1(FxApplication.java:114)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NoClassDefFoundError: org/freedesktop/dbus/exceptions/DBusException
at org.cryptomator.linux.keychain.KDEWalletKeychainAccess.<init>(KDEWalletKeychainAccess.java:26)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:789)
... 54 more
Caused by: java.lang.ClassNotFoundException: org.freedesktop.dbus.exceptions.DBusException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/ja
The new script:
{ lib
, stdenv
, fetchFromGitHub
, autoPatchelfHook
, fuse
, packer
, maven3
, openjdk17
, jre
, makeWrapper
, glib
, wrapGAppsHook
}:
let
pname = "cryptomator";
version = "1.6.4";
src = fetchFromGitHub {
owner = "cryptomator";
repo = "cryptomator";
rev = version;
sha256 = "15pp4fg8q2b9p9zcqqb8lfp3hr5170yj3md5qc9i3lx0dn58qd2i";
};
# perform fake build to make a fixed-output derivation out of the files downloaded from maven central (120MB)
deps = stdenv.mkDerivation {
name = "cryptomator-${version}-deps";
inherit src;
nativeBuildInputs = [ openjdk17 maven3 ];
preConfigure = ''
sed '/isKeyLocked/c\//removed temporarily (do we have old OpenJFX on Nix?)' -i src/main/java/org/cryptomator/ui/controls/SecurePasswordField.java
'';
buildPhase = ''
mvn -Plinux package -Dmaven.repo.local=$out/.m2
'';
# keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
installPhase = ''
find $out/.m2 -type f -regex '.+\(\.lastUpdated\|resolver-status\.properties\|_remote\.repositories\)' -delete
find $out/.m2 -type f -iname '*.pom' -exec sed -i -e 's/\r\+$//' {} \;
'';
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "0qp9z2di31dx24s62kb8py93payjbifs4j7727myvz9pss4vv2j2";
};
in
stdenv.mkDerivation rec {
inherit pname version src;
preConfigure = ''
sed '/isKeyLocked/c\//removed temporarily (do we have old OpenJFX on Nix?)' -i src/main/java/org/cryptomator/ui/controls/SecurePasswordField.java
'';
buildPhase = ''
mvn -Plinux package --offline -Dmaven.repo.local=${deps}/.m2
'';
installPhase = ''
mkdir -p $out/bin $out/lib
# moving over all libs
cp -r target/mods/*.jar $out/lib
cp target/cryptomator-1.6.4.jar $out/lib
makeWrapper ${jre}/bin/java $out/bin/cryptomator \
--add-flags "-classpath '$out/lib/*'" \
--add-flags "-Dcryptomator.settingsPath='~/.config/Cryptomator/settings.json'" \
--add-flags "-Dcryptomator.ipcSocketPath='~/.config/Cryptomator/ipc.socket'" \
--add-flags "-Dcryptomator.logDir='~/.local/share/Cryptomator/logs'" \
--add-flags "-Dcryptomator.mountPointsDir='~/.local/share/Cryptomator/mnt'" \
--add-flags "-Djdk.gtk.version=3" \
--add-flags "-Xss20m" \
--add-flags "-Xmx512m" \
--add-flags "org.cryptomator.launcher.Cryptomator" \
--prefix PATH : "$out/usr/share/cryptomator/libs/:${lib.makeBinPath [ jre glib ]}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ fuse ]}" \
--set JAVA_HOME "${jre.home}"
# install desktop entry and icons
cp -r ${src}/dist/linux/appimage/resources/AppDir/usr/* $out/
'';
nativeBuildInputs = [ autoPatchelfHook maven3 makeWrapper wrapGAppsHook openjdk17 ];
buildInputs = [ fuse packer jre glib ];
meta = with lib; {
description = "Free client-side encryption for your cloud files";
homepage = "https://cryptomator.org";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ bachp ];
platforms = platforms.linux;
};
}
Edit 3
Managed to get the GUI to launch using this! (but mounting crashes my PC, but this could also be me, will test more):
{ lib
, stdenv
, fetchFromGitHub
, autoPatchelfHook
, fuse
, packer
, maven3
, openjdk17
, jre
, makeWrapper
, glib
, wrapGAppsHook
}:
let
pname = "cryptomator";
version = "1.6.4";
src = fetchFromGitHub {
owner = "cryptomator";
repo = "cryptomator";
rev = version;
sha256 = "15pp4fg8q2b9p9zcqqb8lfp3hr5170yj3md5qc9i3lx0dn58qd2i";
};
# perform fake build to make a fixed-output derivation out of the files downloaded from maven central (120MB)
deps = stdenv.mkDerivation {
name = "cryptomator-${version}-deps";
inherit src;
nativeBuildInputs = [ openjdk17 maven3 ];
preConfigure = ''
sed '/isKeyLocked/c\//removed temporarily (do we have old OpenJFX on Nix?)' -i src/main/java/org/cryptomator/ui/controls/SecurePasswordField.java
'';
buildPhase = ''
mvn -Plinux package -Dmaven.repo.local=$out/.m2
'';
# keep only *.{pom,jar,sha1,nbm} and delete all ephemeral files with lastModified timestamps inside
installPhase = ''
find $out/.m2 -type f -regex '.+\(\.lastUpdated\|resolver-status\.properties\|_remote\.repositories\)' -delete
find $out/.m2 -type f -iname '*.pom' -exec sed -i -e 's/\r\+$//' {} \;
'';
outputHashAlgo = "sha256";
outputHashMode = "recursive";
outputHash = "0qp9z2di31dx24s62kb8py93payjbifs4j7727myvz9pss4vv2j2";
};
in
stdenv.mkDerivation rec {
inherit pname version src;
preConfigure = ''
sed '/isKeyLocked/c\//removed temporarily (do we have old OpenJFX on Nix?)' -i src/main/java/org/cryptomator/ui/controls/SecurePasswordField.java
'';
buildPhase = ''
mvn -Plinux package --offline -Dmaven.repo.local=${deps}/.m2
'';
installPhase = ''
mkdir -p $out/bin $out/libs $out/mods
# moving over all libs
cp -r target/mods/* $out/mods
cp target/cryptomator-1.6.4.jar $out/mods
cp -r target/libs/* $out/libs
makeWrapper ${jre}/bin/java $out/bin/cryptomator \
--add-flags "-p '$out/mods'" \
--add-flags "-classpath '$out/libs/*'" \
--add-flags "-Dcryptomator.settingsPath='~/.config/Cryptomator/settings.json'" \
--add-flags "-Dcryptomator.ipcSocketPath='~/.config/Cryptomator/ipc.socket'" \
--add-flags "-Dcryptomator.logDir='~/.local/share/Cryptomator/logs'" \
--add-flags "-Dcryptomator.mountPointsDir='~/.local/share/Cryptomator/mnt'" \
--add-flags "-Djdk.gtk.version=3" \
--add-flags "-Xss20m" \
--add-flags "-Xmx512m" \
--add-flags "-m org.cryptomator.desktop/org.cryptomator.launcher.Cryptomator" \
--prefix PATH : "$out/usr/share/cryptomator/libs/:${lib.makeBinPath [ jre glib ]}" \
--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ fuse ]}" \
--set JAVA_HOME "${jre.home}"
# install desktop entry and icons
cp -r ${src}/dist/linux/appimage/resources/AppDir/usr/* $out/
'';
nativeBuildInputs = [ autoPatchelfHook maven3 makeWrapper wrapGAppsHook openjdk17 ];
buildInputs = [ fuse packer jre glib ];
meta = with lib; {
description = "Free client-side encryption for your cloud files";
homepage = "https://cryptomator.org";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ bachp ];
platforms = platforms.linux;
};
}