Compare commits
5 commits
9dfe6d2749
...
ade989c025
Author | SHA1 | Date | |
---|---|---|---|
ade989c025 | |||
66308177ed | |||
e2bfa81b10 | |||
3130e4ee19 | |||
e92a899c87 |
6 changed files with 239 additions and 32 deletions
64
flake.lock
generated
64
flake.lock
generated
|
@ -122,11 +122,11 @@
|
||||||
"nixpkgs-stable": "nixpkgs-stable"
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738228472,
|
"lastModified": 1738548382,
|
||||||
"narHash": "sha256-8HVtDJLGO6/tx17iFL3yz6s65/y0eMtdp/w/l9FjH0g=",
|
"narHash": "sha256-yV7FmfZr1WKJyh7wMbwjIqIFYAQMSucXWyqJWCclNc0=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "emacs-overlay",
|
"repo": "emacs-overlay",
|
||||||
"rev": "bf817bb80b020ffdeee5769867b8862026bd5312",
|
"rev": "501c905c37fbfaef6ae9b64cd2ff9d90f1383212",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -305,11 +305,11 @@
|
||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1736143030,
|
"lastModified": 1738453229,
|
||||||
"narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=",
|
"narHash": "sha256-7H9XgNiGLKN1G1CgRh0vUL4AheZSYzPm+zmZ7vxbJdo=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de",
|
"rev": "32ea77a06711b758da0ad9bd6a844c5740a87abd",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -466,11 +466,11 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738228963,
|
"lastModified": 1738448366,
|
||||||
"narHash": "sha256-Ee5hVHM7AWxaq7XJN6xiZztTZX8csdXernjqaTW5r9I=",
|
"narHash": "sha256-4ATtQqBlgsGqkHTemta0ydY6f7JBRXz4Hf574NHQpkg=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "d963ed335b890a70ed53eecf14cdb21528eda9b8",
|
"rev": "18fa9f323d8adbb0b7b8b98a8488db308210ed93",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -543,11 +543,11 @@
|
||||||
"lix": {
|
"lix": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738174211,
|
"lastModified": 1738446528,
|
||||||
"narHash": "sha256-eYmp1mKM4kULV1W+EBtCPk6LmKWl2REivaYfGRl+AWo=",
|
"narHash": "sha256-NYL/r7EXSyYP7nXuYGvGYMI9QtztGjVaKKofBt/pCv8=",
|
||||||
"ref": "refs/heads/main",
|
"ref": "refs/heads/main",
|
||||||
"rev": "64e33a7e09a0d1faacf2fd3f6ebd647fe4d8346a",
|
"rev": "a51380645f61b33d37a536b596d16c481f7b84a6",
|
||||||
"revCount": 17329,
|
"revCount": 17342,
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git@git.lix.systems/lix-project/lix"
|
"url": "https://git@git.lix.systems/lix-project/lix"
|
||||||
},
|
},
|
||||||
|
@ -698,11 +698,11 @@
|
||||||
"nixpkgs": "nixpkgs_6"
|
"nixpkgs": "nixpkgs_6"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738033138,
|
"lastModified": 1738277753,
|
||||||
"narHash": "sha256-qlIM8A3bdL9c6PexhpS+QyZLO9y/8a3V75HVyJgDE5Q=",
|
"narHash": "sha256-iyFcCOk0mmDiv4ut9mBEuMxMZIym3++0qN1rQBg8FW0=",
|
||||||
"owner": "LnL7",
|
"owner": "LnL7",
|
||||||
"repo": "nix-darwin",
|
"repo": "nix-darwin",
|
||||||
"rev": "349a74c66c596ef97ee97b4d80a3ca61227b6120",
|
"rev": "49b807fa7c37568d7fbe2aeaafb9255c185412f9",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -734,11 +734,11 @@
|
||||||
},
|
},
|
||||||
"nixosHardware": {
|
"nixosHardware": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1737751639,
|
"lastModified": 1738471961,
|
||||||
"narHash": "sha256-ZEbOJ9iT72iwqXsiEMbEa8wWjyFvRA9Ugx8utmYbpz4=",
|
"narHash": "sha256-cgXDFrplNGs7bCVzXhRofjD8oJYqqXGcmUzXjHmip6Y=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixos-hardware",
|
"repo": "nixos-hardware",
|
||||||
"rev": "dfad538f751a5aa5d4436d9781ab27a6128ec9d4",
|
"rev": "537286c3c59b40311e5418a180b38034661d2536",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -797,14 +797,14 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"nixpkgs-lib": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1735774519,
|
"lastModified": 1738452942,
|
||||||
"narHash": "sha256-CewEm1o2eVAnoqb6Ml+Qi9Gg/EfNAxbRx1lANGVyoLI=",
|
"narHash": "sha256-vJzFZGaCpnmo7I6i416HaBLpC+hvcURh/BQwROcGIp8=",
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz"
|
"url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"type": "tarball",
|
"type": "tarball",
|
||||||
"url": "https://github.com/NixOS/nixpkgs/archive/e9b51731911566bbf7e4895475a87fe06961de0b.tar.gz"
|
"url": "https://github.com/NixOS/nixpkgs/archive/072a6db25e947df2f31aab9eccd0ab75d5b2da11.tar.gz"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs-lib_2": {
|
"nixpkgs-lib_2": {
|
||||||
|
@ -827,11 +827,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs-stable": {
|
"nixpkgs-stable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738023785,
|
"lastModified": 1738435198,
|
||||||
"narHash": "sha256-BPHmb3fUwdHkonHyHi1+x89eXB3kA1jffIpwPVJIVys=",
|
"narHash": "sha256-5+Hmo4nbqw8FrW85FlNm4IIrRnZ7bn0cmXlScNsNRLo=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "2b4230bf03deb33103947e2528cac2ed516c5c89",
|
"rev": "f6687779bf4c396250831aa5a32cbfeb85bb07a3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -905,11 +905,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_4": {
|
"nixpkgs_4": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738142207,
|
"lastModified": 1738410390,
|
||||||
"narHash": "sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9+WC4=",
|
"narHash": "sha256-xvTo0Aw0+veek7hvEVLzErmJyQkEcRk6PSR4zsRQFEc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9d3ae807ebd2981d593cddd0080856873139aa40",
|
"rev": "3a228057f5b619feb3186e986dbe76278d707b6e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -984,11 +984,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs_9": {
|
"nixpkgs_9": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1738142207,
|
"lastModified": 1738410390,
|
||||||
"narHash": "sha256-NGqpVVxNAHwIicXpgaVqJEJWeyqzoQJ9oc8lnK9+WC4=",
|
"narHash": "sha256-xvTo0Aw0+veek7hvEVLzErmJyQkEcRk6PSR4zsRQFEc=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "9d3ae807ebd2981d593cddd0080856873139aa40",
|
"rev": "3a228057f5b619feb3186e986dbe76278d707b6e",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
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 ];
|
||||||
|
}
|
|
@ -68,6 +68,9 @@ environment {
|
||||||
DISPLAY ":0"
|
DISPLAY ":0"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hotkey-overlay {
|
||||||
|
skip-at-startup
|
||||||
|
}
|
||||||
|
|
||||||
// You can configure outputs by their name, which you can find
|
// You can configure outputs by their name, which you can find
|
||||||
// by running `niri msg outputs` while inside a niri instance.
|
// by running `niri msg outputs` while inside a niri instance.
|
||||||
|
|
|
@ -33,6 +33,11 @@
|
||||||
fi
|
fi
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
DISPLAY = ":0";
|
||||||
|
QT_QPA_PLATFORM = "wayland";
|
||||||
|
};
|
||||||
|
|
||||||
programs.rofi = {
|
programs.rofi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs.rofi-wayland;
|
package = pkgs.rofi-wayland;
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
"chirp"
|
"chirp"
|
||||||
"sdrangel"
|
"sdrangel"
|
||||||
"discord"
|
"discord"
|
||||||
|
"ib-tws"
|
||||||
];
|
];
|
||||||
extraGroups = [ "plugdev" ];
|
extraGroups = [ "plugdev" ];
|
||||||
backupPaths = [ ];
|
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