Add ib-tws
on picard
This commit is contained in:
parent
6128c1a1e3
commit
e92a899c87
3 changed files with 199 additions and 0 deletions
4
hmModules/ib-tws/default.nix
Normal file
4
hmModules/ib-tws/default.nix
Normal file
|
@ -0,0 +1,4 @@
|
|||
{ fleetFlake, pkgs, ... }:
|
||||
{
|
||||
home.packages = [ fleetFlake.packages.${pkgs.system}.ib-tws ];
|
||||
}
|
|
@ -93,6 +93,7 @@
|
|||
"chirp"
|
||||
"sdrangel"
|
||||
"discord"
|
||||
"ib-tws"
|
||||
];
|
||||
extraGroups = [ "plugdev" ];
|
||||
backupPaths = [ ];
|
||||
|
|
194
packages/ib-tws/default.nix
Normal file
194
packages/ib-tws/default.nix
Normal file
|
@ -0,0 +1,194 @@
|
|||
{
|
||||
stdenv,
|
||||
lib,
|
||||
fetchurl,
|
||||
makeDesktopItem,
|
||||
copyDesktopItems,
|
||||
libXxf86vm,
|
||||
libX11,
|
||||
libXext,
|
||||
libXtst,
|
||||
libXi,
|
||||
libXrender,
|
||||
glib,
|
||||
libxml2,
|
||||
ffmpeg,
|
||||
libGL,
|
||||
freetype,
|
||||
fontconfig,
|
||||
gtk3,
|
||||
pango,
|
||||
cairo,
|
||||
alsa-lib,
|
||||
atk,
|
||||
gdk-pixbuf,
|
||||
gtk2,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
rSubPaths = [
|
||||
"lib/amd64/jli"
|
||||
"lib/amd64/server"
|
||||
"lib/amd64"
|
||||
];
|
||||
|
||||
in
|
||||
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "ib-tws";
|
||||
version = "10.33.1f";
|
||||
etagHash = "f3ac044774c83917855f484a968c6ad2";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://download2.interactivebrokers.com/installers/tws/latest-standalone/tws-latest-standalone-linux-x64.sh";
|
||||
hash = "sha256-Iq4Bd5LTOajfK3IaomeAZL182lEXkCn7JjEO6UWgdFE=";
|
||||
};
|
||||
|
||||
phases = [
|
||||
"unpackPhase"
|
||||
"installPhase"
|
||||
"fixupPhase"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [ copyDesktopItems ];
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
name = pname;
|
||||
desktopName = "IB Trader Workstation";
|
||||
exec = pname;
|
||||
icon = pname;
|
||||
categories = [
|
||||
"Office"
|
||||
"Finance"
|
||||
];
|
||||
startupWMClass = "jclient-LoginFrame";
|
||||
})
|
||||
(makeDesktopItem {
|
||||
name = "ib-gw";
|
||||
desktopName = "IB Gateway";
|
||||
exec = "ib-gw";
|
||||
icon = pname;
|
||||
categories = [
|
||||
"Office"
|
||||
"Finance"
|
||||
];
|
||||
startupWMClass = "ibgateway-GWClient";
|
||||
})
|
||||
];
|
||||
|
||||
unpackPhase = ''
|
||||
echo "Unpacking I4J sfx sh to $PWD..."
|
||||
INSTALL4J_TEMP="$PWD" sh "$src" __i4j_extract_and_exit
|
||||
|
||||
# JRE
|
||||
jrePath="$out/share/${pname}/jre"
|
||||
echo "Unpacking JRE to $jrePath..."
|
||||
mkdir -p "$jrePath"
|
||||
tar -xf "$PWD/"*.dir/jre.tar.gz -C "$jrePath/"
|
||||
|
||||
echo "Patching JRE executables..."
|
||||
patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
"$jrePath/bin/java" "$jrePath/bin/unpack200"
|
||||
|
||||
echo "Unpacking JRE pack files..."
|
||||
for f in "$jrePath/lib/"*.jar.pack "$jrePath/lib/ext/"*.jar.pack; do
|
||||
jar_file=`echo "$f" | awk '{ print substr($0,1,length($0)-5) }'`
|
||||
"$jrePath/bin/unpack200" -r "$f" "$jar_file"
|
||||
[ $? -ne 0 ] && echo "Error unpacking $f" && exit 1
|
||||
done
|
||||
|
||||
echo "Unpacking TWS payload..."
|
||||
INSTALL4J_JAVA_HOME_OVERRIDE="$jrePath" sh "$src" -q -dir "$PWD/"
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
# create main startup script
|
||||
mkdir -p "$out/bin"
|
||||
cat<<EOF > "$out/bin/${pname}"
|
||||
#!$SHELL
|
||||
|
||||
# get script name
|
||||
PROG=\$(basename "\$0")
|
||||
|
||||
# Load system-wide settings and per-user overrides
|
||||
IB_CONFIG_DIR="\$HOME/.\$PROG"
|
||||
JAVA_GC="-Xmx4G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=20 -XX:ConcGCThreads=5 -XX:InitiatingHeapOccupancyPercent=70"
|
||||
JAVA_UI_FLAGS="-Dswing.aatext=TRUE -Dawt.useSystemAAFontSettings=on -Dsun.awt.nopixfmt=true -Dsun.java2d.noddraw=true -Dswing.boldMetal=false -Dsun.locale.formatasdefault=true"
|
||||
JAVA_LOCALE_FLAGS="-Dsun.locale.formatasdefault=true"
|
||||
JAVA_FLAGS="\$JAVA_GC \$JAVA_UI_FLAGS \$JAVA_LOCALE_FLAGS \$JAVA_EXTRA_FLAGS"
|
||||
[ -f "\$HOME/.config/\$PROG.conf" ] && . "\$HOME/.config/\$PROG.conf"
|
||||
|
||||
CLASS="jclient.LoginFrame"
|
||||
[ "\$PROG" = "ib-gw" ] && CLASS="ibgateway.GWClient"
|
||||
|
||||
cd "$out/share/${pname}/jars"
|
||||
"$out/share/${pname}/jre/bin/java" -cp \* \$JAVA_FLAGS \$CLASS \$IB_CONFIG_DIR
|
||||
EOF
|
||||
chmod u+x $out/bin/${pname}
|
||||
|
||||
# create symlink for the gateway
|
||||
ln -s "${pname}" "$out/bin/ib-gw"
|
||||
|
||||
# copy files
|
||||
mkdir -p $out/share/${pname}
|
||||
cp -R jars $out/share/${pname}
|
||||
install -Dm644 .install4j/tws.png $out/share/pixmaps/${pname}.png
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
dontPatchELF = true;
|
||||
dontStrip = true;
|
||||
|
||||
postFixup = ''
|
||||
rpath+="''${rpath:+:}${lib.concatStringsSep ":" (map (a: "$jrePath/${a}") rSubPaths)}"
|
||||
|
||||
# set all the dynamic linkers
|
||||
find $out -type f -perm -0100 \
|
||||
-exec patchelf --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \
|
||||
--set-rpath "$rpath" {} \;
|
||||
|
||||
find $out -name "*.so" -exec patchelf --set-rpath "$rpath" {} \;
|
||||
'';
|
||||
|
||||
rpath = lib.strings.makeLibraryPath libraries;
|
||||
|
||||
libraries = [
|
||||
stdenv.cc
|
||||
stdenv.cc.libc
|
||||
glib
|
||||
libxml2
|
||||
ffmpeg
|
||||
libGL
|
||||
libXxf86vm
|
||||
alsa-lib
|
||||
fontconfig
|
||||
freetype
|
||||
pango
|
||||
gtk3
|
||||
cairo
|
||||
gdk-pixbuf
|
||||
atk
|
||||
libX11
|
||||
libXext
|
||||
libXtst
|
||||
libXi
|
||||
libXrender
|
||||
gtk2
|
||||
];
|
||||
# possibly missing libgdk-x11-2.0.so.0, from gtk2? never caused any trouble though
|
||||
|
||||
passthru.updateScript = ./update.sh;
|
||||
|
||||
meta = with lib; {
|
||||
description = "Trader Work Station of Interactive Brokers";
|
||||
homepage = "https://www.interactivebrokers.com";
|
||||
# license = licenses.unfree;
|
||||
maintainers = lib.optionals (maintainers ? k3a) [ maintainers.k3a ];
|
||||
platforms = [ "x86_64-linux" ];
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue