149 lines
5 KiB
Nix
149 lines
5 KiB
Nix
|
{ stdenv
|
||
|
, lib
|
||
|
, fetchurl
|
||
|
, fetchzip
|
||
|
, openjdk
|
||
|
, openjfx
|
||
|
, writeScript
|
||
|
, runCommandLocal
|
||
|
, bash
|
||
|
, unzip
|
||
|
, makeWrapper
|
||
|
, libredirect
|
||
|
, xsettingsd
|
||
|
, makeDesktopItem
|
||
|
, copyDesktopItems
|
||
|
, python3
|
||
|
}:
|
||
|
let
|
||
|
# Run update.py to update this file.
|
||
|
inherit (lib.importJSON ./version.json) version url sha256;
|
||
|
|
||
|
src = fetchzip {
|
||
|
inherit url sha256;
|
||
|
extension = "zip";
|
||
|
stripRoot = false;
|
||
|
};
|
||
|
|
||
|
# ÁNYK needs JavaFX for the Ügyfélkapu login webview.
|
||
|
jdkWithFX = openjdk.override {
|
||
|
enableJavaFX = true;
|
||
|
openjfx_jdk = openjfx.override { withWebKit = true; };
|
||
|
};
|
||
|
|
||
|
extraClasspath = [
|
||
|
# ÁNYK uses some SOAP stuff that's not shipped with OpenJDK any more.
|
||
|
# We don't really want to use openjdk8 because it's unusable on HiDPI
|
||
|
# and people are more likely to have a modern OpenJDK installed.
|
||
|
(fetchurl {
|
||
|
url = "mirror://maven/org/glassfish/metro/webservices-rt/2.4.10/webservices-rt-2.4.10.jar";
|
||
|
hash = "sha256-lHclIZn3HR2B2lMttmmQGIV67qJi5KhL5jT2WNUQpPI=";
|
||
|
})
|
||
|
|
||
|
(fetchurl {
|
||
|
url = "mirror://maven/org/glassfish/metro/webservices-api/2.4.10/webservices-api-2.4.10.jar";
|
||
|
hash = "sha256-1jiabjPkRnh+l/fmTt8aKE5hpeLreYOiLH9sVIcLUQE=";
|
||
|
})
|
||
|
|
||
|
(fetchurl {
|
||
|
url = "mirror://maven/com/sun/activation/jakarta.activation/2.0.1/jakarta.activation-2.0.1.jar";
|
||
|
hash = "sha256-ueJLfdbgdJVWLqllMb4xMMltuk144d/Yitu96/QzKHE=";
|
||
|
})
|
||
|
|
||
|
# Patch one of the ÁNYK classes so it works with the packages above by removing .internal. from the package names.
|
||
|
(runCommandLocal "anyk-patch" {} ''
|
||
|
mkdir $out
|
||
|
cd $out
|
||
|
${unzip}/bin/unzip ${src}/application/abevjava.jar hu/piller/enykp/niszws/ClientStubBuilder.class
|
||
|
${python3}/bin/python ${./patch_paths.py} hu/piller/enykp/niszws/ClientStubBuilder.class
|
||
|
'')
|
||
|
];
|
||
|
|
||
|
# This script can be used to run template installation jars (or use the Szervíz -> Telepítés menu)
|
||
|
anyk-java = writeScript "anyk-java" ''
|
||
|
if [ -f ~/.abevjava/abevjavapath.cfg ]
|
||
|
then
|
||
|
if ABEVJAVA_PATH_CFG=$(grep abevjava.path ~/.abevjava/abevjavapath.cfg)
|
||
|
then
|
||
|
ABEVJAVA_PATH=''${ABEVJAVA_PATH_CFG#abevjava.path = }
|
||
|
echo "Determined abevjava path as $ABEVJAVA_PATH"
|
||
|
else
|
||
|
echo "Could not determine abevjava path from ~/.abevjava/abevjavapath.cfg"
|
||
|
exit 1
|
||
|
fi
|
||
|
else
|
||
|
ABEVJAVA_PATH=~/abevjava
|
||
|
mkdir -p ~/.abevjava
|
||
|
echo "abevjava.path = $ABEVJAVA_PATH" > ~/.abevjava/abevjavapath.cfg
|
||
|
echo "Initialized abevjava path as $ABEVJAVA_PATH"
|
||
|
fi
|
||
|
|
||
|
# Sync help files.
|
||
|
mkdir -p "$ABEVJAVA_PATH/segitseg/"
|
||
|
cp -sRf --no-preserve=all @out@/opt/segitseg/. "$ABEVJAVA_PATH/segitseg"
|
||
|
|
||
|
export LD_PRELOAD=${libredirect}/lib/libredirect.so:$LD_PRELOAD
|
||
|
# Look for form templates in ABEVJAVA_PATH instead of the install dir.
|
||
|
export NIX_REDIRECTS=@out@/opt/nyomtatvanyok=$ABEVJAVA_PATH/nyomtatvanyok:@out@/opt/segitseg=$ABEVJAVA_PATH/segitseg:@out@/opt/setenv=$ABEVJAVA_PATH/setenv:/bin/bash=${bash}/bin/bash:$NIX_REDIRECTS
|
||
|
if WINDOW_SCALING_FACTOR=$(${xsettingsd}/bin/dump_xsettings | awk '/Gdk\/WindowScalingFactor/{print $NF}' | grep .); then
|
||
|
# Fix scaling on HiDPI.
|
||
|
SCALING_PROP="-Dsun.java2d.uiScale=''${WINDOW_SCALING_FACTOR}"
|
||
|
fi
|
||
|
# ÁNYK crashes with NullPointerException with the GTK look and feel so use the cross-platform one.
|
||
|
exec ${jdkWithFX}/bin/java -Dswing.systemlaf=javax.swing.plaf.metal.MetalLookAndFeel $SCALING_PROP "$@"
|
||
|
'';
|
||
|
in stdenv.mkDerivation {
|
||
|
pname = "anyk";
|
||
|
inherit version src;
|
||
|
|
||
|
dontConfigure = true;
|
||
|
dontBuild = true;
|
||
|
|
||
|
nativeBuildInputs = [ makeWrapper copyDesktopItems ];
|
||
|
|
||
|
desktopItems = [
|
||
|
(makeDesktopItem rec {
|
||
|
desktopName = "ÁNYK";
|
||
|
name = "anyk";
|
||
|
exec = "anyk";
|
||
|
icon = "anyk";
|
||
|
categories = [ "Office" ];
|
||
|
})
|
||
|
];
|
||
|
|
||
|
installPhase = ''
|
||
|
mkdir $out
|
||
|
cp -r application $out/opt
|
||
|
|
||
|
mkdir $out/bin
|
||
|
substituteAll ${anyk-java} $out/bin/anyk-java
|
||
|
chmod +x $out/bin/anyk-java
|
||
|
|
||
|
# ÁNYK has some old school dependencies that are no longer bundled with Java, put them on the classpath.
|
||
|
makeWrapper $out/bin/anyk-java $out/bin/anyk --add-flags "-cp ${lib.concatStringsSep ":" extraClasspath}:$out/opt/abevjava.jar hu.piller.enykp.gui.framework.MainFrame"
|
||
|
|
||
|
mkdir -p $out/share/applications $out/share/pixmaps $out/share/icons
|
||
|
|
||
|
copyDesktopItems
|
||
|
|
||
|
ln -s $out/opt/abevjava.png $out/share/pixmaps/anyk.png
|
||
|
ln -s $out/opt/abevjava.png $out/share/icons/anyk.png
|
||
|
'';
|
||
|
|
||
|
meta = with lib; {
|
||
|
description = "Tool for filling forms for the Hungarian government,";
|
||
|
longDescription = ''
|
||
|
Official tool for filling Hungarian government forms.
|
||
|
|
||
|
Use `anyk-java` to install form templates/help files like this: `anyk-java -jar NAV_IGAZOL.jar`
|
||
|
'';
|
||
|
homepage = "https://nav.gov.hu/nyomtatvanyok/letoltesek/nyomtatvanykitolto_programok/nyomtatvany_apeh/keretprogramok/javakitolto";
|
||
|
license = licenses.unfree;
|
||
|
maintainers = with maintainers; [ chpatrick ];
|
||
|
platforms = openjdk.meta.platforms;
|
||
|
sourceProvenance = [ sourceTypes.binaryBytecode ];
|
||
|
mainProgram = "anyk";
|
||
|
};
|
||
|
}
|
||
|
|